管理 Linux 文件和目录

内容纲要

查看【Linux】专题可浏览更多内容

接上一篇 探索 Linux 文件系统

查看文件

cat

cat (concatenate)命令用于连接文件并打印在标准输出上,这是最常用的查看文本文件的方式之一。

# cat <文件名>
# -n 选项用于显示行号
cat -n /etc/hosts
     1  127.0.0.1       localhost
     2  127.0.1.1       debian
     3
     4  # The following lines are desirable for IPv6 capable hosts
     5  ::1     localhost ip6-localhost ip6-loopback
     6  ff02::1 ip6-allnodes
     7  ff02::2 ip6-allrouters

当一起查看多个文件时,可以空格隔开文件名,如:cat <文件1> <文件2>

cat 命令不是交互式的,它会一下子将文件的所有内容都显示出来,所以如果文件内容过多就会有一部分看不到了,对于小型文本文件来说 cat 命令是适合的。

另外,cat 命令还可以将多个文本文件拼接到一起,如现在有两个文件 大纲.txt正文.txt,想要将它们的内容拼接起来:

cat 大纲.txt 正文.txt > 说明.txt

如此就会拼接并在当前目录生成一个名为 说明.txt 的文件。

> 表示将内容重定向到一个新文件而不是打印在标准输出上。

⚠️ 注意,如果这个新文件没有则创建,如果已存在则覆盖。

less 与 more

如果文本文件的内容过多超出了终端窗口,就可以使用 less

💡 less 扩展了 more 的功能也是其新版本,可能是 Linux 上最先进和最常用的阅读工具,所以只用 less 就好了。

sudo less /var/log/auth.log

💡 加上 sudo 是因为非特权用户权限不够

less 的一些快捷键:

  • 显示帮助:h
  • 向上一行:方向键上
  • 向下一行:方向键下
  • 向前翻页:bPage Up
  • 向后翻页:空格键Page Down
  • 跳至页首:g
  • 跳至页尾:G
  • 搜索关键词:/关键词
  • 重复上一次搜索:n
  • 退出:q

此处因为有大小写的运用所以区分大小写

tail

默认情况下 tail 将显示指定文本文件的最后 10 行内容,可以使用 -n 选项指定行号:

# -n 3 用于显示 /etc/hosts 文件的最后三行
tail -n 3 /etc/hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

可以使用 + 用于显示从第一行显示到末尾,如显示 /etc/hosts 文件的第五行直至最后一行:

tail -n +5 /etc/hosts

tail 还可以用来显示日志文件的最新内容,如配置 -f 选项显示日志文件的最新(也就是最后的) 10 行内容并实时刷新:

sudo tail -f /var/log/auth.log

💡 加上 sudo 是因为非特权用户权限不够

head

headtail 相反,默认情况下用于显示文本文件的前 10 行内容,同样可以使用 -n 选项指定行号:

# 显示 /etc/hosts 文件的头两行
head -n 2 /etc/hosts

新建文件和目录

touch

touch 用于修改文件的时间戳,但也可以用来创建一个空白文件:

touch README.txt

一般来说不建议在文件名中使用空格,如果想要隔开单词,可以使用连字符 - 或下划线 _

如果一定要空格怎么办?用引号包裹,例如:touch 'READ ME.txt'

mkdir

mkdir 命令用于创建目录:

# 创建名为 2020 的目录
mkdir 2020

如果想一次创建多个目录,可以用空格隔开

mkdir Documents Downloads

如果想创建目录时同时创建子目录,可使用 -p 选项

mkdir -p /Documents/2020
Documents/
└── 2020

⚠️ 需要注意的是,一般情况下如果创建的目录名称已存在会收到一个错误提示,但如果使用 -p 选项则不会出现错误提示。

复制文件和目录

cp

cp 用于复制文件和目录

# cp <被复制的文件> <复制到目标位置>

# 复制 config.txt 成一个新文件到当前目录并命名为 config.txt.bak,相当于备份
cp config.txt config.txt.bak

⚠️ 注意,如果复制到的文件(如上示例的 config.txt.bak)已存在,将会覆盖,为了避免误操作导致数据丢失建议加上 -i 选项,这样当出现同名文件时会看到提示询问是否覆盖。

# 将 config.txt 与 readme.txt 复制 当前目录下的 config 目录
cp -i config.txt readme.txt ./config

