二、Linux文件、目录操作命令的讲解

120 阅读8分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

一、命令格式与目录处理命令ls

命令格式: 命令 [-选项] [参数]

例如: ls -la /root

说明: 1.个别命令可能不遵守上述格式****

                   2.当有多个选项时,可以写在一起。

                   3.简化选项和完整选项等价,例如:-a 等价于 --all

二、目录处理命令

ls

命令名称: ls

命令英文原意: list

命令所在目录: /bin/ls

执行权限: 所有用户

功能描述: 显示目录文件

语法: ls 选项[-ald] [文件或者目录]

常用参数:

-a显示所有文件, 包括隐藏文件
-l详细信息显示
-d查看目录属性
-h将文件大小的字段进行换算

mkdir

命令名称: mkdir

命令英文原意: make directories

命令所在目录: /bin/mkdir

执行权限: 所有用户

功能描述: 创建目录

语法: mkdir [-p] [目录名]

-p:递归创建

举例:

# 有一个“胖太乙” 文件夹
[root@TR ~]# ll
drwxr-xr-x 2 root      root      4096 Jan  8 22:52 胖太乙

# 在“胖太乙”下创建一个“胖太乙1”, 在“胖太乙1”下创建一个“胖太乙2”(一次创建)
[root@TR ~]# mkdir /root/胖太乙/胖太乙1/胖太乙2
mkdir: cannot create directory ‘/root/胖太乙/胖太乙1/胖太乙2’: No such file or directory
[root@TR ~]# 

可以看到, 如果 mkdir 不加任何参数, 上述的创建会有问题, 会提示没有这样的目录, 那是因为“胖太乙1”文件夹不存在, 所以这种情况下如果需要创建文件夹, 需要使用参数 ****“-p”。

[root@TR ~]# mkdir -p /root/胖太乙/胖太乙1/胖太乙2
[root@TR 胖太乙]# tree /root/胖太乙
/root/胖太乙
├── 胖太乙.txt
├── 胖太乙1
│   ├── 胖太乙2
└── 胖太乙3

cp

命令名称: cp

命令英文原意: copy

命令所在目录: /bin/cp

执行权限: 所有用户

功能描述: 复制文件或目录

语法: cp [-rp] [源文件或目录] [目标目录]

-r:复制目录

-p:保留文件属性

举例:

# 1.将“胖太乙.txt” 文件复制到 “胖太乙1”文件夹下
[root@TR 胖太乙]# ll
total 4
-rw-r--r-- 1 root root    0 Jan  8 23:09 胖太乙.txt
drwxr-xr-x 3 root root 4096 Jan  8 23:00 胖太乙1
[root@TR 胖太乙]# cp 胖太乙.txt 胖太乙1/
[root@TR 胖太乙]# mkdir 胖太乙3 
[root@TR 胖太乙]# ll
total 8
-rw-r--r-- 1 root root    0 Jan  8 23:09 胖太乙.txt
drwxr-xr-x 3 root root 4096 Jan  8 23:10 胖太乙1
drwxr-xr-x 2 root root 4096 Jan  8 23:10 胖太乙3
[root@TR 胖太乙]# cp 胖太乙3 胖太乙1/
cp: -r not specified; omitting directory '胖太乙3'
[root@TR 胖太乙]# cp -r  胖太乙3 胖太乙1/

[root@TR 胖太乙]# tree /root/胖太乙
/root/胖太乙
├── 盘太乙.txt
├── 胖太乙1
│   ├── 盘太乙.txt
│   ├── 胖太乙2
│   └── 胖太乙3
└── 胖太乙3

 如果仔细观察, 可以看到, 当一个文件被拷贝到其它位置的时候, 日期会有变化, 会变成当前“cp” 命令执行的时间,如果想拷贝文件的时候, 连同时间一起拷贝过来,就需要使用 “-p” 选项。这里就不在演示了。

mv

命令名称: mv

命令英文原意: move

命令所在目录: /bin/mv

执行权限: 所有用户

功能描述: 剪切文件、改名

语法: mv [源文件或目录] [目标目录]

 rm

命令名称: rm

命令英文原意: remove

命令所在目录: /bin/rm

执行权限: 所有用户

功能描述: 删除文件

语法: rm [-rf] [文件或目录]

-r:删除目录

-f:强制执行

举例:

# 在用户家目录有一个 "demo1"文件夹, 该文件夹下还有一个文件
[root@TR ~]# ll
drwxr-xr-x 2 root      root      4096 Jan  6 19:59 demo1

# 删除 “demo1”目录, 使用“-r” 会每删除一个就会提示一下。
[root@TR ~]# rm -r demo1
rm: descend into directory 'demo1'? y
rm: remove symbolic link 'demo1/链接文件'? y
rm: remove directory 'demo1'? y

 如果上述命令加上“-f”选项,就无须确认, 直接强制删除。

