UNIX文件系统命令简要指南
我写此手册的目的是使它易于学习,记住和参考主要的UNIX文件系统实用程序。实际上,macOS和GNU / Linux都是UNIX系统。 macOS是基于BSD UNIX的认证UNIX,而GNU / Linux是类UNIX或UNIX派生产品。
在介绍了文件系统及其工作原理之后,我将介绍以下命令的详细信息:
使用文件夹和文件
mkdir
cd
pwd
rmdir
ls
touch
mv
cp
ln
权限
chmod
chown
chgrp
文件内容
cat
less
find
cpio
dd
wc
文件系统如何工作
每个现代计算机系统都依赖于文件系统来存储和检索程序。并非所有内容都可以保留在内存中,这是一种宝贵且有限的资源,因此我们需要一个安全的地方来在计算机重新启动或关闭时存储数据。只要磁盘结构是永久性的,只要计算机重新启动,内存就会被完全擦除。
在本指南中,我将特别研究UNIX文件系统,该文件系统可在macOS和GNU / Linux计算机上找到。 Windows文件系统有所不同,尽管Windows 10带有适用于Linux的Windows子系统已安装允许您使用我在此描述的相同实用程序。
文件系统从/
。这是承载第一级目录的根节点。
在UNIX系统中可以找到的常用目录是
/bin
包含主要系统命令/etc
包含系统配置/dev
包含系统设备/usr
包含用户文件/tmp
包含临时文件
…还有更多,但您明白了。
多少取决于所使用的系统类型。 Linux使用Linux Standard Base努力对文件夹进行了标准化,并且您通常具有:
/bin
主要系统命令/boot
用于引导计算机的文件(在macOS上不存在)/dev
系统设备/etc
系统配置文件/etc/opt
用户程序配置文件/home
用户的主目录(/ macOS中的/ Users)/lib
系统库(在macOS上不存在)/mnt
挂载的文件系统/opt
用户程序/proc
用户按内核和进程(在macOS上不存在)/root
根用户的主文件夹(在macOS上不存在)/run
(在macOS上不存在)/sbin
系统二进制文件用户,用于引导系统/tmp
临时文件/usr
拥有用户软件,库和工具/usr/bin
用户二进制/usr/include
用户头文件/usr/lib
用户库/usr/local
用户软件用于存储安装,例如macOS上的Homebrew/usr/sbin
系统二进制文件/usr/share
包含与体系结构无关的数据。它可以容纳许多其他内容,包括文档和手册页/usr/src
包含已安装软件包的源代码(macOS中不存在)/var
包含临时文件,日志等
macOS具有各种不同的文件夹,包括
/Applications
存储用户应用程序/Library
保留系统用户全局使用的库(设置和资源)/System
存放系统文件/private
存放系统文件,日志等
每个文件夹包含文件和目录,而文件和目录又可以包含其他文件和目录,依此类推。
所有文件和文件夹都有一个名称。
什么叫有效名称?长度可以是1到255个字符,并且必须由任何字母数字字符组成(a-z
/A-Z
/0-9
),下划线字符(_
),点(.
)和逗号(,
) 人物。
您也可以使用空间,尽管通常不建议这样做,因为每次必须引用文件/文件夹时,都需要使用反斜杠来转义空间。
根据系统的不同,文件系统可能区分大小写。在macOS上,文件系统为不是默认情况下区分大小写,因此您不能拥有名为test
另一个叫做Test
。他们是一样的东西。
我现在将介绍各种实用程序命令。这些是在shell上下文中执行的,例如Bash,Fish或Zsh。启动外壳程序时,您将位于主目录中。在macOS中,可以在/Users/<yourname>/
小路。
如果更改了所使用的Shell,则这些命令不会更改,因为它们是UNIX的基本基础命令。除非计算世界发生某些革命(并且确实发生了,但是那些服务器端的事物通常运行缓慢),否则您可能会使用这些命令数十年。为了给您一些视角,mkdir
您现在将看到的命令是80年代初期在UNIX AT&T版本1中引入的。
使用文件夹和文件
mkdir
您使用创建文件夹mkdir
命令:
mkdir fruits
您可以使用一个命令创建多个文件夹:
mkdir dogs cars
您还可以通过添加以下内容来创建多个嵌套文件夹-p
选项:
mkdir -p fruits/apples
UNIX命令中的选项通常采用这种形式。您在命令名称后立即添加它们,它们会更改命令的行为。您通常也可以组合多个选项。
您可以通过键入以下内容找到命令支持的选项man <commandname>
。现在尝试man mkdir
例如(按q
退出手册页的关键)。手册页是UNIX的出色内置帮助。
cd
创建文件夹后,您可以使用cd
命令。cd
方法C焊割d挑衅。您调用它指定要移动到的文件夹。您可以指定文件夹名称或整个路径。
例子:
mkdir fruits
cd fruits
现在您进入了fruits
文件夹。
您可以使用..
指示父文件夹的特殊路径:
cd .. #back to the home folder
#字符表示注释的开始,在找到之后将持续整行。
您可以使用它来形成路径:
mkdir fruits
mkdir cars
cd fruits
cd ../cars
还有另一个特殊的路径指示器是.
,并指示当前的文件夹。
您还可以使用从根文件夹开始的绝对路径/
:
cd /etc
pwd
每当您在文件系统中感到迷茫时,请致电pwd
知道你在哪里的命令:
pwd
它将打印当前文件夹路径。
rmdir
就像您可以使用创建文件夹一样mkdir
,您可以使用删除文件夹rmdir
:
mkdir fruits
rmdir fruits
您也可以一次删除多个文件夹:
mkdir fruits cars
rmdir fruits cars
您删除的文件夹必须为空。
要删除其中包含文件的文件夹,我们将使用更通用的rm
使用以下命令删除文件和文件夹的命令-rf
选项:
rm -rf fruits cars
请小心,因为此命令不会要求您确认,它会立即删除您要删除的所有内容。
没有箱子从命令行删除文件时,恢复丢失的文件可能很困难。
ls
在文件夹内,您可以使用列出文件夹中包含的所有文件。ls
命令:
ls
如果添加文件夹名称或路径,它将打印该文件夹内容:
ls /bin
ls
接受很多选择。我最喜欢的选项组合之一是-al
。试试吧:
ls -al /bin
与平原相比ls
,这将返回更多信息。
您具有从左到右的位置:
- 文件权限(如果您的系统支持ACL,则也会获得ACL标志)
- 指向该文件的链接数
- 文件的所有者
- 文件组
- 文件大小(以字节为单位)
- 文件修改的日期时间
- 文件名
这组数据是由l
选项。这a
相反,该选项还显示隐藏的文件。
隐藏文件是指以点(.
)。
touch
您可以使用touch
命令:
touch apple
如果文件已经存在,它将以写入模式打开文件,并且文件的时间戳将更新。
mv
拥有文件后,您可以使用mv
命令。您指定文件的当前路径及其新路径:
touch test
mv pear new_pear
这pear
文件现在移到new_pear
。这就是你改名文件和文件夹。
如果最后一个参数是文件夹,则位于第一个参数路径的文件将被移到该文件夹中。在这种情况下,您可以指定文件列表,它们都将在最后一个参数标识的文件夹路径中移动:
touch pear
touch apple
mkdir fruits
mv pear apple fruits #pear and apple moved to the fruits folder
cp
您可以使用cp
命令:
touch test
cp apple another_apple
要复制文件夹,您需要添加-r
递归复制整个文件夹内容的选项:
mkdir fruits
cp -r fruits cars
ln
现在让我们介绍链接的概念。链接是指向另一个文件的文件。我们在所有主要操作系统中都有这些。
我们可以创建两种类型的链接:硬链接和符号(软)链接。我们无法创建指向目录的硬链接,但可以创建一个符号链接。因此,符号链接(也称为符号链接)更为常见。
我们使用以下语法创建符号链接:ln -s original linkname
。例子:
mkdir fruits
ln -s fruits newfruits
请注意我是如何使用
ll
命令。这不是标准命令,而是别名为了ls -al
。在外壳程序中,您可以定义别名,这些别名是常见命令和参数组合的快捷方式。
权限
在介绍权限时,我曾简要提到过权限ls -al
命令。
您在每个文件行上看到的怪异字符串,例如drwxr-xr-x
,定义文件或文件夹的权限。
让我们对其进行剖析。
第一个字母表示文件的类型:
-
表示它是普通文件d
表示它是一个目录l
表示这是一个链接
然后,您有3组值:
- 第一组代表所有者文件的
- 第二组代表成员的权限团体该文件与
- 第三组代表其他所有人
这些集合由3个值组成。rwx
表示具体角色具有读取,写入和执行访问权限。删除的所有内容都将与-
,可让您形成值和相对权限的各种组合:rw-
,r--
,r-x
, 等等。
您可以使用chmod
命令。
chmod
可以以2种方式使用。第一个使用符号参数,第二个使用数字参数。让我们先从符号开始,这更加直观。
您输入chmod
后面跟一个空格和一个字母:
a
代表全部u
代表用户g
代表团体o
代表其他
然后您输入+
或者-
添加或删除权限。然后,您输入一个或多个权限符号(r
,w
,x
)。
全部后跟文件或文件夹名称。
这里有些例子:
chmod a+r filename #everyone can now read
chmod a+rw filename #everyone can now read and write
chmod o-rwx filename #others (not the owner, not in the same group of the file) cannot read, write or execute the file
您可以将相同的权限应用于多个角色,方法是在该角色之前添加多个字母+
/-
:
chmod og-r filename #other and group can't read any more
如果您正在编辑文件夹,则可以使用-r
(递归)标志。
数字参数速度更快,但是当您每天不使用它们时,我很难记住它们。您使用一个数字代表角色的权限。此数字值最多可以为7,它是通过以下方式计算的:
1
是否具有执行权限2
如果有写权限4
如果具有阅读权限
这给了我们4种组合:
0
没有权限1
可以执行2
可以写3
可以编写,执行4
可以阅读5
可以阅读,执行6
可以读,写7
可以读取,写入和执行
我们以3对为一组使用它们,以设置所有3个组的权限:
chmod 777 filename
chmod 755 filename
chmod 644 filename
所有者和组
您可以使用以下命令更改文件的所有者chown
命令:
chown <username> <filename>
您可以使用chgrp
命令:
chgrp <group> <filename>
管理文件内容
less
这less
命令是我经常使用的命令。它通过一个不错的交互式UI向您显示文件中存储的内容。
用法:less <filename>
。
一旦你进入less
会话中,您可以通过按退出q
。
您可以使用up
和down
键,或使用space bar
和b
逐页浏览。您也可以按以下按钮跳到文件末尾G
然后跳回到开始按g
。
您可以按来搜索文件内的内容/
并输入要搜索的单词。此搜索向前。您可以使用?
符号并输入一个单词。
此命令仅可视化文件的内容。您可以通过按直接打开编辑器v
。它将使用系统编辑器,在大多数情况下,vim
。
按下F
密钥输入跟随模式, 或者观看模式。当文件被其他人更改时(例如从另一个程序更改),您将看到更改居住。默认情况下不会发生这种情况,并且您仅在打开文件时看到文件版本。你需要按ctrl-C
退出此模式。在这种情况下,行为类似于运行tail -f <filename>
命令。
您可以打开多个文件,并使用:n
(转到下一个文件)并:p
(转到上一个)。
tail
我刚才提到tail
在上一个命令中,所以让我们利用这个机会来解释它的作用。
我认为,最好的用例是使用-f
选项。它将在最后打开文件,并监视文件更改。每当文件中有新内容时,它就会打印在窗口中。这非常适合查看日志文件,例如:
tail -f /var/log/system.log
要退出,请按ctrl-C
。
您可以打印文件中的最后10行:
tail -n 10 <filename>
您可以使用以下命令从特定行开始打印整个文件内容:+
行号之前:
tail -n +10 <filename>
tail
可以做更多的事情,一如既往,我的建议是检查man tail
。
cat
如同tail
以某种方式,我们有cat
。除了cat
还可以将内容添加到文件中,这使其功能超级强大。
在最简单的用法中,cat
将文件的内容打印到标准输出中:
cat file
您可以打印多个文件的内容:
cat file1 file2
并使用输出重定向运算符>
您可以将多个文件的内容串联到一个新文件中:
cat file1 file2 > file3
使用>>
您可以将多个文件的内容附加到一个新文件中,如果不存在则创建一个新文件:
cat file1 file2 >> file3
在查看源代码文件时,很高兴看到行号,并且您可以cat
使用-n
选项:
cat -n file1
您只能使用来将数字添加到非空白行-b
,或者您也可以使用删除所有多个空行-s
。
cat
通常与管道操作员结合使用|
将文件内容作为另一个命令的输入:cat file1 | anothercommand
。
wc
wc
方法字数。这是最常见的用法:
wc -l file1
数线wc -w file1
数词wc -c file1
数字符wc -m file1
计算具有多字节支持的字符(即表情符号计数为1,而不是多个字符)
你可以跑wc
提供多个文件,在这种情况下,它将分别对每个文件进行计算,然后打印摘要:
find
这find
命令可用于查找与特定搜索模式匹配的文件或文件夹。它递归搜索。
让我们通过示例来学习它。
查找当前树下所有具有以下内容的文件:.js
扩展名并打印每个匹配文件的相对路径:
find . -name '*.js'
在特殊字符(例如)周围使用引号很重要*
避免shell解释它们。
在当前树下找到与名称“ src”匹配的目录:
find . -type d -name src
使用-type f
仅搜索文件,或-type l
仅搜索符号链接。
-name
区分大小写。使用-iname
执行不区分大小写的搜索。
您可以在多个根树下搜索:
find folder1 folder2 -name filename.txt
在当前树下查找与名称“ node_modules”或“ public”匹配的目录:
find . -type d -name node_modules -or -name public
您还可以使用以下方法排除路径-not -path
:
find . -type d -name '*.md' -not -path 'node_modules/*'
您可以搜索其中包含超过100个字符(字节)的文件:
find . -type f -size +100c
搜索大于100KB但小于1MB的文件:
find . -type f -size +100k -size -1M
搜索文件已在3天前进行了修改
find . -type f -mtime +3
搜索最近24小时内编辑的文件
find . -type f -mtime -1
您可以通过添加以下内容来删除所有与搜索匹配的文件:-delete
选项。这将删除最近24小时内编辑的所有文件:
find . -type f -mtime -1 -delete
您可以对每个搜索结果执行命令。在此示例中,我们运行cat
打印文件内容:
find . -type f -exec cat {} \;
注意终止\;
。{}
在执行时用文件名填充。
免费下载我的Linux命令手册
更多cli教程:
- Bash外壳
- Bash Shell脚本介绍
- 鱼壳
- Shell,监视文件内容
- 如何退出Vim
- UNIX编辑器
- UNIX文件系统命令
- Unix Shell教程
- 如何在macOS或Linux Shell中设置别名
- 自制的实用指南
- 如何在MacOS中修复XCRUN无效的活动开发人员路径错误
- 入门指南
- Linux简介
- 如何查找正在使用端口的进程
- Linux命令:mkdir
- Linux命令:cd
- Linux命令:pwd
- Linux命令:rmdir
- Linux命令:ls
- Linux命令:mv
- Linux命令:cp
- Linux命令:更少
- Linux命令:tail
- Linux命令:touch
- Linux命令:cat
- Linux命令:查找
- Linux命令:ln
- Linux命令:ps
- Linux命令:echo
- Linux命令:顶部
- Linux命令:kill
- Linux命令:killall
- Linux命令:别名
- Linux命令:作业
- Linux命令:bg
- Linux命令:fg
- Linux命令:类型
- Linux命令:其中
- Linux命令:whoami
- Linux命令:who
- Linux命令:清除
- Linux命令:su
- Linux命令:sudo
- Linux命令:chown
- Linux命令:chmod
- Linux命令:passwd
- Linux命令:打开
- Linux命令:wc
- Linux命令:历史记录
- Linux命令:du
- Linux命令:umask
- Linux命令:grep
- Linux命令:man
- Linux命令:uname
- Linux命令:排序
- Linux命令:uniq
- Linux命令:diff
- Linux命令:nohup
- Linux命令:df
- Linux命令:xargs
- Linux命令:gzip
- Linux命令:gunzip
- Linux命令:ping
- Linux命令:traceroute
- Linux命令:tar
- Linux命令:导出
- Linux命令:crontab
- Linux命令:dirname
- Linux命令:基本名称
- Linux命令:printenv
- Linux命令:env
- ed编辑器简短指南
- vim简短指南
- emacs的简要指南
- 纳米的简要指南
- Linux,设备上没有剩余空间
- 如何使用Netcat