Linux:文件目录管理命令

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
——————以下信息省略——————
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值