注:在工作中千万不要使用 “rm -rf /* ” 命令, 这个命令的含义是强制删除根目录下的所有文件。 如果你真的这么干了, 那么一副银手镯送给你。

三、文件处理命令

touch

命令名称: touch

命令所在目录: /bin/touch

执行权限: 所有用户

功能描述: 创建空文件

语法: touch [文件名]

cat

命令名称: cat

命令所在目录: /bin/cat

执行权限: 所有用户

功能描述: 显示文件内容

语法: cat [-n] [文件名]

              -n:显示行号

举例:

# 查看文件内容
[root@TR ~]# cat file1
姓名:胖太乙
年龄:1000
性别:男

# 查看文件内容,并且显示行号
[root@TR ~]# cat -n file1
     1	姓名:胖太乙
     2	年龄:1000
     3	性别:男
     4	
[root@TR ~]# 

tac

命令名称: tac

命令所在目录: /usr/bin/tac

执行权限: 所有用户

功能描述: 显示文件内容(反向显示)

语法: tac [文件名]

举例:

# 正序显示
[root@TR ~]# cat file1
姓名:胖太乙
年龄:1000
性别:男

# 倒序显示
[root@TR ~]# tac file1
性别:男
年龄:1000
姓名:胖太乙

more 

命令名称: more

命令所在目录: /bin/more

执行权限: 所有用户

功能描述: 分页显示文件内容

语法: more [文件名]

                (空格)或 f:翻页

                (enter): 换行

                q 或者Q :退出

less

命令名称: less

命令所在目录: /usr/bin/less

执行权限: 所有用户

功能描述: 分页显示文件内容(向上翻页)

语法: less [文件名]

ln

命令名称: ln

命令英文原意: link

命令所在目录: /bin/ln

执行权限: 所有用户

功能描述: 生成链接文件

语法: ln -s [源文件] [目标 文件]

-s:创建软链接(不加`-s`是创建硬链接)

举例:

[root@TR ln]# ll
total 8
-rw-r--r-- 1 root root 6358 Jan  9 12:29 ln.txt

# 1.创建软链接
[root@TR ln]# ln -s ln.txt ln.soft

# 2.创建硬链接
[root@TR ln]# ln ln.txt ln.hard

[root@TR ln]# ll
total 16
-rw-r--r-- 2 root root 6358 Jan  9 12:29 ln.hard
lrwxrwxrwx 1 root root    6 Jan  9 12:30 ln.soft -> ln.txt
-rw-r--r-- 2 root root 6358 Jan  9 12:29 ln.txt
[root@TR ln]# 

可以看到,同一个文件,创建软链接硬链接所展示出来的内容是不一样的。 两者有一下几点不同。

  1. 文件类型不同,我们在第一章讲到过(不清楚的小伙伴可以去看下一、Linux 文件以及目录的讲解),“-”代表的是普通文件, “l”代表的是链接。
  2. 文件权限不一样,软链接的权限是所有者, 所属组,其它人都是“rwx”,而硬链接则是和源文件的权限一直。(权限的章节后续会讲道,请关注收藏。
  3. 软链接的文件链接数是1, 而硬链接文件链接数是2。
  4. 软链接的文件大小则要小于源文件的大小, 硬链接则是相同。
  5. 软链接的文件名“ln.soft -> ln.txt” 指向了源文件路径。而硬链接则没有

总结:其实我们可以将软链接理解成 windows中的快捷方式,软链接只是一个指向原路径的一个快捷方式。所以软链接的文件大小要远远小于源文件的大小。而硬链接则可以连接成“cp” 的复制命令。那么有些小伙伴就要问了, 既然有了“cp” 复制命令, 为什么还需要硬链接。那是因为硬链接和复制又有一些不同之处。 下面就让我们看下硬链接和复制有什么不同吧。

# 1. 我们先看下 “ln.txt” 文件的内容
[root@TR ln]# cat ln.txt
姓名:胖太乙

# 2. 往“ln.txt” 文件追加 “年龄:1000”内容
[root@TR ln]# echo "年龄:1000" >> ln.txt
[root@TR ln]# cat ln.txt
姓名:胖太乙
年龄:1000

# 3.看下硬链接的内容变化,可以看到硬链接的内容也跟着变了
[root@TR ln]# cat ln.hard
姓名:胖太乙
年龄:1000

# 问: 如果我们改变硬链接的内容, 源文件的内容会跟着变化吗?
# 那我们试一下吧!

# 1. 改变“ln.hard”的内容
[root@TR ln]# echo "性别:男" >> ln.hard
[root@TR ln]# cat ln.hard 
姓名:胖太乙
年龄:1000
性别:男

# 2. 查看源文件的内容变化
[root@TR ln]# cat ln.txt
姓名:胖太乙
年龄:1000
性别:男
[root@TR ln]# 

结论:

  1. 硬链接和“cp” 复制的相同之处是, 两者都是复制。
  2. 但是硬链接的模式是“cp -p + 同步更新” , 而复制则是“cp -p”。 不管是改变硬链接的原文件内容,亦或者是改变硬链接文件的内容, 硬链接和源文件的内容都会同步变化。而复制则不具备这种功能。
  3. 硬链接不能跨分区
  4. 硬链接不能针对目录使用。

扩展:tree

推荐安装 tree , 可以查看指定目录的树形结构, 比较好用。

# 1.命令
yum install tree -y


# 安装
[root@TR ~]# yum install tree -y
Last metadata expiration check: 1:51:42 ago on Sat 08 Jan 2022 09:32:40 PM CST.
Package tree-1.7.0-15.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@TR ~]#