运维通用技术_Day2_Linux
本文介绍了Linux系统中常用的文件与目录操作命令。主要内容包括:1) 文件查看命令(more/head/tail/nl)的语法、选项和典型用法;2) 目录创建命令mkdir的递归创建功能;3) 文件状态查看命令stat;4) 文件创建命令touch。重点讲解了管道符"|"的作用机制,以及tail命令的实时监控功能(-f选项)。这些基础命令是Linux运维工作中的必备技能,可用
运维通用技术之Linux基础入门 Day2
一、文件与目录的操作命令
1、文件查看命令
1.1、more命令
语法模板:more [option] [file]
more命令用于逐页查看文本文件的内容。当需要查看大型文件时,more命令能够按页显示文件里的内容,允许用户逐页浏览
操作:
| 操作 | 作用 |
|---|---|
| 空格键 | 向下翻动一页 |
| 向下翻动一页 | |
| q | 退出more指令 |
| /pattern | 在文件内容按规则进行检索内容 |
| :n | 跳转到第n行 |
| :f | 显示文件名和当前行号 |
1.2、head命令
语法模板:head [option] [file]
管道符:| ===> 管道符作用是将前一个命令的标准输出结果作为后一个命令的标准输入结果再次进行处理,流水线般的工作流程。
head命令用于显示文件的开头部分,在没有写option时默认是显示10行。head命令在查看文件的头部内容时非常重要,尤其适用于快速查看文件开头的文件内容。
选项:
| 选项 | 作用 |
|---|---|
| -q | 隐藏文件名 |
| -v | 显示文件名 |
| -c<字节> | 显示字节数 |
| -n<行数> | 显示的行数 |
举例:
# 查看home目录下的anaconda-ks.cfg文件的第一行内容并显示行号
# 这里用到了管道符,将 | 左边的输出结果作为了 head -1命令的输入结果进行处理得到如下结果 1 # Generated by Anaconda 36.16.5
[root@localhost ~]# cat -n anaconda-ks.cfg | head -1
1 # Generated by Anaconda 36.16.5
1.3、tail命令
语法模板:tail [option] [file]
tail命令用于显示文件的尾部部分,在没有写option时默认显示的是10行。tail命令在查看文件的尾部内容时非常重要,而且使用**-f选项**时可以实时监控文件变化,这对于监控系统日志或等待尾部的特定消息是非常方便的。
选项:
| 选项 | 作用 |
|---|---|
| -q | 不显示处理信息 |
| -v | 显示详细的处理信息 |
| -c<字节> | 显示的字节数 |
| -n<行数> | 显示的行数 |
| -f | 循环读取,实时监控文件的内容变化 |
举例:
# 对file1.txt文件进行循环读取,监控内容变化
[root@localhost ~]# tail -f file1.txt
21312
21312 ## 追踪到的追加内容
# 另开启一个终端进行对file1.txt文本内容进行追加
[root@localhost ~]# echo "21312" >> file1.txt

