0%

Linux文件管理

Linux基础(2):linux的文件管理

Linux进行文件管理的相关指令
cd、ls、rm、cp、mv、which、tree

cd命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cd 目录名

//常用命令
gao@gao-VirtualBox:~/桌面$ cd / #cd /进入根目录
gao@gao-VirtualBox:/$ cd #cd 进入当前用户家目录
gao@gao-VirtualBox:~$ cd ~ #cd ~ 进入当前用户家目录

gao@gao-VirtualBox:~$ cd / #绝对路径进入家目录
gao@gao-VirtualBox:/$ cd /home/gao

gao@gao-VirtualBox:~$ cd / #相对路径进入家目录
gao@gao-VirtualBox:/$ cd home/gao
gao@gao-VirtualBox:~$ cd /
gao@gao-VirtualBox:/$ cd ./home/gao
gao@gao-VirtualBox:~$

ls命令

含义:ls就是list 显示文件信息

基本指令

1
2
gao@gao-VirtualBox:~$ ls                #显示当前目录下所有的文件名
公共的 模板 视频 图片 文档 下载 音乐 桌面 Qt5.9.0 snap
1
2
3
4
5
6
7
8
9
gao@gao-VirtualBox:~$ ls -a             #显示当前目录下所有文件,包含隐藏文件(文件名前有.表明有隐藏属性)                 
. 音乐 .local .vboxclient-clipboard.pid
.. 桌面 .mozilla .vboxclient-display.pid
公共的 .bash_history .pki .vboxclient-draganddrop.pid
模板 .bash_logout .profile .vboxclient-seamless.pid
视频 .bashrc Qt5.9.0 .viminfo
图片 .cache snap .vscode
文档 .config .ssh
下载 .gnupg .sudo_as_admin_successful
1
2
3
4
5
6
7
8
9
10
11
12
gao@gao-VirtualBox:~$ ls -l           #显示每个文件的详细信息
总用量 40
drwxr-xr-x 2 gao gao 4096 4月 16 18:11 公共的
drwxr-xr-x 2 gao gao 4096 4月 16 18:11 模板
drwxr-xr-x 2 gao gao 4096 4月 16 18:11 视频
drwxr-xr-x 2 gao gao 4096 4月 16 18:11 图片
drwxr-xr-x 2 gao gao 4096 4月 16 18:11 文档
drwxr-xr-x 3 gao gao 4096 5月 24 20:01 下载
drwxr-xr-x 2 gao gao 4096 4月 16 18:11 音乐
drwxr-xr-x 4 gao gao 4096 6月 9 10:52 桌面
drwxrwxr-x 8 gao gao 4096 4月 17 11:18 Qt5.9.0
drwxr-xr-x 3 gao gao 4096 4月 16 18:12 snap
1
2
gao@gao-VirtualBox:~$ ls -F             #若是文件夹后面跟/符号
公共的/ 模板/ 视频/ 图片/ 文档/ 下载/ 音乐/ 桌面/ Qt5.9.0/ snap/
1
2
3
4
5
6
7
8
9
10
11
12
gao@gao-VirtualBox:~$ ls -lFh      #组合使用,h的作用使得显示的文件大小符合常规方式
总用量 40K
drwxr-xr-x 2 gao gao 4.0K 4月 16 18:11 公共的/
drwxr-xr-x 2 gao gao 4.0K 4月 16 18:11 模板/
drwxr-xr-x 2 gao gao 4.0K 4月 16 18:11 视频/
drwxr-xr-x 2 gao gao 4.0K 4月 16 18:11 图片/
drwxr-xr-x 2 gao gao 4.0K 4月 16 18:11 文档/
drwxr-xr-x 3 gao gao 4.0K 5月 24 20:01 下载/
drwxr-xr-x 2 gao gao 4.0K 4月 16 18:11 音乐/
drwxr-xr-x 4 gao gao 4.0K 6月 9 10:52 桌面/
drwxrwxr-x 8 gao gao 4.0K 4月 17 11:18 Qt5.9.0/
drwxr-xr-x 3 gao gao 4.0K 4月 16 18:12 snap/

得到的文件信息的具体含义

1
2
3
4
5
# 文件详细信息介绍
d rwx r-x r-x 3 gao gao 4.0K 4月 16 18:12 snap/
| | | | | | | | | |
文件 文件所 文件所 其他人 硬链接 文件 文件 文件大小 文件修改时间 文件名
类型 有者权限 属组权限 权限 计数 所有者 所属组

Linux包含的文件类型

