Linux学习第2弹—目录处理命令

Linux课程其实早就学习完了,但是学习笔记才写了一篇博客,真是惭愧!说来也是人懒,晚上都去追剧去了,无心学习。该罚!

言归正传!这一篇博客讲的是有关Linux系统中的目录处理命令。

一般而言,Linux系统中的命令基本上都遵循下面的格式:

1
命令 [选项] [参数]

注意:

  • 个别命令不遵循此格式
  • 当有多个选项时,可以写在一起
  • 简化选项与完整选项,-a一般等同于--all

1. 查询目录中的内容:ls

基本格式如下:

1
ls [选项] [参数]

选项:

  • -a 显示所有的文件,包括隐藏文件(隐藏文件以.开头,例如.bash_history
  • -l 查看详细信息
  • -d 显示目录属性
  • -h 人性化显示文件大小(默认显示文件的字节数)
  • -i 显示文件的inode节点

例子:

1
2
3
4
5
6
7
8
[root@IamLEO ~]# ls
1.log 4.sh find inst.log my_pack.tar phantomjs-2.1.1-linux-x86_64 shiny-server-1.5.4.869-rh5-x86_64.rpm
1_log.zip bash_prog.sh for.log ip_validate.sh mysql57-community-release-el7-8.noarch.rpm phantomjs-2.1.1-linux-x86_64.tar.bz2 spark
1.txt chongdingxiang.txt hello.c linuxcast mysql_pass.sh phantomjs-2.1.1-linux-x86_64.tar.bz2.1 test.log
2b.log c_learn hello.i linuxcast.net nash_su2 rstudio-server-rhel-1.0.153-x86_64.rpm text
2.sh correct.log hello.log local_global_var.sh nohup.out runoob.txt vim_1.txt
2.txt epel-release-6-8.noarch.rpm hello.s ls npm-debug.log runoob.zip wget-log
3.sh error.log hello.sh my_dir pdi-ce-7.0.0.0-25.zip shiny_find.log

查看但当前目录下的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[root@IamLEO ~]# ls -l
总用量 939952
-rw-r--r-- 1 root root 223 12月 23 16:02 1.log
-rw-r--r-- 1 root root 310 12月 25 10:30 1_log.zip
-rw-r--r-- 1 root root 4181 12月 24 09:34 1.txt
-rw-r--r-- 1 root root 0 12月 27 09:43 2b.log
-rw-r--r-- 1 root root 88 12月 24 10:24 2.sh
-rw-r--r-- 1 root root 76 12月 23 16:14 2.txt
-rw-r--r-- 1 root root 202 12月 24 11:07 3.sh
-rw-r--r-- 1 root root 295 12月 24 17:03 4.sh
-rwxr-xr-x 1 root root 31 11月 24 00:43 bash_prog.sh
-rw-r--r-- 1 root root 7 12月 21 11:21 chongdingxiang.txt
drwxr-xr-x 2 root root 4096 12月 31 13:58 c_learn
-rw-r--r-- 1 root root 0 11月 26 22:57 correct.log
-rw-r--r-- 1 root root 14540 11月 5 2012 epel-release-6-8.noarch.rpm
-rw-r--r-- 1 root root 110 12月 21 11:23 error.log
-rw-r--r-- 1 root root 0 11月 30 16:32 find
-rw-r--r-- 1 root root 8008 12月 9 02:13 for.log
-rw-r--r-- 1 root root 97 12月 10 15:14 hello.c
-rw-r--r-- 1 root root 16893 12月 10 15:14 hello.i
-rw-r--r-- 1 root root 13 12月 9 22:39 hello.log
-rw-r--r-- 1 root root 503 12月 10 15:15 hello.s
-rwxr-xr-x 1 root root 34 11月 24 18:02 hello.sh
-rw-r--r-- 1 root root 0 12月 27 09:43 inst.log
-rwxr-xr-x 1 root root 520 11月 24 07:45 ip_validate.sh
drwxr-xr-x 2 root root 4096 12月 31 15:17 linuxcast
drwxr-xr-x 2 root root 4096 12月 29 14:49 linuxcast.net
-rwxr-xr-x 1 root root 176 12月 16 09:47 local_global_var.sh
drwxr-xr-x 2 root root 4096 11月 19 23:05 ls
drwxr-xr-x 2 root root 4096 11月 25 17:10 my_dir
-rw-r--r-- 1 root root 20480 11月 25 17:10 my_pack.tar
-rw-r--r-- 1 root root 9116 4月 11 2016 mysql57-community-release-el7-8.noarch.rpm
-rwxrwxrwx 1 root root 244 12月 6 2016 mysql_pass.sh
-rw-r--r-- 1 root root 0 12月 24 19:48 nash_su2
-rw------- 1 root root 0 12月 8 23:25 nohup.out
-rw-r--r-- 1 root root 4151 7月 13 14:21 npm-debug.log
-rw-r--r-- 1 root root 839559799 11月 6 2016 pdi-ce-7.0.0.0-25.zip
drwxr-xr-x 4 root root 4096 1月 25 2016 phantomjs-2.1.1-linux-x86_64
-rw-r--r-- 1 root root 41440732 7月 21 02:31 rstudio-server-rhel-1.0.153-x86_64.rpm
-rw-r--r-- 1 root root 119 11月 20 22:34 runoob.txt
-rw-r--r-- 1 root root 287 11月 23 00:10 runoob.zip
-rw-r--r-- 1 root root 804975 12月 11 14:16 shiny_find.log
-rw-r--r-- 1 root root 55829650 8月 26 03:17 shiny-server-1.5.4.869-rh5-x86_64.rpm
drwxr-xr-x 2 root root 4096 10月 29 18:03 spark
-rw-r--r-- 1 root root 515 12月 17 20:32 test.log
drwxr-xr-x 2 root root 4096 12月 23 20:45 text
-rw-r--r-- 1 root root 72 12月 25 11:13 vim_1.txt
-rw-r--r-- 1 root root 1196072 9月 5 18:43 wget-log

这里ls -l命令的别名为ll,即ll也能够得到和上面一样的结果。关于别名的用法,以后的博客中会专门谈到。这里了解一下结果中的详细信息。

下面以bash_prog.sh为例:

1
-rwxr-xr-x 1 root root 31 11月 24 00:43 bash_prog.sh

-rwxr-xr-x前面的-表示普通文件,后面的rxw分别表示“可读”、“可写”、“可执行”。其中从左往右前三个表示文件所属用户的权限,这里是所属用户可读、可写、可执行;中间三位表示文件所属用户组的权限,这里是所属用户组可读、不可写、可执行;后三位表示其他用户组的权限,这里是其他用户可读、不可写、可执行

刚刚提到了-表示普通文件,其实Linux系统存在7种文件类型,但作为入门和日常使用,只需要了解常见的三种——-dld顾名思义,表示目录,l则表示软链接文件(相当于windows系统中的快捷方式)。

查看某一特定文件夹下的文件

1
2
3
4
5
6
7
8
9
[root@IamLEO ~]# ll -hia ./my_dir/
总用量 36K
541936 drwxr-xr-x 2 root root 4.0K 11月 25 17:10 .
262149 dr-xr-x--- 17 root root 4.0K 12月 31 13:58 ..
541134 -rw-r--r-- 1 root root 117 11月 22 09:18 abc.txt
541128 -rw-r--r-- 1 root root 234 11月 25 17:06 abc.zip
547870 -rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
547869 -rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
541131 -rw-r--r-- 1 root root 10K 11月 25 17:10 my_pack.tar

最前面的数字表示文件的inode节点,第三列的数字表示引用计数,与链接命令有关。接下来的10K表示my_pack.tar文件的大小为10K。11月 25 17:10表示文件最后修改的时间。

2. 创建目录:mkdir

基本格式如下:

1
mkdir -p [参数]

选项:

  • -p 递归创建目录

例子:

1
2
3
4
5
[root@IamLEO ~]# mkdir dir1
[root@IamLEO dir1]# ll
总用量 0
-rw-r--r-- 1 root root 0 1月 6 15:50 aa.txt
-rw-r--r-- 1 root root 0 1月 6 15:50 bb.txt
1
2
3
4
5
6
7
8
[root@IamLEO dir1]# mkdir dir1/dir2
mkdir: 无法创建目录"dir1/dir2": 没有那个文件或目录
[root@IamLEO dir1]# mkdir -p dir1/dir2
[root@IamLEO dir1]# ll
总用量 4
-rw-r--r-- 1 root root 0 1月 6 15:50 aa.txt
-rw-r--r-- 1 root root 0 1月 6 15:50 bb.txt
drwxr-xr-x 3 root root 4096 1月 6 15:51 dir1

注:

  • 如果是在当前目录下创建一个普通目录,直接在mkdir后跟上想要创建的目录名即可
  • 如果是在当前目录下递归地创建目录,类似于mkdir current_dir/dir_a/dir_b,需要在mkdir后面加上-p选项

3. 切换目录:cd

基本格式如下:

1
cd [目录]

例子:

1
2
3
[root@IamLEO ~]# cd my_dir/
[root@IamLEO my_dir]# pwd # `pwd`打印当前目录的完整路径
/root/my_dir

附:几个关于cd命令的简化操作

1
2
3
4
5
cd ~ # 进入当前目录的家目录
cd # 同上
cd - # 进入上次目录
cd .. # 进入上一级目录
cd . # 进入当前目录
1
2
3
4
5
6
7
8
9
[root@IamLEO my_dir]#
[root@IamLEO my_dir]# cd ~
[root@IamLEO ~]# pwd
/root
[root@IamLEO ~]# cd .
[root@IamLEO ~]# cd ..
[root@IamLEO /]# cd -
/root
[root@IamLEO ~]# cd ~

根目录是整个Linux系统的最顶层目录,用/表示。
家目录是每个用户登陆系统后所在的目录,一般位于/home/目录下(root用户的家目录位于/root/目录),以用户名作为目录,用~表示。

1
2
cd / # 进入根目录
cd ~ # 进入当前用户的家目录

关于路径,还存在绝对路径和相对路径之分:

  • 相对路径:以当前目录作为基础进行目录的切换和文件的查找
1
2
3
4
5
6
7
8
9
10
11
12
[root@IamLEO ~]# cd ./my_dir/
[root@IamLEO my_dir]#
[root@IamLEO ~]# ll -hia ./my_dir/
总用量 36K
541936 drwxr-xr-x 2 root root 4.0K 11月 25 17:10 .
262149 dr-xr-x--- 18 root root 4.0K 1月 6 15:49 ..
541134 -rw-r--r-- 1 root root 117 11月 22 09:18 abc.txt
541128 -rw-r--r-- 1 root root 234 11月 25 17:06 abc.zip
547870 -rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
547869 -rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
541131 -rw-r--r-- 1 root root 10K 11月 25 17:10 my_pack.tar
  • 绝对路径:从根目录开始,一级一级地递归查找,无论当前处于哪一个目录下面。
1
2
3
[root@IamLEO my_dir]# cd /root/my_dir/
[root@IamLEO my_dir]# pwd
/root/my_dir

值得指出的一点是,Linux系统非常人性化,可以很方便地进行文件名补全、目录名补全。当一个文件名/目录名过长的时候,直接摁住Tab键会打印出该文件/目录的名称,有的时候需要嗯两次,因为有文件的的前面几个字符都相同。

4. 删除空目录:rmdir

基本格式如下:

1
rmdir [目录名]

注:

  • rmdir只能删除空文件夹,所以很少用

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@IamLEO my_dir]# ll
总用量 28
-rw-r--r-- 1 root root 117 11月 22 09:18 abc.txt
-rw-r--r-- 1 root root 234 11月 25 17:06 abc.zip
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar
[root@IamLEO my_dir]# mkdir test_dir
[root@IamLEO my_dir]# rmdir test_dir/
[root@IamLEO my_dir]# ll
总用量 28
-rw-r--r-- 1 root root 117 11月 22 09:18 abc.txt
-rw-r--r-- 1 root root 234 11月 25 17:06 abc.zip
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar

