管理 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
; - 向上一行:
方向键上
; - 向下一行:
方向键下
; - 向前翻页:
b
或Page 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
head
和 tail
相反,默认情况下用于显示文本文件的前 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