59.png?origin_url=C%3A%5CUsers%5C24498%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20260106144521655.png&pos_id=img-0rF8A25f-1767700448421)
1.3、nl命令
语法模板:nl [option] [file]
nl命令是Linux和类Unix系统中的一个用于将文件中的行号添加到内容的命令。它主要用于向文本文件中的每一行内容最前面加上行号,便于阅读和查找。
选项:
| 选项 | 作用 |
|---|---|
| -b | 指定要将行号添加到的行 |
| -b a | 添加行号到非空行 |
| -b t | 添加行号到所有行 |
| -b n | 不添加行号到任何行 |
| -n | 设置行号的对齐格式 可选参数rz:右对齐 ln:左对齐 lz:左对齐,并且编号格式为0xx开始 |
| -v | 设置行号的起始值 |
| -w | 设定行号字段的宽度 |
| -s | 设置行号与文本之间的分隔符 |
举例:
# 将行号添加到文件内容的所有行,并将行号及内容进行标准输出
[root@localhost ~]# nl file1.txt
1 21312
2 21312
# 将行号添加到文件中的非空行,并使用制表符作为分隔符
[root@localhost ~]# nl -b a -s $'\t' file1.txt
1 21312
2 21312
# 将行号添加到文件中的所有行,并从指定的行号开始
[root@localhost proc]# nl -b a -v 10 devices
10 Character devices:
11 1 mem
12 4 /dev/vc/0
13 4 tty
14 4 ttyS
15 5 /dev/tty
# 设定行号字段的宽度为3个字符,并将行号添加到所有行
[root@localhost proc]# nl -b a -w 3 devices
1 Character devices:
2 1 mem
3 4 /dev/vc/0
4 4 tty
5 4 ttyS
6 5 /dev/tty
7 5 /dev/console
8 5 /dev/ptmx
9 7 vcs
10 10 misc
2、创建目录命令
2.1、mkdir命令
语法模板:mkdir [option] <目录名> <>里为必填项
选项:
-p:递归创建目录,如果父目录不存在也会创建 ====> 例如我们不想在此路径下创建一个目录,想在其他地方创建就需要到这个指令了。从当前层级的目录递归下去创建。
-m:设置新目录权限
-v:显示详细信息,包括正在创建的目录和已使用的文件系统类型
举例:
# 当我在其他层级的目录创建其他层级的目录
[root@localhost home]# mkdir -p /home/test/nextd
[root@localhost /]# cd ./home
[root@localhost home]# ls
lost+found test zhao
[root@localhost home]# cd test
[root@localhost test]# ls
nextd
3、查看文件状态(属性)命令
语法模板:stat [option] file
stat命令用于查看文件的状态,例如大小,名称、IO块,类型,Inode,时间戳等信息
选项:
| 选项 | 作用 |
|---|---|
| -c 或 --format | 指定输出信息的格式。 |
| -f 或 --file-system | 显示文件系统级别的。 |
| -t 或 --terse | 以更紧凑的方式显示输出信息。 |
| –all 或 -a | 显示所有可用的信息。 |
| –dereference | 跟随符号链接。 |
举例:
[root@localhost ~]# stat file1.txt
文件:file1.txt
大小:12 块:8 IO 块大小:4096 普通文件
设备:253,0 Inode: 4325388 硬链接:1
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2026-01-06 14:44:26.138431370 +0800
修改时间:2026-01-06 14:44:26.137431393 +0800
变更时间:2026-01-06 14:44:26.137431393 +0800
创建时间:2026-01-05 17:53:18.501773610 +0800
4、创建文件命令
4.1、touch命令
语法模板:touch [option]... [filename]...
touch指令用于创建一个空的新文件或修改文件的时间戳信息 ===> touch file(触摸文件)
tips:我们在对一个文件的时间戳信息进行修改的时候,我们修改的是这个文件的修改时间,并且创建时间是不会改变的,创建好了,创建时间的信息不会改变,可见下方举例
| 选项 | 作用 |
|---|---|
| -a || --time=access | 如果文件不存在,创建一个新文件。同时更新访问时间和修改时间 |
| -m || --time=modify | 仅更新文件的修改时间 |
| -t || --time=date | 使用指定的日期和时间更新文件的访问和修改时间时间格式为:[[CC]YY]MMDDhhmm[.ss] ==> 200012121515 |
举例:
# 创建一个新的空文件a,并查看a文件的状态信息
[root@localhost ~]# touch a.txt -a
[root@localhost ~]# stat a.txt
文件:a.txt
大小:0 块:0 IO 块大小:4096 普通空文件
设备:253,0 Inode: 4325389 硬链接:1
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2026-01-06 15:55:10.054621043 +0800
修改时间:2026-01-06 15:55:02.441636833 +0800
变更时间:2026-01-06 15:55:02.441636833 +0800
创建时间:2026-01-06 15:55:02.441636833 +0800
# 对文件a进行内容的修改(覆盖,追加都可以),并查看时间戳的信息(更改和修改时间)
[root@localhost ~]# cat a.txt
测试侧测试
[root@localhost ~]# stat a.txt
文件:a.txt
大小:16 块:8 IO 块大小:4096 普通文件
设备:253,0 Inode: 4325389 硬链接:1
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2026-01-06 15:57:36.714316912 +0800
修改时间:2026-01-06 15:57:31.472327782 +0800
变更时间:2026-01-06 15:57:31.472327782 +0800
创建时间:2026-01-06 15:55:02.441636833 +0800
### 对文件a的时间戳信息进行修改(这里修改的是修改时间,创建时间是永远不会进行改变的)
[root@localhost ~]# touch -t 200012121515 a.txt
[root@localhost ~]# stat a.txt
文件:a.txt
大小:16 块:8 IO 块大小:4096 普通文件
设备:253,0 Inode: 4325389 硬链接:1
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2000-12-12 15:15:00.000000000 +0800
修改时间:2000-12-12 15:15:00.000000000 +0800
变更时间:2026-01-06 16:01:08.290851018 +0800
创建时间:2026-01-06 15:55:02.441636833 +0800
4.2、 echo命令
语法模板:echo [option] 文本内容
echo命令用于终端输出指定的文本内容
选项:
-n:在输出内容后不换行
-e:启用转义字符的解析。
5、文件或目录的复制命令
模板语法:cp [options] source destination
cp命令用于复制文件和复制目录的命令
选项:
| 选项 | 作用 |
|---|---|
| -i(交互式) | 如果目标位置存在一个文件并且该文件会被覆盖时,cp命令会询问用户是否继续执行操作 |
| -n(不覆盖) | 如果目标位置存在文件时,不会覆盖文件,即不会进行复制操作 |
| -r / R(递归) | 用于复制目录以及目录内所有子目录文件 |
| -p(保留属性) | 复制文件的同时保留文件的属性(权限,时间戳等) |
| -v(详细模式) | 显示详细的复制过程信息 |
举例:
## 对一个文件进行复制,提供交互式操作(我们对交互式操作做出了否定操作,观察下面cpf1文件的内容是否相同)
[root@localhost ~]# cat cpf1
wqeqe
[root@localhost ~]# cp -i cpf1 ./test1/cpf1
cp: 是否覆盖 './test1/cpf1'?NO
[root@localhost ~]# cat ./test1/cpf1
21312
# 对一个文件进行复制操作,我们对文件内容进行复制覆盖操作,但我们使用-p选项 观察权限以及时间戳是否得到了保存
[root@localhost ~]# cp -ip cpf1 ./test1/cpf1
cp: 是否覆盖 './test1/cpf1'?yes
[root@localhost ~]# stat ./cpf1
文件:./cpf1
大小:6 块:8 IO 块大小:4096 普通文件
设备:253,0 Inode: 4325390 硬链接:1
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2026-01-06 16:20:25.840184210 +0800
修改时间:2026-01-06 16:20:15.781208611 +0800
变更时间:2026-01-06 16:20:15.781208611 +0800
创建时间:2026-01-06 16:20:15.781208611 +0800
------------------------------------------------------------
[root@localhost ~]# stat ./test1/cpf1
文件:./test1/cpf1
大小:6 块:8 IO 块大小:4096 普通文件
设备:253,0 Inode: 4325394 硬链接:1
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2026-01-06 16:20:25.840184210 +0800
修改时间:2026-01-06 16:20:15.781208611 +0800
变更时间:2026-01-06 16:29:45.757826130 +0800
创建时间:2026-01-06 16:24:41.911563108 +0800
6、文件或目录移动命令
语法模板:mv [options] source destination
mv命令是用来移动文件或目录,或者重命名文件和目录的命令。选项和复制cp命令相似,都具有-i -n -v
-i:如果移动的当前文件/文件夹到目标位置已存在且会被覆盖式,mv命令会询问用户是否继续操作
-n:如果移动的当前文件/文件夹到目标位置,但不会进行覆盖,即mv命令不会执行移动或重命名操作
-v:显示详细的移动或重命名过程信息。
7、文件或目录删除命令
语法模板:rm [options] file....
rm命令用于删除文件/目录的命令。
选项:
| 选项 | 作用 |
|---|---|
| -i 或 --interactive | 在删除之前,显示每个文件是否确认删除。 |
| -f 或 --force | 强制删除,即使文件正在被使用,或者存在打开的文件描述符。 |
| -r 或 --recursive | 递归地删除目录及其内容。 |
| -v 或 --verbose | 详细模式,显示删除的每个文件。 |
举例:
# 交互式删除
[root@localhost ~]# ls
anaconda-ks.cfg a.txt cpf1 cpf2 cpf3 file1.txt test1
[root@localhost ~]# rm -i cpf1
rm: 是否删除普通文件 'cpf1'?yes
[root@localhost ~]# ls
anaconda-ks.cfg a.txt cpf2 cpf3 file1.txt test1
# 强制删除
[root@localhost ~]# ls
anaconda-ks.cfg a.txt cpf2 cpf3 file1.txt test1
[root@localhost ~]# rm -f a.txt
[root@localhost ~]# ls
anaconda-ks.cfg cpf2 cpf3 file1.txt test1
#递归(-r)删除
[root@localhost ~]# rm -r test1
rm: 是否进入目录 'test1'?yes
rm: 是否删除普通文件 'test1/cpf1'?yes
rm: 是否删除目录 'test1/test2'?yes
rm: 是否删除目录 'test1'?yse
# 详细模式
[root@localhost ~]# rm -v cpf2 cpf3
rm: 是否删除普通文件 'cpf2'?yes
已删除 'cpf2'
rm: 是否删除普通文件 'cpf3'?yes
已删除 'cpf3'
[root@localhost ~]# ls
anaconda-ks.cfg file1.txt test1
8、别名命令
语法模板:alias [options] name=command(这里的command英文表示命令 名字可以是任意映射字符)
用于创建或显示当前目录下的别名。别名是一种用户定义的命令或函数,可以用来简化复杂的命令序列。使用unalias name可以删除一个别名。
选项:
| 选项 | 作用 |
|---|---|
| -p | 显示当前目录下的所有已定义的别名列表。 |
9、dd命令
语法模板:dd [options] [printOptions] [scanfOptions]
dd命令用于复制文件和转化数据。它用于将源文件复制到目标文件,或者利用在目标文件上进行数据转换。
功能:
- 生成块文件
- 复制文件内容
- 测试I/O性能
| 选项 | 作用 |
|---|---|
| if = filename | 指定输入文件 |
| of = filename | 指定输出文件 |
| bs = size | 指定块大小 |
| count = num | 指定复制的块数 |
| conv = 参数 | 进行数据转换,例如tec进行techeus格式转换,auto允许尽可能多的抓换(这对于大量数据是安全的) |
| skip = num | 跳过一个num块 |
| status = process | 显示进度信息 |
举例:
# 从file1中复制1块数据到file2中
[root@localhost ~]# dd count=1 if=file1.txt of=file2.txt
输入了 0+1 块记录
输出了 0+1 块记录
[root@localhost ~]# cat file1.txt file2.txt
21312
21312
21312
21312
# 从file1中复制一块数据,并限制这块数据的大小是2字节数据
[root@localhost ~]# dd count=1 bs=2 if=file1.txt of=file2.txt
输入了 1+0 块记录
输出了 1+0 块记录
2 字节已复制,9.8948e-05 s,20.2 kB/s
[root@localhost ~]# cat file1.txt file2.txt
21312
21312
21
10、链接命令
语法模板:ln [options] source destination
ln命令用于在文件系统中创建链接(links)。链接分为两种类型:硬链接(hard link)和符号链接(symbolic link)
**硬链接:**不能使用硬链接的方式创建目录
- 硬链接是文件系统中的一条目录条目,它指向另一个文件的数据块
- 硬链接和源文件共享同一个Inode,因此对文件的修改会影响到所有硬链接
- 硬链接不能跨越文件系统的边界
符号链接:
- 符号链接是一个特殊的文件,其内容是指向另外一个文件的路径
- 符号链接和原始文件不共享Inode,因此删除原始文件后,符号链接仍存在,但是无法进行访问
特点:
- 符号链接:文件Inode不同;目录Inode相同
- 硬链接:文件Inode不同
| 选项 | 作用 |
|---|---|
| -s || --symbolic | 创建符号链接 |
| -f || --force | 如果目标文件已经存在,则覆盖它 |
| -i || --interactive | 在覆盖目标文件之前询问用户 |
| -p || --preserve | 保留源文件的属性,如权限和时间戳 |
tips:如果不加-s选项创建的就是硬链接。如果我们创建的是硬链接就相当于是创建了一个份源文件的备份,两个是互不关联的。例如我们删除两个中任何一个file,对另一个file没有任何的影响可看一下的图示以及举例
这里利用感觉涉及到了C中的地址引用的知识,很简单直白一个比喻符号链接就像是windows上的快捷方式。