5. 删除文件或者目录:rm

基本格式如下:

1
rm -rf [文件/目录]

选项:

  • -r 删除目录
  • -f 强制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@IamLEO my_dir]# ll
总用量 28
-rw-r--r-- 1 root root 117 11月 22 09:18 abc.txt
-rw-r--r-- 1 root root 234 11月 25 17:06 abc.zip
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar
[root@IamLEO my_dir]# rm abc.txt
rm:是否删除普通文件 "abc.txt"?y
[root@IamLEO my_dir]# rm -f abc.zip
[root@IamLEO my_dir]# ll
总用量 20
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar

可以看到,abc.zip被强制删除,并没有出现让我们选择是否删除的选项。

下面给出一条非常著名的命令,请勿尝试!!!后果很严重!!!

1
# rm -rf /

6. 复制命令:cp

这个命令是不是经常听到😂😅

基本格式如下:

1
cp [选项] [源文件/目录] [目标目录]

选项:

  • -r 复制目录
  • -f 同时复制文件属性
  • -d 若源文件为链接文件,则复制链接属性
  • -a 相当于-pdr

改名复制

1
2
3
4
5
6
7
8
9
[root@IamLEO ~]# ll hello.sh
-rwxr-xr-x 1 root root 34 11月 24 18:02 hello.sh
[root@IamLEO ~]# cp hello.sh /root/my_dir/hello_1.sh
[root@IamLEO ~]# ll my_dir/
总用量 24
-rwxr-xr-x 1 root root 34 1月 6 16:26 hello_1.sh
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar

可以看到,将hello.sh复制到my_dir文件夹下,并改名hello_1.sh,其最后更新的时间会发生变化。如果不想要这个时间发生变化,可以加上-p选项,如下:

1
2
3
4
5
[root@IamLEO ~]# ll hello.sh
-rwxr-xr-x 1 root root 34 11月 24 18:02 hello.sh
[root@IamLEO ~]# cp -p hello.sh my_dir
[root@IamLEO ~]# ll my_dir/hello.sh
-rwxr-xr-x 1 root root 34 11月 24 18:02 my_dir/hello.sh

复制目录

1
2
3
4
5
6
7
8
[root@IamLEO ~]# cp -r linuxcast ./my_dir/
[root@IamLEO ~]# ll ./my_dir/
总用量 28
-rwxr-xr-x 1 root root 34 1月 6 16:26 hello_1.sh
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
drwxr-xr-x 2 root root 4096 1月 6 16:28 linuxcast
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar

7. 简介/改名命令:cp

基本格式如下:

1
mv [源文件/目录] [目标目录]

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@IamLEO ~]# ll mv_example.txt
-rw-r--r-- 1 root root 0 1月 6 16:39 mv_example.txt
[root@IamLEO ~]# ll my_dir/
总用量 32
-rwxr-xr-x 1 root root 34 1月 6 16:26 hello_1.sh
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rwxr-xr-x 1 root root 34 11月 24 18:02 hello.sh
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
drwxr-xr-x 2 root root 4096 1月 6 16:28 linuxcast
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar
[root@IamLEO ~]# mv mv_example.txt my_dir/
[root@IamLEO ~]# ll my_dir/
总用量 32
-rwxr-xr-x 1 root root 34 1月 6 16:26 hello_1.sh
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rwxr-xr-x 1 root root 34 11月 24 18:02 hello.sh
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
drwxr-xr-x 2 root root 4096 1月 6 16:28 linuxcast
-rw-r--r-- 1 root root 0 1月 6 16:39 mv_example.txt
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar

注:

  • mv命令在剪切目录时不需要加-r选项

  • cprm命令在操作目录对象时候需要加选项-r

修改文件名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@IamLEO my_dir]# ll
总用量 32
-rwxr-xr-x 1 root root 34 1月 6 16:26 hello_1.sh
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rwxr-xr-x 1 root root 34 11月 24 18:02 hello.sh
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
drwxr-xr-x 2 root root 4096 1月 6 16:28 linuxcast
-rw-r--r-- 1 root root 0 1月 6 16:39 mv_example.txt
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar
[root@IamLEO my_dir]# mv mv_example.txt example_mv.txt
[root@IamLEO my_dir]# ll
总用量 32
-rw-r--r-- 1 root root 0 1月 6 16:39 example_mv.txt
-rwxr-xr-x 1 root root 34 1月 6 16:26 hello_1.sh
-rw-r--r-- 1 root root 49 11月 20 19:42 helloA.c
-rwxr-xr-x 1 root root 34 11月 24 18:02 hello.sh
-rw-r--r-- 1 root root 49 11月 20 19:38 hello_world
drwxr-xr-x 2 root root 4096 1月 6 16:28 linuxcast
-rw-r--r-- 1 root root 10240 11月 25 17:10 my_pack.tar

源文件与目标文件不在一个目录下,就是剪切。如果在一个目录下,就是改名。

8. 参考