-:普通的文件,在 Linux 终端中没有执行权限的为白色,压缩包为红色,可执行程序为绿色字体
d: 目录 (directory), 在 Linux 终端中为蓝色字体,如果目录的所有权限都是开放的,有绿色的背景色
l: 软链接文件 (link), 相当于 windows 中的快捷方式,在 Linux 终端中为淡蓝色 (青色) 字体
c: 字符设备 (char), 在 Linux 终端中为黄色字体
b: 块设备 (block), 在 Linux 终端中为黄色字体
p: 管道文件 (pipe), 在 Linux 终端中为棕黄色字体
s: 本地套接字文件 (socket), 在 Linux 终端中为粉色字体

文件显示

权限的问题

文件所属者,指拥有该文件的用户,一般具有所有权限。该用户属于某一用户组,用户组的其他成员对该文件具有一定权限,其他人也具有一定权限。

权限的类型:读权限(r),写权限(w),执行权限(x),无权限(-)

以最初的文件信息举例;所有者权限(rwx,读写执行),所属组权限(r-x,读执行)

硬链接记数

记录文件有多少别名,有多少均指向同一块内存

硬链接示意图

mkdir创建目录&&rm删除目录

创建目录

1
2
3
4
5
6
7
8
gao@gao-VirtualBox:~$ mkdir test                #创建单级目录
gao@gao-VirtualBox:~/桌面/test$ mkdir a b #创建多个单级目录
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── a
└── b

2 directories, 0 files
1
2
3
4
5
6
7
gao@gao-VirtualBox:~$ mkdir test/hello/nihao/iam/gao -p #创建多级目录
irtualBox:~/test$ tree
.
└── hello
└── nihao
└── iam
└── gao

删除目录

1
2
gao@gao-VirtualBox:~/桌面/test$ rmdir hello      #只能删除单目录,不能包含子目录
rmdir: 删除 'hello' 失败: 目录非空
1
2
3
4
5
gao@gao-VirtualBox:~/桌面/test$ rm hello -r      #既可以删除文件也可以删除目录,删目录需要 -r
gao@gao-VirtualBox:~/桌面/test$ tree
.

0 directories, 0 files
1
2
3
4
5
6
7
8
9
10
11
12
gao@gao-VirtualBox:~/桌面/test$ rm a -ri     #带有提示的删除所有文件
rm:是否进入目录'a'? y
rm:是否进入目录'a/b'? y
rm:是否进入目录'a/b/c'? n
gao@gao-VirtualBox:~/桌面/test$ tree
.
└── a
└── b
└── c
└── d

4 directories, 0 files
1
2
3
4
5
gao@gao-VirtualBox:~/桌面/test$ rm a -rf       #不带提示,直接删除
gao@gao-VirtualBox:~/桌面/test$ tree
.

0 directories, 0 files

注:也可以这种写法 rm -rf 文件名

cp命令拷贝文件

两种用法
拷贝文件:cp 文件a 文件b #将a复制一份到b上

拷贝目录:cp 目录A 目录B -r #将目录A拷贝到目录B中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
gao@gao-VirtualBox:~/桌面/test/b$ ls -l
总用量 8
-rw-rw-r-- 1 gao gao 10 6月 19 13:53 a
-rw-rw-r-- 1 gao gao 9 6月 19 13:53 b
gao@gao-VirtualBox:~/桌面/test/b$ cp a c #cp一个文件a到另一个之前并未存在的文件c,自动生成c
gao@gao-VirtualBox:~/桌面/test/b$ ls -l
总用量 12
-rw-rw-r-- 1 gao gao 10 6月 19 13:53 a
-rw-rw-r-- 1 gao gao 9 6月 19 13:53 b
-rw-rw-r-- 1 gao gao 10 6月 19 13:54 c #新创建的文件

gao@gao-VirtualBox:~/桌面/test/b$ cp a b #cp一个文件a到另一个之前存在的文件b,覆盖原文件
gao@gao-VirtualBox:~/桌面/test/b$ ls -lh
总用量 12K
-rw-rw-r-- 1 gao gao 10 6月 19 13:53 a
-rw-rw-r-- 1 gao gao 10 6月 19 13:57 b #被覆盖的文件
-rw-rw-r-- 1 gao gao 10 6月 19 13:54 c

拷贝文件,有则覆盖,无则新建

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
gao@gao-VirtualBox:~/桌面/test$ cp b/ d -r   #d事先不存在
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── a
├── b
│   ├── a
│   ├── b
│   └── c
├── c
└── d
├── a
├── b
└── c

