@fredlackey/devutils 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/README.md +5 -5
  2. package/package.json +1 -1
  3. package/src/commands/install.js +374 -36
  4. package/src/installs/adobe-creative-cloud.js +527 -25
  5. package/src/installs/adobe-creative-cloud.md +605 -0
  6. package/src/installs/appcleaner.js +303 -26
  7. package/src/installs/appcleaner.md +699 -0
  8. package/src/installs/apt-transport-https.js +390 -0
  9. package/src/installs/apt-transport-https.md +678 -0
  10. package/src/installs/atomicparsley.js +624 -26
  11. package/src/installs/atomicparsley.md +795 -0
  12. package/src/installs/aws-cli.js +779 -26
  13. package/src/installs/aws-cli.md +727 -0
  14. package/src/installs/balena-etcher.js +688 -26
  15. package/src/installs/balena-etcher.md +761 -0
  16. package/src/installs/bambu-studio.js +912 -26
  17. package/src/installs/bambu-studio.md +780 -0
  18. package/src/installs/bash-completion.js +554 -23
  19. package/src/installs/bash-completion.md +833 -0
  20. package/src/installs/bash.js +399 -26
  21. package/src/installs/bash.md +993 -0
  22. package/src/installs/beyond-compare.js +585 -26
  23. package/src/installs/beyond-compare.md +813 -0
  24. package/src/installs/build-essential.js +511 -26
  25. package/src/installs/build-essential.md +977 -0
  26. package/src/installs/ca-certificates.js +618 -0
  27. package/src/installs/ca-certificates.md +937 -0
  28. package/src/installs/caffeine.js +490 -26
  29. package/src/installs/caffeine.md +839 -0
  30. package/src/installs/camtasia.js +577 -25
  31. package/src/installs/camtasia.md +762 -0
  32. package/src/installs/chatgpt.js +458 -26
  33. package/src/installs/chatgpt.md +814 -0
  34. package/src/installs/chocolatey.js +447 -0
  35. package/src/installs/chocolatey.md +661 -0
  36. package/src/installs/chrome-canary.js +472 -26
  37. package/src/installs/chrome-canary.md +641 -0
  38. package/src/installs/chromium.js +645 -26
  39. package/src/installs/chromium.md +838 -0
  40. package/src/installs/claude-code.js +558 -26
  41. package/src/installs/claude-code.md +1173 -0
  42. package/src/installs/curl.js +361 -26
  43. package/src/installs/curl.md +714 -0
  44. package/src/installs/cursor.js +561 -26
  45. package/src/installs/cursor.md +970 -0
  46. package/src/installs/dbschema.js +674 -26
  47. package/src/installs/dbschema.md +925 -0
  48. package/src/installs/dependencies.md +435 -0
  49. package/src/installs/development-tools.js +600 -0
  50. package/src/installs/development-tools.md +977 -0
  51. package/src/installs/docker.js +1010 -25
  52. package/src/installs/docker.md +1109 -0
  53. package/src/installs/drawio.js +1001 -26
  54. package/src/installs/drawio.md +795 -0
  55. package/src/installs/elmedia-player.js +328 -25
  56. package/src/installs/elmedia-player.md +556 -0
  57. package/src/installs/ffmpeg.js +870 -25
  58. package/src/installs/ffmpeg.md +852 -0
  59. package/src/installs/file.js +464 -0
  60. package/src/installs/file.md +987 -0
  61. package/src/installs/gemini-cli.js +793 -26
  62. package/src/installs/gemini-cli.md +1153 -0
  63. package/src/installs/git.js +382 -26
  64. package/src/installs/git.md +907 -0
  65. package/src/installs/gitego.js +931 -26
  66. package/src/installs/gitego.md +1172 -0
  67. package/src/installs/go.js +913 -26
  68. package/src/installs/go.md +958 -0
  69. package/src/installs/google-chrome.js +801 -25
  70. package/src/installs/google-chrome.md +862 -0
  71. package/src/installs/gpg.js +412 -73
  72. package/src/installs/gpg.md +1056 -0
  73. package/src/installs/homebrew.js +1015 -26
  74. package/src/installs/homebrew.md +988 -0
  75. package/src/installs/imageoptim.js +950 -26
  76. package/src/installs/imageoptim.md +1119 -0
  77. package/src/installs/installers.json +2297 -0
  78. package/src/installs/jq.js +382 -26
  79. package/src/installs/jq.md +809 -0
  80. package/src/installs/keyboard-maestro.js +701 -26
  81. package/src/installs/keyboard-maestro.md +825 -0
  82. package/src/installs/latex.js +771 -26
  83. package/src/installs/latex.md +1095 -0
  84. package/src/installs/lftp.js +338 -26
  85. package/src/installs/lftp.md +907 -0
  86. package/src/installs/lsb-release.js +346 -0
  87. package/src/installs/lsb-release.md +814 -0
  88. package/src/installs/messenger.js +829 -26
  89. package/src/installs/messenger.md +900 -0
  90. package/src/installs/microsoft-office.js +550 -26
  91. package/src/installs/microsoft-office.md +760 -0
  92. package/src/installs/microsoft-teams.js +782 -25
  93. package/src/installs/microsoft-teams.md +886 -0
  94. package/src/installs/node.js +886 -26
  95. package/src/installs/node.md +1153 -0
  96. package/src/installs/nordpass.js +698 -26
  97. package/src/installs/nordpass.md +921 -0
  98. package/src/installs/nvm.js +977 -26
  99. package/src/installs/nvm.md +1057 -0
  100. package/src/installs/openssh.js +734 -64
  101. package/src/installs/openssh.md +1056 -0
  102. package/src/installs/pandoc.js +644 -26
  103. package/src/installs/pandoc.md +1036 -0
  104. package/src/installs/pinentry.js +492 -26
  105. package/src/installs/pinentry.md +1142 -0
  106. package/src/installs/pngyu.js +851 -26
  107. package/src/installs/pngyu.md +896 -0
  108. package/src/installs/postman.js +781 -26
  109. package/src/installs/postman.md +940 -0
  110. package/src/installs/procps.js +425 -0
  111. package/src/installs/procps.md +851 -0
  112. package/src/installs/safari-tech-preview.js +355 -25
  113. package/src/installs/safari-tech-preview.md +533 -0
  114. package/src/installs/sfnt2woff.js +640 -26
  115. package/src/installs/sfnt2woff.md +795 -0
  116. package/src/installs/shellcheck.js +463 -26
  117. package/src/installs/shellcheck.md +1005 -0
  118. package/src/installs/slack.js +722 -25
  119. package/src/installs/slack.md +865 -0
  120. package/src/installs/snagit.js +566 -25
  121. package/src/installs/snagit.md +844 -0
  122. package/src/installs/software-properties-common.js +372 -0
  123. package/src/installs/software-properties-common.md +805 -0
  124. package/src/installs/spotify.js +858 -25
  125. package/src/installs/spotify.md +901 -0
  126. package/src/installs/studio-3t.js +803 -26
  127. package/src/installs/studio-3t.md +918 -0
  128. package/src/installs/sublime-text.js +780 -25
  129. package/src/installs/sublime-text.md +914 -0
  130. package/src/installs/superwhisper.js +687 -25
  131. package/src/installs/superwhisper.md +630 -0
  132. package/src/installs/tailscale.js +727 -26
  133. package/src/installs/tailscale.md +1100 -0
  134. package/src/installs/tar.js +389 -0
  135. package/src/installs/tar.md +946 -0
  136. package/src/installs/termius.js +780 -26
  137. package/src/installs/termius.md +844 -0
  138. package/src/installs/terraform.js +761 -26
  139. package/src/installs/terraform.md +899 -0
  140. package/src/installs/tidal.js +752 -25
  141. package/src/installs/tidal.md +864 -0
  142. package/src/installs/tmux.js +328 -26
  143. package/src/installs/tmux.md +1030 -0
  144. package/src/installs/tree.js +393 -26
  145. package/src/installs/tree.md +833 -0
  146. package/src/installs/unzip.js +460 -0
  147. package/src/installs/unzip.md +879 -0
  148. package/src/installs/vim.js +403 -26
  149. package/src/installs/vim.md +1040 -0
  150. package/src/installs/vlc.js +803 -26
  151. package/src/installs/vlc.md +927 -0
  152. package/src/installs/vscode.js +825 -26
  153. package/src/installs/vscode.md +1002 -0
  154. package/src/installs/wget.js +415 -0
  155. package/src/installs/wget.md +791 -0
  156. package/src/installs/whatsapp.js +710 -25
  157. package/src/installs/whatsapp.md +854 -0
  158. package/src/installs/winpty.js +352 -0
  159. package/src/installs/winpty.md +620 -0
  160. package/src/installs/woff2.js +535 -26
  161. package/src/installs/woff2.md +977 -0
  162. package/src/installs/wsl.js +572 -0
  163. package/src/installs/wsl.md +699 -0
  164. package/src/installs/xcode-clt.js +520 -0
  165. package/src/installs/xcode-clt.md +351 -0
  166. package/src/installs/xcode.js +542 -26
  167. package/src/installs/xcode.md +573 -0
  168. package/src/installs/yarn.js +806 -26
  169. package/src/installs/yarn.md +1074 -0
  170. package/src/installs/yq.js +636 -26
  171. package/src/installs/yq.md +944 -0
  172. package/src/installs/yt-dlp.js +683 -26
  173. package/src/installs/yt-dlp.md +946 -0
  174. package/src/installs/yum-utils.js +297 -0
  175. package/src/installs/yum-utils.md +648 -0
  176. package/src/installs/zoom.js +740 -25
  177. package/src/installs/zoom.md +884 -0
  178. package/src/scripts/README.md +567 -45
  179. package/src/scripts/STATUS.md +208 -0
  180. package/src/scripts/afk.js +395 -7
  181. package/src/scripts/backup-all.js +731 -9
  182. package/src/scripts/backup-source.js +711 -8
  183. package/src/scripts/brewd.js +373 -7
  184. package/src/scripts/brewi.js +505 -9
  185. package/src/scripts/brewr.js +512 -9
  186. package/src/scripts/brews.js +462 -9
  187. package/src/scripts/brewu.js +488 -7
  188. package/src/scripts/c.js +185 -7
  189. package/src/scripts/ccurl.js +325 -8
  190. package/src/scripts/certbot-crontab-init.js +488 -8
  191. package/src/scripts/certbot-init.js +641 -9
  192. package/src/scripts/ch.js +339 -7
  193. package/src/scripts/claude-danger.js +253 -8
  194. package/src/scripts/clean-dev.js +419 -8
  195. package/src/scripts/clear-dns-cache.js +525 -7
  196. package/src/scripts/clone.js +417 -7
  197. package/src/scripts/code-all.js +420 -7
  198. package/src/scripts/count-files.js +195 -8
  199. package/src/scripts/count-folders.js +195 -8
  200. package/src/scripts/count.js +248 -8
  201. package/src/scripts/d.js +203 -7
  202. package/src/scripts/datauri.js +373 -8
  203. package/src/scripts/delete-files.js +363 -7
  204. package/src/scripts/docker-clean.js +410 -8
  205. package/src/scripts/dp.js +426 -7
  206. package/src/scripts/e.js +375 -9
  207. package/src/scripts/empty-trash.js +497 -7
  208. package/src/scripts/evm.js +428 -9
  209. package/src/scripts/fetch-github-repos.js +441 -10
  210. package/src/scripts/get-channel.js +329 -8
  211. package/src/scripts/get-course.js +384 -11
  212. package/src/scripts/get-dependencies.js +290 -9
  213. package/src/scripts/get-folder.js +783 -10
  214. package/src/scripts/get-tunes.js +411 -10
  215. package/src/scripts/get-video.js +352 -9
  216. package/src/scripts/git-backup.js +561 -9
  217. package/src/scripts/git-clone.js +477 -9
  218. package/src/scripts/git-pup.js +303 -7
  219. package/src/scripts/git-push.js +380 -8
  220. package/src/scripts/h.js +607 -9
  221. package/src/scripts/hide-desktop-icons.js +483 -7
  222. package/src/scripts/hide-hidden-files.js +522 -7
  223. package/src/scripts/install-dependencies-from.js +440 -9
  224. package/src/scripts/ips.js +647 -10
  225. package/src/scripts/iso.js +354 -8
  226. package/src/scripts/killni.js +561 -7
  227. package/src/scripts/ll.js +451 -8
  228. package/src/scripts/local-ip.js +310 -8
  229. package/src/scripts/m.js +508 -8
  230. package/src/scripts/map.js +293 -8
  231. package/src/scripts/mkd.js +287 -7
  232. package/src/scripts/ncu-update-all.js +441 -8
  233. package/src/scripts/nginx-init.js +702 -12
  234. package/src/scripts/npmi.js +366 -7
  235. package/src/scripts/o.js +495 -8
  236. package/src/scripts/org-by-date.js +321 -7
  237. package/src/scripts/p.js +208 -7
  238. package/src/scripts/packages.js +313 -8
  239. package/src/scripts/path.js +209 -7
  240. package/src/scripts/ports.js +582 -8
  241. package/src/scripts/q.js +290 -8
  242. package/src/scripts/refresh-files.js +378 -10
  243. package/src/scripts/remove-smaller-files.js +500 -8
  244. package/src/scripts/rename-files-with-date.js +517 -9
  245. package/src/scripts/resize-image.js +523 -9
  246. package/src/scripts/rm-safe.js +653 -8
  247. package/src/scripts/s.js +525 -9
  248. package/src/scripts/set-git-public.js +349 -7
  249. package/src/scripts/show-desktop-icons.js +459 -7
  250. package/src/scripts/show-hidden-files.js +456 -7
  251. package/src/scripts/tpa.js +265 -8
  252. package/src/scripts/tpo.js +264 -7
  253. package/src/scripts/u.js +489 -7
  254. package/src/scripts/vpush.js +422 -8
  255. package/src/scripts/y.js +267 -7
  256. package/src/utils/common/os.js +94 -2
  257. package/src/utils/ubuntu/apt.js +13 -7
