在Linux 系统的日常工作中,还需要掌握对文件的创建,修改,复制,剪切,更名与删除等操作。
touch 命令touch 命令用于创建空白文件或设置文件的时间,格式为 "touch [选项][文件]"。
在创建空白的文本文件方面,这个touch命令相当简洁。比如,touch test 命令可以创建出一个名为test的空白文本文件。对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(mtime),文件权限或属性的更改时间(ctime)与文件的读取时间(atime)上面。
touch 命令的参数及其作用
参数 | 作用 |
-a | 修改“读取时间” atime |
-m | 修改“修改时间” mtime |
-d | 同时修改atime 与 mtime |
接下来,我们先使用ls命令查看一个文件的修改时间,然后修改这个文件, 最后再通过touch命令把修改后的文件时间设置成修改之前的时间:
root@ubuntu-1:~/workroom/c_test/2022$ ls -l diff_a.txt-rw-rw-r-- 1 root root 14 Aug 24 02:23 diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ echo "test touch" >> diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ ls -l diff_a.txt-rw-rw-r-- 1 root root 25 Aug 24 03:47 diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ touch -d "2020-05-20 05:20" diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ ls -l diff_a.txt-rw-rw-r-- 1 root root 25 May 20 2020 diff_a.txt
root@ubuntu-1:~/workroom/c_test/2022$ touch -d "2022-05-20 05:20" diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ ls -l diff_a.txt-rw-rw-r-- 1 root root 25 May 20 05:20 diff_a.txt
mkdir 命令
mkdir 命令用于创建空白的目录,格式为 "mkdir [选项] 目录"。
在Linux 系统中,文件夹是最常见的文件类型之一,除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录。
root@ubuntu-1:~/workroom/c_test/2022$ mkdir testroot@ubuntu-1:~/workroom/c_test/2022$ cd test/root@ubuntu-1:~/workroom/c_test/2022/test$ lsroot@ubuntu-1:~/workroom/c_test/2022/test$ mkdir -p a/b/c/d/eroot@ubuntu-1:~/workroom/c_test/2022/test$ lsaroot@ubuntu-1:~/workroom/c_test/2022/test$ cd aroot@ubuntu-1:~/workroom/c_test/2022/test/a$ lsbroot@ubuntu-1:~/workroom/c_test/2022/test/a$ cd b/root@ubuntu-1:~/workroom/c_test/2022/test/a/b$ lscroot@ubuntu-1:~/workroom/c_test/2022/test/a/b$ cd croot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c$ lsdroot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c$ cd droot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c/d$ lseroot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c/d$ cd eroot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c/d/e$ ls
cp 命令
cp 命令用于复制文件或目录,格式为"cp [选项]源文件 目标文件"。在Linux 系统中,复制操作具体分为3种情况:
如果目标文件是目录,则会把源文件复制到该目录中;如果目标文件也是普通文件,则会询问是否要覆盖它;如果目标文件不存在,则执行正常的复制操作。
cp命令的参数及其作用
参数 | 作用 |
-p | 保留原始文件的属性 |
-d | 若对象为"链接文件",则保留该文件的属性 |
-r | 递归持续复制(用于目录) |
-i | 若文件存在则询问是否覆盖 |
-a | 相当于-pdr (p,d,r为上述参数) |
接下来,使用touch创建一个名为test.log的普通空白文件,然后将其复制为一份名为x.log的备份文件,最后使用ls命令查看目录中的文件:
root@ubuntu-1:~/workroom/c_test/test_dir$ touch test.logroot@ubuntu-1:~/workroom/c_test/test_dir$ cp test.log x.logroot@ubuntu-1:~/workroom/c_test/test_dir$ lstest.log x.log
mv 命令
mv命令用于剪切文件或将文件重命名,格式为 "mv [选项] 源文件 [目标路径|目标文件名]"。
剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名:
root@ubuntu-1:~/workroom/c_test/test_dir$ mv x.log linux.logroot@ubuntu-1:~/workroom/c_test/test_dir$ lslinux.log test.log
rm 命令
rm 命令用于删除文件或目录,格式为"rm [选项] 文件"。
在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm 命令后面跟上-f 参数来强制删除。另外,想要删除一个目录,需要在rm命令加一个-r参数才可以,否则删除不掉。我们来尝试删除前面创建的test.log 和 linux.log 文件:
root@ubuntu-1:~/workroom/c_test/test_dir$ rm linux.logrm: remove regular empty file ‘linux.log’? yroot@ubuntu-1:~/workroom/c_test/test_dir$ rm -f test.logroot@ubuntu-1:~/workroom/c_test/test_dir$ lsroot@ubuntu-1:~/workroom/c_test/test_dir$
dd命令
dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为 "dd [参数]"。
dd命令是一个比较重要的命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。Linux系统中有一个名为/dev/zero的设备文件,这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。
dd命令的参数及其作用
参数 | 作用 |
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个块的大小 |
count | 设置要复制块的个数 |
例如我们可以使用dd命令从/dev/zero设备文件中取出一个大小为500M的数据块,然后保存名为500_file的文件:
root@ubuntu-1:~/workroom/c_test/test_dir$ dd if=/dev/zero of=500_file count=1 bs=500M1+0 records in1+0 records out524288000 bytes (524 MB, 500 MiB) copied, 3.51978 s, 149 MB/sroot@ubuntu-1:~/workroom/c_test/test_dir$ ls500_fileroot@ubuntu-1:~/workroom/c_test/test_dir$ ls -l 500_file-rw-rw-r-- 1 root root 524288000 Aug 24 04:49 500_fileroot@ubuntu-1:~/workroom/c_test/test_dir$ ls -lh 500_file-rw-rw-r-- 1 root root 500M Aug 24 04:49 500_file
dd命令的功能也不仅限于复制文件这么简单,在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它变成一个可立即使用的iso镜像。
bs 与 count 都是用来指定容量的大小,只要能满足需求,可随意组合搭配方式。
file 命令file 命令用于查看文件的类型,格式为 "file 文件名"。
在Linux 系统中,由于文本,目录,设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用file命令来查看文件类型了。
root@ubuntu-1:~/workroom/c_test/test_dir$ file 500_file500_file: data
打包压缩与搜索命令tar命令
tar命令用于文件进行打包压缩或解压,格式为"tar [选项][文件]"。
在Linux系统中,常见的文件格式比较多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式。
tar命令的参数及其作用:
参数 | 作用 |
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
首先,-c 参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用Gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C 参数用于指定解压到哪个指定的目录。-f 参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。
tar -czvf 压缩包名称.tar.gz 要打包的目录tar -xzvf 压缩包名称.tar.gz
使用tar命令将test目录通过gzip格式进行打包压缩,并将文件命名为test.tar.gz
root@ubuntu-1:~/workroom/c_test/2022$ tar -czvf test.tar.gz testtest/test/a/test/a/b/test/a/b/c/test/a/b/c/d/test/a/b/c/d/e/
接下来将打包后的压缩包文件指定解压到test_tmp目录中
//使用mkdir命令在当前路径下创建test_tmp目录root@ubuntu-1:~/workroom/c_test/2022$ mkdir test_xroot@ubuntu-1:~/workroom/c_test/2022$ tar -xzvf test.tar.gz -C test_xtest/test/a/test/a/b/test/a/b/c/test/a/b/c/d/test/a/b/c/d/e/
grep命令
grep命令用于在文本文件中执行关键词搜索,并显示匹配的结果,格式为"grep [选项][文件]"。grep 命令的参数及其作用如下表:
参数 | 作用 |
-b | 将可执行文件当作文本文件来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择 - 仅列出没有关键词的行 |
grep命令是用途最广泛的文本搜索匹配工具,虽然有很多参数,但是大多数基本上用不到。
两个最常用的参数:-n参数用来显示搜索到信息的行号;-v参数用于反选信息。
在Linux 系统中,/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin, 则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息:
root@ubuntu-1:~/workroom$ grep /sbin/nologin /etc/passwddaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologingames:x:5:60:games:/usr/games:/usr/sbin/nologinman:x:6:12:man:/var/cache/man:/usr/sbin/nologinlp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologinmail:x:8:8:mail:/var/mail:/usr/sbin/nologinnews:x:9:9:news:/var/spool/news:/usr/sbin/nologin
find 命令
find 命令用于按照指定条件来查找文件,格式为 "find [查找路径] 寻找条件 操作"。
在Linux 系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名,大小,修改时间,权限等信息),一旦匹配成功则默认将信息显示到屏幕上。
参数 | 作用 |
-name | 匹配名称 |
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) |
-ctime -n +n | 匹配修改文件权限的时间(-n 指n天以内,+n指n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
--type b/d/c/p/l/f | 匹配文件类型(后面的字幕字母依次表示块设备,目录,字符设备,管道,链接文件,文本文件) |
-size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec ......{}\: | 后面可跟用于进一步处理搜索结果的命令 |
这里讲解电脑一下-exec参数重要的作用,这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,由于find命令对参数的特殊要求,因此虽然exec是长格式形式,但是依然只需要一个减号(-)。
Linux 系统中的配置文件会保存到/etc目录中。如果要想获取该目录中所有以host开头的文件列表,可以执行以下命令:
root@ubuntu-1:~/workroom$ find /etc -name "host*" -print/etc/hosts.deny/etc/hostname/etc/init/hostname.sh.conf/etc/init/hostname.conf/etc/init.d/hostname.sh/etc/host.conf/etc/hosts/etc/hosts.allow
在整个文件系统中找出所有归属于test用户的文件并复制到/root/testresult目录。
该实验的重点是"-exec {} \;" 参数,其中的{}表示find 命令搜索出的每一个文件,并且命令的结尾必须是"\;",完成该实验的具体命令如下:
# find / -user test -exec cp -a {} /root/testresult/ \;