举例:
# 在家目录下的testhard文件夹下创建一个file1硬链接
[root@localhost ~]# stat file1.txt ./testhard/file1.txt
文件:file1.txt
大小:12 块:8 IO 块大小:4096 普通文件
设备:253,0 Inode: 4325388 硬链接:2
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2026-01-06 14:44:26.138431370 +0800
修改时间:2026-01-06 14:44:26.137431393 +0800
变更时间:2026-01-06 18:14:35.708311961 +0800
创建时间:2026-01-05 17:53:18.501773610 +0800
文件:./testhard/file1.txt
大小:12 块:8 IO 块大小:4096 普通文件
设备:253,0 Inode: 4325388 硬链接:2
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2026-01-06 14:44:26.138431370 +0800
修改时间:2026-01-06 14:44:26.137431393 +0800
变更时间:2026-01-06 18:14:35.708311961 +0800
创建时间:2026-01-05 17:53:18.501773610 +0800
#我们删除testhard下的file1.txt 在对家目录下的file1.txt进行文件查看发现是没有任何影响的
[root@localhost ~]# rm ./testhard/file1.txt
rm: 是否删除普通文件 './testhard/file1.txt'?yes
[root@localhost ~]# ls ./testhard
[root@localhost ~]# stat file1.txt
文件:file1.txt
大小:12 块:8 IO 块大小:4096 普通文件
设备:253,0 Inode: 4325388 硬链接:1
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2026-01-06 18:20:29.259642575 +0800
修改时间:2026-01-06 14:44:26.137431393 +0800
变更时间:2026-01-06 18:19:15.509784750 +0800
创建时间:2026-01-05 17:53:18.501773610 +0800
# 在家目录下的testhard文件夹下创建一个file1符号链接
[root@localhost ~]# ln -is file1.txt ./testhard
[root@localhost ~]# ls -al ./testhard
总计 8
drwxr-xr-x 2 root root 4096 1月 6日 18:21 .
dr-xr-x---. 5 root root 4096 1月 6日 18:14 ..
lrwxrwxrwx 1 root root 9 1月 6日 18:21 file1.txt -> file1.txt
# 对源文件file1.txt进行删除,并在再去查看符号链接的file1.txt,会发现file1.txt失效掉了
[root@localhost ~]# rm -f file1.txt
[root@localhost ~]# ls
anaconda-ks.cfg file2.txt testhard
[root@localhost ~]# ls -al ./testhard
总计 8
drwxr-xr-x 2 root root 4096 1月 6日 18:21 .
dr-xr-x---. 5 root root 4096 1月 6日 18:23 ..
lrwxrwxrwx 1 root root 9 1月 6日 18:21 file1.txt -> file1.txt
11、file命令
语法模板:file [option] filename
在UNIX和Linux系统中,file命令用于确定文件的类型或属性。它可以提供有关文件的内容、文件系统类型、文件权限等信息。
选项:
-b:以二进制的方式输出文件中的信息
-f:仅显示文件类型,不显示其他的信息
-i:以人类可读的格式显示文件类型
并在再去查看符号链接的file1.txt,会发现file1.txt失效掉了
[root@localhost ~]# rm -f file1.txt
[root@localhost ~]# ls
anaconda-ks.cfg file2.txt testhard
[root@localhost ~]# ls -al ./testhard
总计 8
drwxr-xr-x 2 root root 4096 1月 6日 18:21 .
dr-xr-x—. 5 root root 4096 1月 6日 18:23 …
lrwxrwxrwx 1 root root 9 1月 6日 18:21 file1.txt -> file1.txt
### 11、file命令
**语法模板:**`file [option] filename`
在UNIX和Linux系统中,`file`命令用于确定文件的类型或属性。它可以提供有关文件的内容、文件系统类型、文件权限等信息。
**选项:**
`-b`:以二进制的方式输出文件中的信息
`-f`:仅显示文件类型,不显示其他的信息
`-i`:以人类可读的格式显示文件类型
`-L`:对符号链接进行特殊处理,查看链接指向的真实文件
更多推荐




所有评论(0)