UNIX文件系统命令

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代表其他

然后您输入+或者-添加或删除权限。然后,您输入一个或多个权限符号(rwx)。

全部后跟文件或文件夹名称。

这里有些例子:

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

您可以使用updown键,或使用space barb逐页浏览。您也可以按以下按钮跳到文件末尾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教程: