文件管理与编辑命令
mkdir命令
功能说明
mkdir 命令用于创建一个目录。mkdir是make directory 的缩写。其格式如下:
mkdir [选项] 目录名
mkdir 命令的选项及其说明如表所示。
mkdir 命令的选项及其说明
交互命令 | 含 义 |
-m | 对新建目录设置存取权限 |
-p | 可以指定一个路径名称。此时若路径中的某些目录尚不存在,加上此选 项后,系统将自动建立好那些尚不存在的目录,也就是一次可以建立多个目录 |
举例
在/home下创建user1 目录,同时在 user1下创建user2 目录,也就是连续创建两个目录。
#mkdir –p /home/user1/user2
这样就在/home目录下创建了嵌套目录user1/user2。
more命令
功能说明
如果一个文本文件比较长,一屏无法显示完毕,就需要使用more命令。more命令读取文本文件时,每次一屏显示,并且在每屏后暂停,同时在屏幕底部显示单词"More"。如果此时按"Enter"键,more 命令就会接着再显示文本的一行,依此类推;如果按空格键,more命令就继续显示文本文件的另一屏信息。其格式如下:
more [选项] 文件名
more命令的选项及其说明如表所示。
more命令的选项及其说明
交互命令 | 含 义 |
-d | 在屏幕底部 more 提示符后显示友好信息,此信息是有关使用哪些键继续,哪些键退出,哪些键提供 more 命令帮助的 |
-s | 将输出文件中的多个空行减少为只有一个空行输出。以文件的第 1行为准 |
-p | 先清除显示屏以前信息,再显示文本信息 |
-c | 显示文件时,每屏显示都清除先前的屏幕信息,然后从最顶端显示出来 |
举例
- 用分页的方式显示Makefile文件的内容,使用以下命令:
more Makefile
- 显示文件Makefile的内容,每10行显示一屏,同时清除屏幕,使用以下命令:
more –c -10 Makefile
cat 命令
功能说明
cat命令用来将文件的内容打印到标准输出,类似于DOS下的type命令,同时cat还可以用于连接合并文件。其格式如下:
cat [选项] 文件名
或者:
cat 文件 1 文件 2 > 文件 3
cat命令的选项及其说明如表所示。
cat 命令的选项及其说明
选 项 | 含 义 |
-A | 将文件中的 Tab输出显示为"^I",同时在每行的末尾显示一个$符号 |
-b | 将文件中的所有非空行按顺序编号,编号从 1开始 |
举例
- 查看Kconfig文件的内容,同时将文件中Tab的输出显示为"^I",并对非空行进行编号输出,可以使用以下命令:
#cat –Ab Kconfig
- 将文件file1.txt和file1.txt的内容合并后输出到文件file3.txt。
[root@localhost.localdomain /opt]# ls
file1.txt file2.txt
[root@localhost.localdomain /opt]# cat file1.txt file2.txt
this is file1.txt
this is file2.txt
[root@localhost.localdomain /opt]# cat file1.txt file2.txt >file3.txt
[root@localhost.localdomain /opt]# more file3.txt this is file1.txt
this is file2.txt
[root@localhost.localdomain /opt]# ls
file1.txt file2.txt file3.txt
diff命令
功能说明
diff命令用来比较文件的差异。diff以逐行的方式比较文本文件的异同,如果指定比较的是目录,则diff会比较目录中相同文件名的文件,但不会比较其中的子目录。其格式如下:
diff [选项] 文件1 文件2
diff命令的选项及其说明如表所示。
diff 命令的选项及其说明
选 项 | 含 义 |
-c | 显示全部内容,并标出不同之处 |
-b | 忽略行尾的空格,同时字符串中的一个或多个空格都将视为相同 |
-r | 当文件 1和文件 2 为目录时,会比较子目录中的文件 |
-s | 当两个文件相同时,显示文件相同信息 |
输出格式
通常输出信息由如下格式组成:
n1 a n3,n4
n1,n2 d n3 n1,
n2 c n3,n4
其中字母a、d、c之前的n1和n2代表文件1的行号,字母a、d、c之后的n3 和 n4 代表文件2的行号,字母a、d、c 分别表示附加、删除和修改操作。在上面输出形式的每行后紧跟着两个文件不同的若干行,其中以"<"打头的行属于文件 1,以">"打头的行属于文件2。
举例
比较文件file1.txt和文件file2.txt的异同,同时将/home/test/file3.txt文件和当前目录下的file2.txt文件进行比较。
[root@qu /opt]# cat file1.txt
this is file1.txt
[root@qu /opt]# cat file2.txt
this is file2.txt
[root@qu /opt]# cat /home/test/file3.txt
this is file3.txt
[root@qu /opt]# diff file1.txt file2.txt
1c1
< this is file1.txt
---
> this is file2.txt
[root@qu /opt]# diff /home/test/file3.txt file2.txt
1c1
< this is file3.txt
---
> this is file2.txt
[root@qu /opt]# diff -c /home/test/file3.txt file2.txt
*** /home/test/file3.txt 2024-04-27 16:48:36.852996658 +0800
--- file2.txt 2024-04-27 16:39:23.391997239 +0800
***************
*** 1 ****
! this is file3.txt
--- 1 ----
! this is file2.txt
grep命令
功能说明
grep命令是Linux下的文本过滤工具,grep根据指定的字符串,对文件的每一行进行搜索,如果找到了这个字符串,就输出该行的内容。其格式如下:
grep [选项] 需要查找的字符串 文件名
grep命令的选项有很多,这里列出最常使用的选项说明,如表所示。
grep命令的选项及其说明
选 项 | 含 义 |
-A NUM | 除了列出符合条件的行外,同时列出每个符合条件行的后NUM行 |
-c | 只显示符合条件的行数,而不显示每行的具体信息 |
-f file | 事先将要搜索的样式写入到一个文件中,每行一个样式,然后以这个文件作为条件进行搜索 |
-i | 搜索时忽略大小写 |
-n | 在显示的搜索结果上显示行号 |
-B | 与选项"-A"相反,除了列出符合条件的行外,同时列出每个符合条件行的前 NUM 行 |
举例
- 列出install.log 文件中含有 Output字符串的行。
[root@qu /opt]# grep Output file.log
[ 59.305] (II) vmware(0): Output Virtual2 disconnected
[ 59.305] (II) vmware(0): Output Virtual4 disconnected
[ 59.305] (II) vmware(0): Output Virtual6 disconnected
- 列出字符串的行,忽略大小写,并标识出每行的具体行号。
[root@qu /opt]# grep -ni Output file.log
1:[ 59.305] (II) vmware(0): Output Virtual2 disconnected
2:[ 59.305] (II) vmware(0): output Virtual3 disconnected
3:[ 59.305] (II) vmware(0): Output Virtual4 disconnected
4:[ 59.305] (II) vmware(0): output Virtual5 disconnected
5:[ 59.305] (II) vmware(0): Output Virtual6 disconnected
6:[ 59.305] (II) vmware(0): output Virtual7 disconnected
7:[ 59.305] (II) vmware(0): output Virtual8 disconnected
rm命令
功能说明
rm命令用来删除某个目录及其下的所有文件及子目录。对于链接文件,只是断开了链接,原文件保持不变。其格式如下:
rm [选项] 文件或者目录
rm命令的选项及其说明如表所示。
rm命令的选项及其说明
选 项 | 含 义 |
-r | 告诉 rm 将选项中列出的全部目录以及子目录还有文件均递归地删除,如果在选项中不指定"-r"选项,"rm"命令将不能删除目录 |
-f | 忽略不存在的问题,也不给出提示 |
-i | 交互式删除,即在删除前进行确认 |
注意:使用 rm 命令要特别小心,“rm –rf”组合要甚用,因为一旦文件被删除,就不能被恢复。Linux没有类似于Windows 的回收站。因此,为了防止文件或者目录被误删除, 可以使用 rm 的“-i”选项,来逐个确认要删除的文件。使用“-i”选项时,如果用户输入“y”,文件将被删除;如果输入其他任何信息,文件则不被删除。
touch 命令
功能说明
touch命令用来改变指定文件的访问时间和修改时间,若指定文件不存在则创建此文件。如果没有指定时间,则使用当前时间。其格式如下:
touch [选项] 设定的时间 文件
touch命令的选项及其说明如表所示。
touch 命令的选项及其说明
选 项 | 含 义 |
-a | 改变文件的访问时间为系统当前时间,无需设置时间选项 |
-m | 改变文件的修改时间为系统当前时间,无需设置时间选项 |
-c | 如果文件不存在,不创建也不提示 |
-d 或者-t | 使用指定的日期时间 |
-r<参考文件或目录> | 把指定文件或目录的日期时间都设成和参考文件或目录的日期时间相同 |
举例
下面是 touch 命令的一个操作实例,“#”号后面的内容为命令注释。
[root@qu /opt]# touch test.txt #创建一个文件test.txt
[root@qu /opt]# ls -l #显示文件创建时间(修改时间)
总用量 0
-rw-r--r-- 1 root root 0 4月 27 17:14 test.txt
[root@qu /opt]# ls -lu #显示文件的访问时间
总用量 0
-rw-r--r-- 1 root root 0 4月 27 17:14 test.txt
[root@qu /opt]# date #显示系统当前时间
2024年 04月 27日 星期六 17:14:39 CST
[root@qu /opt]# touch -a test.txt #改变文件的访问时间为系统当前时间
[root@qu /opt]# ls -lu
总用量 0
-rw-r--r-- 1 root root 0 4月 27 17:14 test.txt
[root@qu /opt]# ls -l
总用量 0
-rw-r--r-- 1 root root 0 4月 27 17:14 test.txt
[root@qu /opt]# touch -m test.txt #改变文件的修改时间为系统当前时间
[root@qu /opt]# ls -l
总用量 0
-rw-r--r-- 1 root root 0 4月 27 17:19 test.txt
[root@qu /opt]# touch -d "20210718 06:40" test.txt #将 test.txt 文件的修改时间设定为 2021 年 7 月 18 日 6 点 40 分
[root@qu /opt]# ls -l
总用量 0
-rw-r--r-- 1 root root 0 7月 18 2021 test.txt
ln命令
功能说明
ln命令用来在文件或目录之间创建链接。
Linux 下的链接有两种,一种是硬链接(Hard Link),一种是符号链接(Symbolic Link),默认情况下ln命令产生的是硬链接。
- 硬链接:是指通过文件的索引节点来进行链接。在的文件系统中,保存在磁盘的所有类型的文件都会分配一个编号,这个编号称为索引节点号(Inode Index)。多个文件指向同一个索引节点在Linux系统中是允许的,这就是所谓的硬链接。硬链接的作用是允许一个文件拥有多个有效的路径名,这样用户就可以对一些重要文件建立硬链接,以防止误删除操作。因为对应该文件的索引节点有一个以上的链接,只删除一个链接并不影像索引节点本身和其他链接,只有当最后一个链接被删除后,文件的数据块及目录的链接才会释放,也就是说,此时文件才会被真正删除。
- 符号链接:也叫软链接,软链接类似于Windows 中的快捷方式,因此软链接是一个指向真正的文件或者目录位置的符号连接。
ln命令的格式如下:
ln [选项] 源文件 目标链接名
ln命令的选项及其说明如表所示。
ln命令的选项及其说明
选 项 | 含 义 |
-f | 如果在目标位置存在与链接名相同的文件,这个文件将被删除 |
-s | 进行软链接(SymbolicLink) |
-d | 允许系统管理者硬链接自己的目录 |
-b | 对将在链接时会被覆盖或者删除的文件进行备份 |
举例
(1)将/etc/inittab 文件进行硬链接到/opt/backup 目录下,此时/opt/backup 下就生成了一个 inittab 文件。可以看到,两个文件没有任何不同。
[root@qu /opt]# ln /etc/inittab /opt/backup
[root@qu /opt]# ll
总用量 4
-rw-r--r--. 2 root root 511 11月 17 2020 backup
[root@qu /opt]# ll /etc/inittab
-rw-r--r--. 2 root root 511 11月 17 2020 /etc/inittab
(2)在当前目录下有两个文件 mylinux1.txt 和 mylinux.txt,现在将 mylinux1.txt 硬链接到当前目录下,链接名为 mylinux.txt。当前目录下存在相同的文件名 mylinux.txt,如果我们使用 ln 的“-f”选项,就会删除 mylinux.txt 文件。因此这里我们使用“-b”选项先备份 mylinux.txt 文件,然后再做 mylinux1.txt 的硬链接到 mylinux.txt。下面的 文件就是“-b”选项备份产生的文件。
[root@qu /opt]# ls
mylinux1.txt mylinux.txt
[root@qu /opt]# more mylinux.txt
this is mylinux
[root@qu /opt]# more mylinux1.txt
this is mylinux1
[root@qu /opt]# ln -b mylinux1.txt mylinux.txt
[root@qu /opt]# ls
mylinux1.txt mylinux.txt mylinux.txt~
[root@qu /opt]# more mylinux.txt
this is mylinux1
[root@qu /opt]# more mylinux.txt~
this is mylinux
(3)将/etc/inittab 文件符号链接到/opt 下。
[root@qu /opt]# ln -s /etc/inittab /opt/
[root@qu /opt]# ll /opt/inittab
lrwxrwxrwx 1 root root 12 4月 27 17:40 /opt/inittab -> /etc/inittab
file 命令
功能说明
file命令用来显示文件的类型。对于长度为0的文件,将识别为空文件;对于符号连接文件,缺省情况下将显示符号连接引用的真实文件路径。其格式如下:
file [选项] 文件名
file命令的选项及其说明如表所示。
file 命令的选项及其说明
选 项 | 含 义 |
-b | 显示文件类型结果,不显示对应文件名称 |
-L | 直接显示符号链接所指向文件的类型 |
-z | 显示压缩文件的信息 |
-i | 如果文件不是常规文件,则不进一步对文件类型进行分类 |
举例
- 显示/etc/init.d/network文件的类型,显示结果为shell 可执行文件。
[root@qu /opt]# file /etc/init.d/network
/etc/init.d/network: Bourne-Again shell script, ASCII text executable
- 显示/bin/sh文件类型,显示结果为符号链接文件。
[root@qu /opt]# file /bin/sh
/bin/sh: symbolic link to `bash'
- 显示/opt/file1.txt文件类型,显示结果为ASCII文本文件。
[root@qu /opt]# file file1.txt
file1.txt: ASCII text
- 显示/dev/had文件类型,显示结果为块设备文件。
[root@qu /opt]# file /dev/sda
/dev/sda: block special
cp命令
功能说明
cp 命令用来将给出的文件或者目录拷贝到另一个文件或者目录中。cp与Windows下的copy命令类似,但是cp命令更加强大。其格式如下:
cp [选项] 源文件或目录 目标文件或目录
cp命令的选项及其说明如表所示。
cp命令的选项及其说明
选 项 | 含 义 |
-a | 在拷贝目录时使用。它保留所有的信息,包含文件链接、文件属性,并递归地拷贝目录 |
-r | 若给出的源文件是一目录文件,此时 cp 将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名 |
-d | 拷贝时保留链接,这样不会失去链接文件 |
-p | 保留文件的修改时间和存取权限 |
-i | 如果已经有相同文件名的目标文件,则提示用户是否覆盖 |
举例
- 将当前目录下的所有文件复制到/tmp 目录下,“./*”表示当前目录下所有文件和目录。
[root@qu /opt]# cp -r ./* /tmp
- 将/home/yunlong目录及其子目录下的全部内容拷贝到/home/woman下。
[root@qu /opt]# cp -r /home/yunlong/ /home/woman/
find 命令
功能说明
find命令用来在指定的路径下查找指定的文件。其格式如下:
find path-name [-options] [-print –exec -ok 命令 {} \;]
具体的选项说明如下。
- path-name:find 命令查找的目录路径,例如可以用“.”表示当前目录,用“/”表示系统根目录。
- -options:find 命令的这个选项主要用来控制搜索的方式。这里列出“-options”选项常见的几种格式,如表所示。
常见的格式
格 式 | 含 义 |
-name '字串' | 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[] |
-lname '字串' | 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[] |
-gid n | 查找属于 ID 号为 n 的用户组的所有文件 |
-uid n | 查找属于 ID 号为 n 的用户的所有文件 |
-empty | 查找大小为 0 的目录或文件 |
-path ‘字串’ | 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[] |
-group‘字串’ | 查找属于用户组名为所给字串的所有的文件 |
-depth | 在查找文件时,首先查找当前目录下的文件,然后再查找其子目录下的文件 |
-prune 目录 | 指出搜索时不搜索该目录。如果同时使用-depth 选项,那么-prune 将被 find 命令忽略 |
-size n | 查找文件长度为 n 块的文件,带有 c 时表示文件长度以字节计 |
-user ‘字串’ | 查找属于用户名为所给字串的所有的文件 |
-mtime +n 或-n | 按时间搜索,+n 表示 n 天之前的,-n 表示今天到 n 天前之间的 |
-type 文件类型 | 按指定文件类型搜索。文件类型包括 b(块设备文件)、c(字符设备文件)、f(普通文件)、l(符号连接)、d(目录)、p(管道)、s(socket文件。 |
- -print:将搜索结果输出到标准输出。
- -exec:对搜索出符合条件的文件执行所给出的 Linux 命令,而不询问用户是否需要执行该命令。{}表示 shell 命令的选项即为所查找到的文件。命令的末尾必须以?;?结束。
注意:格式要正确,?-exec 命令 {} \;?,在}和\之间一定要有空格才行。
- -ok:对搜索出符合条件的文件执行所给出的 Linux 命令。与-exec 不同的是,它会询问用户是否需要执行该命令。
举例
(1) 在系统根目录下,查找文件类型为普通文件,属于 test用户的,2 天以前的,并且查找时不包含/usr/bin 目录的文件名为 main.c 的文件,并将结果输出到屏幕。
[root@qu /opt]# find / -path "/usr/bin" -prune -o -name "main.c" -user test -type f -mtime +2 -print
(2) 对上例中搜索的结果进行删除操作。
[root@qu /opt]# find / -path "/usr/bin" -prune -o -name "main.c" -user test -type f -mtime +2 -print -exec rm -rf {} \;
(3) 在系统根目录下查找不在/var/log 和/usr/bin 目录下的所有普通文件。
[root@qu /opt]# find / \( -path /var/log -o -path /usr/bin \) -prune -o -name "main.c" -print
\ 表示引用,告诉 shell 不对后面的字符做特殊解释,而留给 find 命令去解释其意义。
注意:“\( -path”中,在“(”和“-path”之间是有空格的,同时“/usr/bin \)”在“bin”和“\”之间也是有空格的。
(4) 查找系统中所有大小为 0 的普通文件,并列出它们的完整路径。
[root@qu /opt]# find / -type f -size 0 -exec ls -l {} \;
(5) 查找系统/var/logs 目录中修改时间在 7 天以前的普通文件,然后以交互方式删除。
[root@qu ~]# find /var/log/ -type f -mtime +7 -ok rm {} \;
< rm ... /var/log/grubby_prune_debug > ? y
< rm ... /var/log/anaconda/anaconda.log > ? y
< rm ... /var/log/anaconda/syslog > ? y
< rm ... /var/log/anaconda/X.log > ? y
< rm ... /var/log/anaconda/program.log > ? y
< rm ... /var/log/anaconda/packaging.log > ? y
(6) 在当前目录及子目录下查找所有“*.txt”的文件。
[root@qu ~]# find ./ -name "*.txt" -print
(7) 在用户自己的根目录下查找文件名以一个大写字母开头,紧接着是一个小写字母和两个数字,最后以“.txt”结尾的文件。
[root@qu ~]# find /root/ -name "[A-Z][a-z][0-9][0-9]*.txt" -print
(8) 在/etc 目录下查找文件属主为test用户的文件。
[root@qu ~]# find /etc/ -user test -print
split命令
功能说明
split 命令用来分割文档,将一个文件分成数个。其格式如下:
split [选项] [input_file] [output_file]
split 命令的选项及其说明如表所示。
split 命令的选项及其说明
选 项 | 含 义 |
-b size | 指定分割出来的文件大小,size 可加入单位,b 代表 512bytes,k 代表1KB,m 代表 1MB。 |
-n | 这里‚n‛指定分割的每个文件的长度,缺省为 1000 行 |
-d | 将 split 命令生成的文件序列以数字形式命名 |
-a | 指定 split 命令生成的文件序列的长度,默认长度为 2 |
- input_file:需要分割的文件。
- output_file : 分割出来的文件序列, split 命令分割后生成的文件序列名依次为output_fileaa、output_fileab、output_fileac 等。如果没有指定 output_file,系统默认以‚x‚作为输出文件名。
举例
(1) 将 access_log 文件进行分割,设定每个分割文件的大小为 10MB。
split –b 10M access_log access_log_bak
执行完毕,在当前目录下就生成类似 access_log_bakaa、access_log_bakab 和access_log_bakah 等的分割文件,每个文件大小 10MB。
(2) 将/opt/etc.zip 文件进行分割,指定每个文件大小为 2MB,输出文件序列以数字形式显示,序列长度为 3。
split –b 2M –d –a 3 /opt/etc.zip /opt/etc.zip_bak
split 命令执行完毕,在/opt/目录下生成类似 etc.zip_bak001、etc.zip_bak002、和etc.zip_bak003 等文件。
mv命令
功能说明
mv命令用来将文件或目录改名或将文件由一个目录移入另一个目录中。如果源类型和目标类型都是文件或者目录时,mv将进行目录重命名。如果源类型为文件,而目标类型为目录时,mv将进行文件的移动。如果源类型为目录,则目标类型只能是目录,不能是文件, 此时完成目录重命名。其格式如下:
mv [选项] 源文件或目录 目标文件或目录
mv命令的选项及其说明如表所示。
mv命令的选项及其说明
选 项 | 含 义 |
-i | 交互式操作,对已经存在的文件或目录覆盖时,系统会询问是否覆盖,用户输入"y"进行覆盖,输入"n"则不覆盖 |
-f | 禁止交互式操作,在 mv 将要覆盖某个文件或者目录时,不给任何提示,默认覆盖 |
举例
创建一个目录和一个Document 文件,然后将 Document 文件移动到myDocument目录下,最后修改myDocument目录为myDocument_1。
[root@qu /opt]# mkdir myDocument
[root@qu /opt]# touch Document
[root@qu /opt]# ls
Document myDocument
[root@qu /opt]# mv Document myDocument/
[root@qu /opt]# mv myDocument myDocument_1
[root@qu /opt]# ls
myDocument_1
[root@qu /opt]# tree
.
└── myDocument_1
└── Document
1 directory, 1 file