@@ -0,0 +1,987 @@
1
+ # Installing file
2
+
3
+ ## Overview
4
+
5
+ The `file` command is a utility that determines file types by examining file contents rather than relying on file extensions. It uses a database of "magic numbers" (unique byte sequences at the start of files) to identify thousands of file formats. This approach is more reliable than extension-based identification because it examines what the file actually contains.
6
+
7
+ The `file` command is essential for:
8
+
9
+ - Identifying unknown or misnamed files
10
+ - Security analysis and malware detection workflows
11
+ - Script automation that needs to handle different file types
12
+ - Forensic analysis and data recovery
13
+ - Validating file uploads in web applications
14
+ - Debugging encoding issues with text files
15
+
16
+ The `file` command outputs descriptions like "ASCII text", "JPEG image data", "ELF 64-bit LSB executable", or "gzip compressed data" depending on what it detects in the file contents.
17
+
18
+ The open source implementation is maintained by Ian Darwin and Christos Zoulas, and is the standard `file` command on Linux, FreeBSD, and other Unix-like systems. macOS includes a BSD-derived version.
19
+
20
+ ## Dependencies
21
+
22
+ ### macOS (Homebrew)
23
+
24
+ - **Required:** None (macOS includes a built-in `file` command)
25
+ - **Optional:**
26
+ - `Homebrew` - Only needed if you want a newer version than the system-provided one. Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` or `dev install homebrew`
27
+ - **Auto-installed:**
28
+ - `libmagic` (version 5.46) - Automatically installed by Homebrew as a dependency of `file-formula`
29
+
30
+ ### Ubuntu (APT/Snap)
31
+
32
+ - **Required:** None (the `file` package is typically pre-installed on Ubuntu)
33
+ - **Optional:** None
34
+ - **Auto-installed:**
35
+ - `libmagic1` - The shared library providing the magic database
36
+
37
+ ### Raspberry Pi OS (APT/Snap)
38
+
39
+ - **Required:** None (the `file` package is typically pre-installed on Raspberry Pi OS)
40
+ - **Optional:** None
41
+ - **Auto-installed:**
42
+ - `libmagic1` - The shared library providing the magic database
43
+
44
+ ### Amazon Linux (DNF/YUM)
45
+
46
+ - **Required:** None (the `file` package is typically pre-installed on Amazon Linux)
47
+ - **Optional:** None
48
+ - **Auto-installed:**
49
+ - `file-libs` - The shared library providing the magic database
50
+
51
+ ### Windows (Chocolatey/winget)
52
+
53
+ - **Required:**
54
+ - `Chocolatey` - Install via PowerShell (Administrator): `Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))` or `dev install chocolatey`
55
+ - **Optional:** None
56
+ - **Auto-installed:**
57
+ - Magic database files bundled with the Chocolatey package
58
+
59
+ ### Git Bash (Manual/Portable)
60
+
61
+ - **Required:**
62
+ - `curl` - Pre-installed with Git for Windows
63
+ - `unzip` - Pre-installed with recent Git for Windows versions
64
+ - **Optional:** None
65
+ - **Auto-installed:** None
66
+
67
+ ## Prerequisites
68
+
69
+ Before installing file on any platform, ensure:
70
+
71
+ 1. **Internet connectivity** - Required to download packages (except on systems where file is pre-installed)
72
+ 2. **Administrative privileges** - Required on most platforms for system-wide installation
73
+ 3. **Package manager installed** - Each platform requires its respective package manager (Homebrew, APT, DNF/YUM, Chocolatey, etc.)
74
+
75
+ ## Platform-Specific Installation
76
+
77
+ ### macOS (Homebrew)
78
+
79
+ #### Prerequisites
80
+
81
+ - macOS 10.15 (Catalina) or later (macOS 14 Sonoma or later recommended)
82
+ - Terminal access
83
+
84
+ **Note**: macOS includes a built-in `file` command as part of the BSD utilities. For most use cases, the system version is sufficient. The steps below are only needed if you require a newer version with updated magic database entries.
85
+
86
+ #### Installation Steps
87
+
88
+ **Step 1: Check if the system version meets your needs**
89
+
90
+ Run the following command to check the installed version:
91
+
92
+ ```bash
93
+ file --version
94
+ ```
95
+
96
+ If the output shows a version that meets your requirements (or you are unsure), skip the Homebrew installation and use the system-provided version.
97
+
98
+ **Step 2: Install via Homebrew (optional, for newer version)**
99
+
100
+ If you need a newer version, install Homebrew first (if not already installed):
101
+
102
+ ```bash
103
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
104
+ ```
105
+
106
+ Then install the `file-formula` package:
107
+
108
+ ```bash
109
+ brew install --quiet file-formula
110
+ ```
111
+
112
+ The `--quiet` flag suppresses non-essential output, making the command suitable for automation scripts and CI/CD pipelines.
113
+
114
+ **Important**: The Homebrew package is named `file-formula` (not `file`) because macOS already includes a system `file` command. The Homebrew version is installed as "keg-only", meaning it is not linked to `/usr/local/bin` by default to avoid conflicts.
115
+
116
+ **Step 3: Use the Homebrew version (if installed)**
117
+
118
+ To use the Homebrew version instead of the system version, reference it by full path:
119
+
120
+ ```bash
121
+ $(brew --prefix)/opt/file-formula/bin/file --version
122
+ ```
123
+
124
+ Or create an alias in your shell configuration:
125
+
126
+ ```bash
127
+ echo 'alias file="$(brew --prefix)/opt/file-formula/bin/file"' >> ~/.zshrc && source ~/.zshrc
128
+ ```
129
+
130
+ #### Verification
131
+
132
+ Confirm the file command is available:
133
+
134
+ ```bash
135
+ file --version
136
+ ```
137
+
138
+ Expected output (version numbers may vary):
139
+
140
+ ```
141
+ file-5.45
142
+ magic file from /usr/share/file/magic
143
+ ```
144
+
145
+ Test file type detection:
146
+
147
+ ```bash
148
+ file /bin/ls
149
+ ```
150
+
151
+ Expected output (exact text may vary by macOS version):
152
+
153
+ ```
154
+ /bin/ls: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
155
+ ```
156
+
157
+ #### Troubleshooting
158
+
159
+ **Problem**: `file: command not found`
160
+
161
+ **Solution**: This should not occur on macOS as `file` is a built-in command. If you see this error, check your PATH:
162
+
163
+ ```bash
164
+ echo $PATH
165
+ ```
166
+
167
+ Ensure `/usr/bin` is included. If not, add it:
168
+
169
+ ```bash
170
+ export PATH="/usr/bin:$PATH"
171
+ ```
172
+
173
+ **Problem**: Homebrew version not found after installation
174
+
175
+ **Solution**: The Homebrew version is keg-only. Use the full path or create an alias as shown above.
176
+
177
+ **Problem**: Magic database is outdated
178
+
179
+ **Solution**: Install the Homebrew version for an updated magic database, or update your system via macOS Software Update.
180
+
181
+ ---
182
+
183
+ ### Ubuntu/Debian (APT)
184
+
185
+ #### Prerequisites
186
+
187
+ - Ubuntu 18.04 LTS or later, or Debian 10 (Buster) or later
188
+ - sudo privileges
189
+ - Internet connectivity
190
+
191
+ **Note**: The `file` package is typically pre-installed on Ubuntu and Debian. The installation steps below are for systems where it has been removed or is missing.
192
+
193
+ #### Installation Steps
194
+
195
+ **Step 1: Check if file is already installed**
196
+
197
+ ```bash
198
+ command -v file
199
+ ```
200
+
201
+ If this returns `/usr/bin/file`, the command is already installed. Skip to the Verification section.
202
+
203
+ **Step 2: Install if missing**
204
+
205
+ Run the following command to update package lists and install file:
206
+
207
+ ```bash
208
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y file
209
+ ```
210
+
211
+ The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
212
+
213
+ #### Verification
214
+
215
+ Confirm the installation succeeded:
216
+
217
+ ```bash
218
+ file --version
219
+ ```
220
+
221
+ Expected output (version numbers may vary depending on your distribution version):
222
+
223
+ ```
224
+ file-5.41
225
+ magic file from /etc/magic:/usr/share/misc/magic
226
+ ```
227
+
228
+ Test file type detection:
229
+
230
+ ```bash
231
+ file /bin/ls
232
+ ```
233
+
234
+ Expected output:
235
+
236
+ ```
237
+ /bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, ...
238
+ ```
239
+
240
+ Verify the installation path:
241
+
242
+ ```bash
243
+ which file
244
+ ```
245
+
246
+ Expected output: `/usr/bin/file`
247
+
248
+ #### Troubleshooting
249
+
250
+ **Problem**: `E: Unable to locate package file`
251
+
252
+ **Solution**: Update the package list first:
253
+
254
+ ```bash
255
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
256
+ ```
257
+
258
+ **Problem**: `Permission denied` errors
259
+
260
+ **Solution**: Ensure you are using `sudo` with the installation command.
261
+
262
+ **Problem**: File reports "cannot open (No such file or directory)"
263
+
264
+ **Solution**: The magic database may be missing. Install the complete package:
265
+
266
+ ```bash
267
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --reinstall file libmagic1 libmagic-mgc
268
+ ```
269
+
270
+ ---
271
+
272
+ ### Raspberry Pi OS (APT)
273
+
274
+ #### Prerequisites
275
+
276
+ - Raspberry Pi OS (32-bit or 64-bit)
277
+ - Raspberry Pi 2 or later (Raspberry Pi 3B+ or later recommended for 64-bit)
278
+ - sudo privileges
279
+ - Internet connectivity
280
+
281
+ Raspberry Pi OS is based on Debian, so file installation follows the same APT-based process. The package is available for both ARM architectures (armhf for 32-bit and arm64 for 64-bit).
282
+
283
+ **Note**: The `file` package is typically pre-installed on Raspberry Pi OS. The installation steps below are for systems where it has been removed or is missing.
284
+
285
+ #### Installation Steps
286
+
287
+ **Step 1: Check if file is already installed**
288
+
289
+ ```bash
290
+ command -v file
291
+ ```
292
+
293
+ If this returns `/usr/bin/file`, the command is already installed. Skip to the Verification section.
294
+
295
+ **Step 2: Install if missing**
296
+
297
+ Run the following command to update package lists and install file:
298
+
299
+ ```bash
300
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y file
301
+ ```
302
+
303
+ The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
304
+
305
+ #### Verification
306
+
307
+ Confirm the installation succeeded:
308
+
309
+ ```bash
310
+ file --version
311
+ ```
312
+
313
+ Expected output (version numbers may vary):
314
+
315
+ ```
316
+ file-5.41
317
+ magic file from /etc/magic:/usr/share/misc/magic
318
+ ```
319
+
320
+ Verify your architecture:
321
+
322
+ ```bash
323
+ uname -m
324
+ ```
325
+
326
+ Expected output: `aarch64` (64-bit) or `armv7l` (32-bit).
327
+
328
+ Test file type detection:
329
+
330
+ ```bash
331
+ file /bin/ls
332
+ ```
333
+
334
+ Expected output for 64-bit:
335
+
336
+ ```
337
+ /bin/ls: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, ...
338
+ ```
339
+
340
+ Expected output for 32-bit:
341
+
342
+ ```
343
+ /bin/ls: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, ...
344
+ ```
345
+
346
+ Verify the installation path:
347
+
348
+ ```bash
349
+ which file
350
+ ```
351
+
352
+ Expected output: `/usr/bin/file`
353
+
354
+ #### Troubleshooting
355
+
356
+ **Problem**: `E: Unable to locate package file`
357
+
358
+ **Solution**: Update the package list first:
359
+
360
+ ```bash
361
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
362
+ ```
363
+
364
+ **Problem**: Very slow download speeds
365
+
366
+ **Solution**: Raspberry Pi may have limited bandwidth. Use a wired ethernet connection for faster downloads, or wait for the installation to complete.
367
+
368
+ **Problem**: Installation fails with disk space errors
369
+
370
+ **Solution**: Check available disk space and clean up if needed:
371
+
372
+ ```bash
373
+ df -h
374
+ sudo DEBIAN_FRONTEND=noninteractive apt-get autoremove -y
375
+ sudo DEBIAN_FRONTEND=noninteractive apt-get clean
376
+ ```
377
+
378
+ ---
379
+
380
+ ### Amazon Linux (DNF/YUM)
381
+
382
+ #### Prerequisites
383
+
384
+ - Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
385
+ - sudo privileges
386
+ - Internet connectivity
387
+
388
+ **Note**: The `file` package is typically pre-installed on Amazon Linux. The installation steps below are for systems where it has been removed or is missing.
389
+
390
+ #### Installation Steps
391
+
392
+ **Step 1: Check if file is already installed**
393
+
394
+ ```bash
395
+ command -v file
396
+ ```
397
+
398
+ If this returns `/usr/bin/file`, the command is already installed. Skip to the Verification section.
399
+
400
+ **Step 2: Install if missing**
401
+
402
+ **For Amazon Linux 2023:**
403
+
404
+ Run the following command to install file:
405
+
406
+ ```bash
407
+ sudo dnf install -y file
408
+ ```
409
+
410
+ **For Amazon Linux 2:**
411
+
412
+ Run the following command to install file:
413
+
414
+ ```bash
415
+ sudo yum install -y file
416
+ ```
417
+
418
+ The `-y` flag automatically confirms installation prompts, enabling non-interactive execution.
419
+
420
+ #### Verification
421
+
422
+ Confirm the installation succeeded:
423
+
424
+ ```bash
425
+ file --version
426
+ ```
427
+
428
+ Expected output (version numbers may vary):
429
+
430
+ ```
431
+ file-5.39
432
+ magic file from /etc/magic:/usr/share/misc/magic
433
+ ```
434
+
435
+ Check which file package is installed:
436
+
437
+ ```bash
438
+ rpm -q file
439
+ ```
440
+
441
+ Expected output: `file-5.39-x.amzn2023.x86_64` or similar.
442
+
443
+ Test file type detection:
444
+
445
+ ```bash
446
+ file /bin/ls
447
+ ```
448
+
449
+ Expected output:
450
+
451
+ ```
452
+ /bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, ...
453
+ ```
454
+
455
+ #### Troubleshooting
456
+
457
+ **Problem**: `No match for argument: file`
458
+
459
+ **Solution**: Refresh the repository cache:
460
+
461
+ ```bash
462
+ sudo dnf makecache
463
+ ```
464
+
465
+ Or for Amazon Linux 2:
466
+
467
+ ```bash
468
+ sudo yum makecache
469
+ ```
470
+
471
+ **Problem**: `dnf: command not found` on Amazon Linux 2
472
+
473
+ **Solution**: Use `yum` instead of `dnf` on Amazon Linux 2:
474
+
475
+ ```bash
476
+ sudo yum install -y file
477
+ ```
478
+
479
+ **Problem**: File reports "cannot open magic file"
480
+
481
+ **Solution**: The magic database may be missing. Install the file-libs package:
482
+
483
+ ```bash
484
+ sudo dnf install -y file-libs
485
+ ```
486
+
487
+ Or for Amazon Linux 2:
488
+
489
+ ```bash
490
+ sudo yum install -y file-libs
491
+ ```
492
+
493
+ ---
494
+
495
+ ### Windows (Chocolatey)
496
+
497
+ #### Prerequisites
498
+
499
+ - Windows 10 (version 1803+) or Windows 11
500
+ - Chocolatey package manager installed
501
+ - Administrator PowerShell or Command Prompt
502
+
503
+ **Note**: Windows does not include a built-in `file` command equivalent to the Unix version. The Chocolatey package provides a Windows port of the Unix `file` command.
504
+
505
+ If Chocolatey is not installed, install it first by running this command in an Administrator PowerShell:
506
+
507
+ ```powershell
508
+ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
509
+ ```
510
+
511
+ #### Installation Steps
512
+
513
+ Run the following command in an Administrator PowerShell or Command Prompt:
514
+
515
+ ```powershell
516
+ choco install file -y
517
+ ```
518
+
519
+ The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
520
+
521
+ Chocolatey downloads the file utility (version 5.45) and adds it to the PATH automatically.
522
+
523
+ #### Verification
524
+
525
+ Open a **new** Command Prompt or PowerShell window (required for PATH to update), then run:
526
+
527
+ ```powershell
528
+ file --version
529
+ ```
530
+
531
+ Expected output (version numbers may vary):
532
+
533
+ ```
534
+ file-5.45
535
+ ```
536
+
537
+ Verify the installation path:
538
+
539
+ ```powershell
540
+ where file
541
+ ```
542
+
543
+ Expected output: `C:\ProgramData\chocolatey\bin\file.exe`
544
+
545
+ Test file type detection:
546
+
547
+ ```powershell
548
+ file C:\Windows\System32\notepad.exe
549
+ ```
550
+
551
+ Expected output:
552
+
553
+ ```
554
+ C:\Windows\System32\notepad.exe: PE32+ executable (GUI) x86-64, for MS Windows
555
+ ```
556
+
557
+ #### Troubleshooting
558
+
559
+ **Problem**: `file` command not found after installation
560
+
561
+ **Solution**: Close all terminal windows and open a new Command Prompt or PowerShell. The PATH update requires a fresh terminal session.
562
+
563
+ **Problem**: `choco` command not found
564
+
565
+ **Solution**: Chocolatey may not be in PATH. Close all terminal windows, open a new Administrator PowerShell, and try again. If the issue persists, reinstall Chocolatey.
566
+
567
+ **Problem**: Installation fails with access denied
568
+
569
+ **Solution**: Ensure you are running PowerShell or Command Prompt as Administrator. Right-click and select "Run as administrator".
570
+
571
+ **Problem**: "cannot open magic file" error
572
+
573
+ **Solution**: The magic database path may not be configured correctly. Set the MAGIC environment variable:
574
+
575
+ ```powershell
576
+ setx MAGIC "C:\ProgramData\chocolatey\lib\file\tools\file-5.45\share\misc\magic.mgc"
577
+ ```
578
+
579
+ Open a new terminal window after setting this variable.
580
+
581
+ ---
582
+
583
+ ### WSL (Ubuntu)
584
+
585
+ #### Prerequisites
586
+
587
+ - Windows 10 version 2004+ or Windows 11
588
+ - Windows Subsystem for Linux (WSL) with Ubuntu installed
589
+ - WSL 2 recommended for best performance
590
+ - sudo privileges within WSL
591
+
592
+ WSL Ubuntu installations follow the same process as native Ubuntu, using APT.
593
+
594
+ **Note**: The `file` package is typically pre-installed on WSL Ubuntu. The installation steps below are for systems where it has been removed or is missing.
595
+
596
+ #### Installation Steps
597
+
598
+ **Step 1: Check if file is already installed**
599
+
600
+ Open your WSL Ubuntu terminal and run:
601
+
602
+ ```bash
603
+ command -v file
604
+ ```
605
+
606
+ If this returns `/usr/bin/file`, the command is already installed. Skip to the Verification section.
607
+
608
+ **Step 2: Install if missing**
609
+
610
+ ```bash
611
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y file
612
+ ```
613
+
614
+ The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully automated installation without prompts.
615
+
616
+ #### Verification
617
+
618
+ Confirm the installation succeeded:
619
+
620
+ ```bash
621
+ file --version
622
+ ```
623
+
624
+ Expected output (version numbers may vary):
625
+
626
+ ```
627
+ file-5.41
628
+ magic file from /etc/magic:/usr/share/misc/magic
629
+ ```
630
+
631
+ Verify the installation path:
632
+
633
+ ```bash
634
+ which file
635
+ ```
636
+
637
+ Expected output: `/usr/bin/file`
638
+
639
+ Test file type detection on a Windows file from within WSL:
640
+
641
+ ```bash
642
+ file /mnt/c/Windows/System32/notepad.exe
643
+ ```
644
+
645
+ Expected output:
646
+
647
+ ```
648
+ /mnt/c/Windows/System32/notepad.exe: PE32+ executable (GUI) x86-64, for MS Windows
649
+ ```
650
+
651
+ #### Troubleshooting
652
+
653
+ **Problem**: `E: Unable to locate package file`
654
+
655
+ **Solution**: Update the package list first:
656
+
657
+ ```bash
658
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
659
+ ```
660
+
661
+ **Problem**: WSL itself is not installed
662
+
663
+ **Solution**: Install WSL from an Administrator PowerShell on Windows:
664
+
665
+ ```powershell
666
+ wsl --install
667
+ ```
668
+
669
+ Restart your computer after installation.
670
+
671
+ **Problem**: Network connectivity issues in WSL
672
+
673
+ **Solution**: WSL may have DNS resolution issues. Try restarting WSL:
674
+
675
+ ```powershell
676
+ # From Windows PowerShell
677
+ wsl --shutdown
678
+ wsl
679
+ ```
680
+
681
+ ---
682
+
683
+ ### Git Bash (Manual/Portable)
684
+
685
+ #### Prerequisites
686
+
687
+ - Windows 10 or Windows 11
688
+ - Git for Windows installed (includes Git Bash)
689
+ - Internet connectivity
690
+
691
+ Git Bash does not include the `file` command by default. You must download the Windows binary and place it in a directory included in Git Bash's PATH.
692
+
693
+ #### Installation Steps
694
+
695
+ Open Git Bash and run the following commands:
696
+
697
+ **Step 1: Create the local bin directory (if it does not exist)**
698
+
699
+ ```bash
700
+ mkdir -p /usr/local/bin
701
+ ```
702
+
703
+ **Step 2: Download the file binary and dependencies from ezwinports**
704
+
705
+ The ezwinports project provides an updated Windows port of the file command (version 5.41):
706
+
707
+ ```bash
708
+ curl -L -o /tmp/file.zip https://sourceforge.net/projects/ezwinports/files/file-5.41-w32-bin.zip/download && unzip -o /tmp/file.zip -d /tmp/file-extract && cp /tmp/file-extract/bin/file.exe /usr/local/bin/ && cp /tmp/file-extract/bin/*.dll /usr/local/bin/ && mkdir -p /usr/local/share/misc && cp /tmp/file-extract/share/misc/magic.mgc /usr/local/share/misc/ && rm -rf /tmp/file.zip /tmp/file-extract
709
+ ```
710
+
711
+ This command:
712
+ 1. Downloads the ezwinports file package (version 5.41)
713
+ 2. Extracts the archive to a temporary directory
714
+ 3. Copies the file.exe binary to `/usr/local/bin`
715
+ 4. Copies required DLL dependencies to `/usr/local/bin`
716
+ 5. Creates the magic database directory and copies the magic file
717
+ 6. Cleans up temporary files
718
+
719
+ **Step 3: Set the MAGIC environment variable**
720
+
721
+ Add the following to your `~/.bashrc` file to ensure file can locate the magic database:
722
+
723
+ ```bash
724
+ echo 'export MAGIC="/usr/local/share/misc/magic.mgc"' >> ~/.bashrc && source ~/.bashrc
725
+ ```
726
+
727
+ #### Verification
728
+
729
+ Confirm the installation succeeded:
730
+
731
+ ```bash
732
+ file --version
733
+ ```
734
+
735
+ Expected output:
736
+
737
+ ```
738
+ file-5.41
739
+ ```
740
+
741
+ Verify file is accessible:
742
+
743
+ ```bash
744
+ which file
745
+ ```
746
+
747
+ Expected output: `/usr/local/bin/file`
748
+
749
+ Test file type detection:
750
+
751
+ ```bash
752
+ file /c/Windows/System32/notepad.exe
753
+ ```
754
+
755
+ Expected output:
756
+
757
+ ```
758
+ /c/Windows/System32/notepad.exe: PE32+ executable (GUI) x86-64, for MS Windows
759
+ ```
760
+
761
+ #### Troubleshooting
762
+
763
+ **Problem**: `file: command not found`
764
+
765
+ **Solution**: The `/usr/local/bin` directory may not be in Git Bash's PATH. Add it manually:
766
+
767
+ ```bash
768
+ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
769
+ ```
770
+
771
+ **Problem**: "cannot open magic file" or "cannot load magic file"
772
+
773
+ **Solution**: Ensure the MAGIC environment variable is set correctly:
774
+
775
+ ```bash
776
+ echo 'export MAGIC="/usr/local/share/misc/magic.mgc"' >> ~/.bashrc && source ~/.bashrc
777
+ ```
778
+
779
+ Verify the magic file exists:
780
+
781
+ ```bash
782
+ ls -la /usr/local/share/misc/magic.mgc
783
+ ```
784
+
785
+ **Problem**: Permission denied when downloading
786
+
787
+ **Solution**: Run Git Bash as Administrator. Press Windows key, type "Git Bash", then press Ctrl+Shift+Enter.
788
+
789
+ **Problem**: SSL certificate errors during download
790
+
791
+ **Solution**: Update the CA certificates or use the `-k` flag (not recommended for production):
792
+
793
+ ```bash
794
+ curl -k -L -o /tmp/file.zip https://sourceforge.net/projects/ezwinports/files/file-5.41-w32-bin.zip/download
795
+ ```
796
+
797
+ **Problem**: DLL not found errors when running file
798
+
799
+ **Solution**: Ensure all required DLLs were copied. The file command may depend on libgcc and libstdc++ DLLs. Copy any missing DLLs from the extracted bin directory:
800
+
801
+ ```bash
802
+ cp /tmp/file-extract/bin/*.dll /usr/local/bin/
803
+ ```
804
+
805
+ If the DLLs are not in the package, download them from the MinGW project.
806
+
807
+ **Problem**: Want to install to Git's built-in bin directory
808
+
809
+ **Solution**: Alternatively, copy to Git's usr/bin directory (requires running Git Bash as Administrator):
810
+
811
+ ```bash
812
+ curl -L -o /tmp/file.zip https://sourceforge.net/projects/ezwinports/files/file-5.41-w32-bin.zip/download && unzip -o /tmp/file.zip -d /tmp/file-extract && cp /tmp/file-extract/bin/file.exe /usr/bin/ && cp /tmp/file-extract/bin/*.dll /usr/bin/ && mkdir -p /usr/share/misc && cp /tmp/file-extract/share/misc/magic.mgc /usr/share/misc/ && rm -rf /tmp/file.zip /tmp/file-extract
813
+ ```
814
+
815
+ ---
816
+
817
+ ## Post-Installation Configuration
818
+
819
+ The file command works out of the box for most use cases. The following optional configurations may be useful:
820
+
821
+ ### Shell Aliases
822
+
823
+ Create convenient aliases for common file operations. Add to your shell configuration file (`~/.bashrc`, `~/.zshrc`, or `~/.bash_profile`):
824
+
825
+ ```bash
826
+ # Show MIME type instead of human-readable description
827
+ alias mime='file --mime-type'
828
+
829
+ # Show MIME type and encoding
830
+ alias mimefull='file --mime'
831
+
832
+ # Brief mode (do not prepend filenames)
833
+ alias fileb='file -b'
834
+
835
+ # Check multiple files recursively
836
+ alias filer='find . -type f -exec file {} \;'
837
+ ```
838
+
839
+ ### Useful Command Options
840
+
841
+ Common options for the file command:
842
+
843
+ ```bash
844
+ # Show MIME type
845
+ file --mime-type document.pdf
846
+
847
+ # Show MIME type and encoding
848
+ file --mime document.pdf
849
+
850
+ # Brief output (no filename prefix)
851
+ file -b document.pdf
852
+
853
+ # Follow symbolic links
854
+ file -L symlink
855
+
856
+ # Look inside compressed files
857
+ file -z archive.gz
858
+
859
+ # Read file list from a file
860
+ file -f list_of_files.txt
861
+
862
+ # Check multiple files
863
+ file *.txt *.pdf *.jpg
864
+ ```
865
+
866
+ ### Custom Magic File
867
+
868
+ You can extend the magic database with custom patterns. Create a custom magic file:
869
+
870
+ ```bash
871
+ # Create a custom magic file
872
+ echo "0 string MYFORMAT My Custom File Format" > ~/.magic
873
+
874
+ # Compile it (optional, for performance)
875
+ file -C -m ~/.magic
876
+
877
+ # Use both system and custom magic
878
+ file -m /usr/share/misc/magic:~/.magic somefile
879
+ ```
880
+
881
+ ---
882
+
883
+ ## Common Issues
884
+
885
+ ### Issue: "cannot open magic file" Error
886
+
887
+ **Symptoms**: file reports it cannot find or open the magic database.
888
+
889
+ **Solution**: The magic database path may be incorrect. Check where the magic file is located:
890
+
891
+ ```bash
892
+ # Linux/macOS
893
+ ls -la /usr/share/misc/magic* /usr/share/file/magic*
894
+
895
+ # Windows (Chocolatey)
896
+ dir C:\ProgramData\chocolatey\lib\file\tools\file-*\share\misc\
897
+ ```
898
+
899
+ Set the MAGIC environment variable to the correct path:
900
+
901
+ ```bash
902
+ export MAGIC="/path/to/magic.mgc"
903
+ ```
904
+
905
+ ### Issue: File Type Not Recognized
906
+
907
+ **Symptoms**: file reports "data" or an incorrect type for a known file format.
908
+
909
+ **Solution**: The magic database may be outdated or missing patterns for that file type. Options:
910
+
911
+ 1. Update the file package to get a newer magic database
912
+ 2. Add a custom magic entry for the file type
913
+ 3. Use the `-k` flag to keep going and show all matches:
914
+
915
+ ```bash
916
+ file -k unknownfile
917
+ ```
918
+
919
+ ### Issue: Encoding Detection Incorrect
920
+
921
+ **Symptoms**: file reports incorrect character encoding for text files.
922
+
923
+ **Solution**: Use the `--mime-encoding` option for more detailed encoding analysis:
924
+
925
+ ```bash
926
+ file --mime-encoding textfile.txt
927
+ ```
928
+
929
+ For UTF-8 files with BOM, file should correctly identify them. For files without BOM, detection may be heuristic.
930
+
931
+ ### Issue: Binary Files Reported as Text
932
+
933
+ **Symptoms**: file incorrectly identifies binary files as text.
934
+
935
+ **Solution**: Some binary formats may have text-like headers. Use the `-i` (MIME type) option for more precise identification:
936
+
937
+ ```bash
938
+ file -i binaryfile
939
+ ```
940
+
941
+ ### Issue: Slow Performance on Many Files
942
+
943
+ **Symptoms**: file takes a long time when processing many files.
944
+
945
+ **Solution**: Use the compiled magic database (`.mgc` file) for faster loading:
946
+
947
+ ```bash
948
+ # Check if using compiled database
949
+ file --version
950
+ # Should show path ending in .mgc
951
+ ```
952
+
953
+ If using individual magic files, compile them:
954
+
955
+ ```bash
956
+ file -C -m /usr/share/misc/magic
957
+ ```
958
+
959
+ ### Issue: Windows Paths Not Recognized
960
+
961
+ **Symptoms**: On Windows, file cannot open files with backslash paths.
962
+
963
+ **Solution**: Use forward slashes or escape backslashes:
964
+
965
+ ```powershell
966
+ # Use forward slashes
967
+ file C:/Windows/System32/notepad.exe
968
+
969
+ # Or escape backslashes
970
+ file "C:\\Windows\\System32\\notepad.exe"
971
+ ```
972
+
973
+ ---
974
+
975
+ ## References
976
+
977
+ - [Fine Free File Command Official Website](https://www.darwinsys.com/file/)
978
+ - [file GitHub Repository (Mirror)](https://github.com/file/file)
979
+ - [file Manual Page (Linux)](https://linux.die.net/man/1/file)
980
+ - [magic(5) Manual Page - Magic File Format](https://linux.die.net/man/5/magic)
981
+ - [libmagic(3) Manual Page](https://man7.org/linux/man-pages/man3/libmagic.3.html)
982
+ - [file-formula Homebrew Formula](https://formulae.brew.sh/formula/file-formula)
983
+ - [file Chocolatey Package](https://community.chocolatey.org/packages/file)
984
+ - [ezwinports file Package](https://sourceforge.net/projects/ezwinports/files/)
985
+ - [GnuWin32 file Package](https://gnuwin32.sourceforge.net/packages/file.htm)
986
+ - [Ubuntu file Package](https://packages.ubuntu.com/search?keywords=file)
987
+ - [Wikipedia - file (command)](https://en.wikipedia.org/wiki/File_(command))