4 directories, 6 files

##注意点:目录名后面加/, 指令后要加-r,递归拷贝全部。
##:目录之前不存在则自动创建
##:目录之前存在则,将目录A添加为目录B的子目录

gao@gao-VirtualBox:~/桌面/test$ cp b a/ -r #a事先已经存在
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── a
│   └── b
│   ├── a
│   ├── b
│   └── c
├── b
│   ├── a
│   ├── b
│   └── c
├── c
└── d
├── a
├── b
└── c

5 directories, 9 files

##一种特殊情况:拷贝目录中的文件
gao@gao-VirtualBox:~/桌面/test$ cp d/c a/ -r #拷贝d中的c到a目录下
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── a
│   ├── b
│   │   ├── a
│   │   ├── b
│   │   └── c
│   └── c
├── b
│   ├── a
│   ├── b
│   └── c
├── c
└── d
├── a
├── b
└── c

5 directories, 11 files

cp 目录A/* 目录B -r,拷贝A中所有文件到目录B下

mv命令移动(改名)(覆盖)文件

文件移动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── b
│   ├── a
│   ├── b
│   └── c
└── c

2 directories, 3 files
gao@gao-VirtualBox:~/桌面/test$ mv b/a c/ #将一个文件移动到另一个目录下
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── b
│   ├── b
│   └── c
└── c
└── a

2 directories, 3 files

文件改名:mv到新文件名,即是改名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
gao@gao-VirtualBox:~/桌面/test$ mv c/ d/   #改目录名
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── b
│   ├── b
│   └── c
└── d
└── a

2 directories, 3 files

gao@gao-VirtualBox:~/桌面/test/d$ mv a d #改文件名
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── b
│   ├── b
│   └── c
└── d
└── d

2 directories, 3 files

文件覆盖:mv到已存在的文件中,即是覆盖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── b
│   ├── b
│   └── c
└── d
└── d

2 directories, 3 files
gao@gao-VirtualBox:~/桌面/test$ mv b/c b/b #用c覆盖b,并销毁c.
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── b
│   └── b
└── d
└── d

2 directories, 2 files

查看文件内容的命令

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
cat
该命令可以将文件内容显示到终端,由于终端是有缓存的,因此能显示的字节数也是受限制的。 如果文件太大数据就不能完全显示出来了,因此该命令适合查看比较小的文件内容。
$ cat 文件名

more
该命令比 cat 要高级一点,我们可以以翻屏的方式查看文件中的内容,使用方式如下:
$ more 文件名
# 快捷键
- 回车: 显示下一行
- 空格: 向下滚动一屏
- b: 返回上一屏
- q: 退出more

less
该命令和 more 命令差不多,我们可以以翻屏的方式查看文件中的内容,使用方式如下:
$ less 文件名
# 快捷键
- b: 向上翻页
- 空格: 向后翻页
- 回车: 显示下一行
- 上下键: 上下滚动
- q:退出

head
使用该命令可以查看文件头部的若干行信息,使用方式如下:
# 默认显示文件的前10行
$ head 文件名
# 指定显示头部的前多少行
$ head -行数 文件名

tail
# 默认显示文件的后10行
$ tail 文件名
# 指定显示尾部的最后多少行
$ tail -行数 文件名

链接的创建

软链接的创建 ln -s 源文件路径 软链接名称

1
2
3
4
5
6
7
8
gao@gao-VirtualBox:~/桌面/test/d$ ln -s d ee
gao@gao-VirtualBox:~/桌面/test/d$ ls
d ee
#注意点:最好使用绝对路径,防止文件移动之后链接失效
gao@gao-VirtualBox:~/桌面/test/d$ ls -l
总用量 4
-rw-rw-r-- 1 gao gao 10 6月 19 13:53 d
lrwxrwxrwx 1 gao gao 1 6月 19 14:57 ee -> d #此处是相对路径,直接ee指向d,若更改位置,则可能会找不到d文件

硬链接的创建 ln 源文件 硬链接的名字

1
2
3
4
5
6
gao@gao-VirtualBox:~/桌面/test/d$ ln d ff
gao@gao-VirtualBox:~/桌面/test/d$ ls -l
总用量 8
-rw-rw-r-- 2 gao gao 10 6月 19 13:53 d
lrwxrwxrwx 1 gao gao 1 6月 19 14:57 ee -> d
-rw-rw-r-- 2 gao gao 10 6月 19 13:53 ff

文件属性的设置

修改文件权限

文字设定法

指令形式:chmod who [+|-|=] mod 文件名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- who:
- u: user -> 文件所有者
- g: group -> 文件所属组用户
- o: other -> 其他
- a: all, 以上是三类人 u+g+o
- 对权限的操作:
+: 添加权限
-: 去除权限
=: 权限的覆盖
- mod: 权限
r: read, 读
w: write, 写
x: execute, 执行
-: 没有权限
1
2
3
4
5
6
7
gao@gao-VirtualBox:~/桌面/test/b$ ls -l
总用量 4
-rw-rw-r-- 1 gao gao 10 6月 19 13:54 c
**gao@gao-VirtualBox:~/桌面/test/b$ chmod a=rwx c**
gao@gao-VirtualBox:~/桌面/test/b$ ls -l
总用量 4
-rwxrwxrwx 1 gao gao 10 6月 19 13:54 c

数字设定法

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
# 语法格式: chmod [+|-|=] mod 文件名
- 对权限的操作:
+: 添加权限
-: 去除权限
=: 权限的覆盖, 等号可以不写
- mod: 权限描述, 所有权限都放开是 7
- 4: read, r
- 2: write, w
- 1: execute , x
- 0: 没有权限

# 分解: chmod 0567 a.txt

0 5 6 7
八进制 文件所有者 文件所属组用户 其他人
r + x r + w r+w+x
#0一般省略

######################### 举例 #########################
# 查看文件 c.txt 的权限
robin@OS:~/Linux$ ll c.txt
-rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 c.txt*

# 文件所有者去掉执行权限, 所属组用户去掉写权限, 其他人去掉读+写权限
robin@OS:~/Linux$ chmod -123 c.txt
robin@OS:~/Linux$ ll c.txt
-rw-r-xr-- 2 robin robin 2929 Apr 14 18:53 c.txt*

# 文件所有者添加执行权限, 所属组用户和其他人权限不变
robin@OS:~/Linux$ chmod +100 c.txt
robin@OS:~/Linux$ ll c.txt
-rwxr-xr-- 2 robin robin 2929 Apr 14 18:53 c.txt*

# 将文件所有者,文件所属组用户,其他人权限设置为读+写, 没有执行权限
robin@OS:~/Linux$ chmod 666 c.txt
robin@OS:~/Linux$ ll c.txt
-rw-rw-rw- 2 robin robin 2929 Apr 14 18:53 c.txt

修改文件所有者&&修改文件所属组

1
2
3
4
5
6
7
8
#只修改文件所有者
sudo chown 新的所有者 文件名

#修改所有者和所属组
sudo chown 新的所有者:新的组名 文件名

#只修改所属组
sudo chgrp 新的组 文件名

tree&&pwd&&touch&&which命令

tree直接执行,树形显示当前目录的文件

tree 目录,树形显示文件夹中的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
gao@gao-VirtualBox:~/桌面/test$ tree
.
├── b
│   └── c
└── d
├── d
├── ee -> d
├── ff
└── gg

2 directories, 5 files

**gao@gao-VirtualBox:~/桌面/test$ tree d/**
d/
├── d
├── ee -> d
├── ff
└── gg

0 directories, 4 files

pwd 得到当前的工作目录

1
2
gao@gao-VirtualBox:~/桌面/test$ pwd
/home/gao/桌面/test

which得到所要执行的命令所在的实际路径

1
2
3
4
5
6
gao@gao-VirtualBox:~/桌面/test$ which ls
/usr/bin/ls
gao@gao-VirtualBox:~/桌面/test$ which tree
/usr/bin/tree
gao@gao-VirtualBox:~/桌面/test$ which pwd
/usr/bin/pwd

重定向指令> >>

1
2
3
4
5
6
7
8
9
10
11
12
gao@gao-VirtualBox:~/桌面/test$ echo hello   #不用重定向,直接输出到终端
hello
gao@gao-VirtualBox:~/桌面/test$ echo hello > temp #采用>重定向,输出到新文件
gao@gao-VirtualBox:~/桌面/test$ cat temp
hello
gao@gao-VirtualBox:~/桌面/test$ echo world > temp #采用>重定向,覆盖旧文件
gao@gao-VirtualBox:~/桌面/test$ cat temp
world
gao@gao-VirtualBox:~/桌面/test$ echo fine >> temp #采用>>重定向,追加到到已有文件
gao@gao-VirtualBox:~/桌面/test$ cat temp
world
fine

感谢丙哥:https://subingwen.cn/linux/file-commands/