touch
用于创建空白文件,或者设置文件的时间
创建文件十分简单:
[root@linuxprobe ~]# touch myfile
[root@linuxprobe ~]# ll
total 60
-rw-------. 1 root root 1385 Aug 3 23:00 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Aug 3 23:02 Desktop
-rw-r--r--. 1 root root 45 Sep 21 09:54 diff_A.txt
-rw-r--r--. 1 root root 35 Sep 21 10:00 diff_B.txt
drwxr-xr-x. 2 root root 6 Aug 3 23:02 Documents
drwxr-xr-x. 2 root root 124 Sep 18 17:57 Downloads
-rw-r--r--. 1 root root 55 Aug 4 09:18 error.log
-rw-r--r--. 1 root root 1540 Aug 3 23:02 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Aug 3 23:02 Music
-rw-r--r--. 1 root root 0 Sep 21 10:48 myfile
drwxr-xr-x. 2 root root 6 Aug 3 23:02 Pictures
drwxr-xr-x. 2 root root 6 Aug 3 23:02 Public
-rw-r--r--. 1 root root 35208 Aug 7 09:45 readme.txt
drwxr-xr-x. 2 root root 6 Aug 3 23:02 Templates
-rw-r--r--. 1 root root 71 Sep 21 10:19 test.txt
drwxr-xr-x. 2 root root 6 Aug 3 23:02 Videos
可以看到列出来的文件信息中,我们创建出来的myfile赫然就在其中。
接下来我们看看如何设置文件的时间,在stat命令中我们聊过了,linux文件有三种时间状态分别是Atime(最后一次访问时间)、Mtime(文件内容最后修改时间)、Ctime(文件权限或属性最后修改时间)。这些时间状态都可以通过touch命令来修改。
touch命令参数以及作用如表:
参数 | 作用 |
---|---|
-a | 仅修改最后一次访问时间(Atime) |
-m | 仅修改内容修改时间(Mtime) |
-d | 同时修改Atime、Mtime |
很多黑客在入侵修改文件之后,为了隐藏踪迹就会将修改时间调整回原来的时间。
我们先查看test.txt的时间状态:
[root@linuxprobe ~]# stat test.txt
File: test.txt
Size: 71 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 35350560 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-09-21 10:19:21.617364555 +0800
Modify: 2023-09-21 10:19:19.165364702 +0800
Change: 2023-09-21 10:19:19.167364702 +0800
Birth: -
可以看到访问时间和内容修改时间都是2023年9月21日,10:19
我们尝试修改:
[root@linuxprobe ~]# touch -d "2023-09-20 10:00" test.txt
再次观察时间状态:
[root@linuxprobe ~]# stat test.txt
File: test.txt
Size: 71 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 35350560 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-09-20 10:00:00.000000000 +0800
Modify: 2023-09-20 10:00:00.000000000 +0800
Change: 2023-09-21 11:04:54.683200629 +0800
Birth: -
可以发现访问时间和修改时间都被我们改成了2023年9月20号的10点
mkdir
创建空白目录
除了简单的创建空白目录之外,mkdir使用 -p 参数还能嵌套创建多层目录:
[root@linuxprobe ~]# mkdir -p a/b/c/d/e/f
我们使用tree命令可以看到目录结构:
[root@linuxprobe ~]# tree
.
├── a
│ └── b
│ └── c
│ └── d
│ └── e
│ └── f
├── anaconda-ks.cfg
├── Desktop
├── diff_A.txt
├── diff_B.txt
├── Documents
├── Downloads
——————以下信息省略——————
cp
复制文件命令
复制文件有三种情况:
- 如果目标是目录,则把源文件复制到该目录
- 如果目标是文件,则会询问是否覆盖
- 如果目标文件不存在,则执行正常复制操作
当我们复制目录的时候需要加上-r参数,这里是cp的常用参数:
参数 | 作用 |
---|---|
-p | 保留原始文件的属性 |
-d | 若对象为”链接文件“,则保留”链接文件“的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在询问是否覆盖 |
-a | 相当于-pdr(就是上面三个参数的集合) |
我们创建一个空白文件夹用来实验:
[root@linuxprobe ~]# mkdir mvdemo
[root@linuxprobe ~]# cd mvdemo
[root@linuxprobe mvdemo]#
创建一个文件:
[root@linuxprobe mvdemo]# touch demo
[root@linuxprobe mvdemo]# ls
demo
将这个文件复制一份,并且改名:
[root@linuxprobe mvdemo]# cp demo demo2
[root@linuxprobe mvdemo]# ls
demo demo2
mv
剪切命令,还可以用来重命名
将上一次实验的demo文件剪切到上一级目录:
[root@linuxprobe mvdemo]# mv demo ../demo
[root@linuxprobe mvdemo]# ls
demo2
[root@linuxprobe mvdemo]# ls ../
a diff_A.txt error.log myfile Templates
anaconda-ks.cfg diff_B.txt initial-setup-ks.cfg Pictures test.txt
demo Documents Music Public Videos
Desktop Downloads mvdemo readme.txt
剪切是会把源文件删除的,所有如果将文件剪切到原目录,就是重命名了:
[root@linuxprobe mvdemo]# ls
demo2
[root@linuxprobe mvdemo]# mv demo2 demo3
[root@linuxprobe mvdemo]# ls
demo3
[root@linuxprobe mvdemo]#
dd
按照指定大小和个数的数据块来复制文件或转换文件
这个命令的参数是特别有意思的,别人用-或者–来表明参数,而它却用=号来直白的复制,它的参数如下:
参数 | 作用 |
---|---|
if | 输入文件的名称 |
of | 输出文件的名称 |
bs | 设置每个“块”的大小 |
count | 设置“块”的数量 |
在linux中有一个特别的设备文件:/dev/zero。这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此常常使用它来作为dd命令的输入文件,来生成一个特定大小的文件,如下:
[root@linuxprobe mvdemo]# dd if=/dev/zero of=560_file bs=560M count=1
1+0 records in
1+0 records out
587202560 bytes (587 MB, 560 MiB) copied, 22.1444 s, 26.5 MB/s
[root@linuxprobe mvdemo]# stat 560_file
File: 560_file
Size: 587202560 Blocks: 1146880 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 18007981 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-09-21 14:03:04.758920938 +0800
Modify: 2023-09-21 14:03:22.695919862 +0800
Change: 2023-09-21 14:03:22.695919862 +0800
Birth: -
我们可以看到文件生成成功,并且使用stat来查看文件大小的时候也将Size信息暴露出来
dd命令不仅仅是用来复制文件。如果想要把光驱设备中的光盘制作成iso格式的镜像文件,在windows中需要借助第三方软件来完成,但在Linux中直接使用dd命令就可以做到:
[root@linuxprobe ~]# dd if=/dev/cdrom of=linux-lisi-20230921.iso
13873152+0 records in
13873152+0 records out
7103053824 bytes (7.1 GB, 6.6 GiB) copied, 110.387 s, 64.3 MB/s
file
用于查看文件的类型
在linux中,文本、目录、设备都是文件,而且不像window那样严格要求后缀。因此很难通过文件名来判断文件的具体类型,这个时候就需要file来判断文件的类型了:
[root@linuxprobe ~]# file initial-setup-ks.cfg
initial-setup-ks.cfg: ASCII text
[root@linuxprobe ~]#
tar
文件的打包以及解压命令
将文件压缩可以可以使得文件体积变小,方便在网络上传输。在Linux中压缩文件主要使用.tar、.tar.gz、.tar.bz2格式,这些格式都是由tar来生成的。
tar参数如下:
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
首先,-c是压缩,-x是解压,两个参数不能同时使用。其次,-t和-z是两种不同的压缩方式,压缩者使用哪种方法压缩就命名哪种后缀,解压者根据后缀选择解压方法,这是约定俗成的。然后-v显示的是解压缩过程,很多人都喜欢省略这个参数,因为没有实际用处,还会打印大量的信息在终端,但我觉得这其实是很有用处的,如果一些文件的解压缩比较耗时,那我们很难判断解压缩进度以及是否死机,通过-v就没有这方面顾虑。最后,-f几乎是必须要使用的参数,必须放到最后一位,来指定目标文件名。
使用tar命令压缩/etc 文件夹:
[root@linuxprobe ~]# tar -czvf etc.tar.gz /etc
tar: Removing leading `/' from member names
/etc/
/etc/mtab
/etc/fstab
/etc/crypttab
/etc/resolv.conf
/etc/dnf/
/etc/dnf/modules.d/
/etc/dnf/modules.d/container-tools.module
/etc/dnf/modules.d/llvm-toolset.module
/etc/dnf/modules.d/perl-DBD-SQLite.module
/etc/dnf/modules.d/perl-DBI.module
/etc/dnf/modules.d/python36.module
/etc/dnf/modules.d/satellite-5-client.module
——————以下信息省略——————
先在用户目录创建一个文件夹:
[root@linuxprobe ~]# mkdir etc
将刚刚压缩的文件解压到此文件夹:
[root@linuxprobe ~]# tar -xzvf etc.tar.gz -C ./etc/
etc/
etc/mtab
etc/fstab
etc/crypttab
etc/resolv.conf
etc/dnf/
etc/dnf/modules.d/
etc/dnf/modules.d/container-tools.module
etc/dnf/modules.d/llvm-toolset.module
etc/dnf/modules.d/perl-DBD-SQLite.module
etc/dnf/modules.d/perl-DBI.module
etc/dnf/modules.d/python36.module
etc/dnf/modules.d/satellite-5-client.module
etc/dnf/modules.d/virt.module
——————以下信息省略——————
我们看看是不是解压成功了:
[root@linuxprobe ~]# ls etc
etc
[root@linuxprobe ~]# ls etc/etc/
adjtime hosts pulse
aliases hosts.allow qemu-ga
alsa hosts.deny qemu-kvm
alternatives hp radvd.conf
anacrontab idmapd.conf ras
asound.conf init.d rc0.d
at.deny inittab rc1.d
audit inputrc rc2.d
authselect insights-client rc3.d
avahi iproute2 rc4.d
bash_completion.d iscsi rc5.d
——————以下信息省略——————