使用 -r 选项用于递归,如复制 /etc 目录及其子目录的所有文件复制到当前目录:

# -r 选项用于递归
sudo cp -r /etc .

? 加上 sudo 是因为非特权用户权限不够

一般情况下复制到的新文件不会保留原文件的所有者(属主属组)、权限、时间戳,如果想要保留这些信息,可以加上 -p 选项:

cp -p /etc/hosts .

ls -l
drwxr-xr-x 69 root root 4096 Aug 28 00:05 etc

cp 命令的一些实用选项:

选项作用
-i--interactive遇到同名文件覆盖前提示
-r--recursive递归复制目录(即包括其子目录及内容),复制目录时需要改选项
-p--preserve保留原文件的属性
-u--update只处理目标目录中不存在或相比目标目录中现有文件更新的文件
-v--verbose显示操作信息

移动或重命名文件和目录

mv

mv 可用于移动或重命名文件

# mv <被移动文件> <移动到的目标位置>
# 多个文件用空格隔开

# 移动文件 nginx.conf 与 apache.conf 到当前目录下的 config 目录
mv nginx.conf apache.conf ./config
# mv <原文件名> <新文件名>

# 重命名文件 nginx.txt 为 ngixng.conf
mv nginx.txt nginx.conf

mv 命令的一些实用选项:

选项作用
-i--interactive遇到同名文件覆盖前提示
-u--update只处理目标目录中不存在或相比目标目录中现有文件更新的文件
-v--verbose显示操作信息

删除文件和目录

rm

rm 命令用于删除文件和目录

rm  config.txt

为了保险期间,建议在使用 -i 选项用于显示删除提示,如:

mkdir config
touch ./config/nginx.conf ./config/apache.conf

rm -i ./config/*.conf

如上,在删除当前目录下的 config 目录里,以 .conf 为后缀名的文件时,可以逐个确认

删除目录可以使用 -rf 选项:

rm -rf ./config

rm 命令的一些实用选项:

选项作用
-i--interactive删除文件前显示确认提示
-r--recursive递归删除
-f--force忽略不存在的文件和参数
-v--verbose显示操作信息

‼️ 重要:注意,数据无价!
在进行删除操作时一定要确认,举个例子:

rm -rf /home /test/config

如上,本来想要删除目录为 /home/test/config,结果在输入命令时在 /home 后面多了个空格,就变成了删除整个主目录...

为了避免这样的损失,在进行删除操作时多加谨慎,可以使用 Tab 键补全路径、使用 -i 选项进行确认提示等措施保全操作,规避风险。

rmdir

rmdir 用于删除目录:

rmdir Downloads

# 如果要删除的目录不是空的,可以使用 --ignore-fail-on-non-empty 选项:
rmdir --ignore-fail-on-non-empty Downloads

# rm 命令使用 -rf 选项也可达到相同作用:
rm -rf Downloads

查找文件和目录

find

find 用于在目录层次结构中搜索文件,是一个非常强大的命令,可按照名称、所有者、权限等条件搜索

# 查找主目录下的文件
find ~
# 按文件类型搜索可使用 `-type` 选项:
# f 普通文件
# d 目录
# l 符号链接
# b 块设备文件
# c 字符设备文件

# 例如查找主目录下的所有普通文件
find ~ -type f

# 按文件名搜索可使用 `-name` 选项:
# 可使用通配符,使用通配符时建议用英文引号包裹,如下示例
find ~ -type f -name "*.txt"

# 按文件体积搜索可使用 `-size` 选项,单位如下:
# - b:512B 块,不指定时的默认单位
# - c:B
# - w:字(2B)
# - k:KB
# - M:MB
# - G:GB
find ~ -type f -size 1M # 等于 1 MB 的普通文件
find ~ -type f -size +1M # 大于 1 MB 的普通文件
find ~ -type f -size -1M # 小于 1 MB 的普通文件
find ~ -type f -size +5M -size -10M # 搜索主目录下文件大小在 5~10 MB 之间的普通文件

# 按文件属主可使用 -user 选项:
find / -user root

# 按文件属组可使用 -group 选项:
find / -group sudo

# 文件夹层级深度可使用 `-maxdepth` 选项:
find / -type d -maxdepth 2

which

which 命令可用于查找可执行文件的具体路径

which find

# -a 选项用于列出所有结果
which -a find