Skip to content

Commit 63ccb72

Browse files
committed
更新
更新
1 parent c51a35b commit 63ccb72

6 files changed

Lines changed: 372 additions & 5 deletions

File tree

linux/Linux文件权限.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
##### 第四列:表示这个文件所属的群组
1818
##### 第五列:表示文件大小
1919
##### 第六列:表示文件创建或修改日期
20-
##### 第七列:表示文件名
20+
##### 第七列:表示文件名(.开头的为隐藏文件 ls -a查看)
2121
## 2.改变文件属性与权限
2222
* chgrp:改变文件所属群组,change group
2323
* chown:改变文件拥有者,change owner

linux/Linux文件目录管理.md

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
1. [目录相关操作(cd, pwd, mkdir, rmdir)](#1)
2+
2. [文件与目录管理(ls, cp, rm, mv, dirname, basename)](#2)
3+
3. [查看文件内容(cat, less, more, head, tail)](#3)
4+
4. [指令与文件的查找(which, locate, find)](#4)
5+
6+
## <span id="1">1.目录相关操作(cd, pwd, mkdir, rmdir)</span>
7+
### cd:切换工作目录(change directory)
8+
```python
9+
. : 当前目录
10+
.. : 上一层目录
11+
- : 前一个工作目录
12+
~ : “目前使用者身份”所在的主文件夹
13+
```
14+
15+
### pwd:显示当前所在的目录(print working directory)
16+
* -P: 显示出真实的路径,而不是使用链接(link)路径。
17+
18+
```python
19+
[root@iZ8vb6ughzbdqkfd58dowoZ mail]# pwd
20+
/var/mail
21+
[root@iZ8vb6ughzbdqkfd58dowoZ mail]# pwd -P
22+
/var/spool/mail
23+
```
24+
25+
### mkdir:创建新目录
26+
-p:默认不加参数只能一层一层创建目录,加了-p可以直接递归创建
27+
28+
```python
29+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# mkdir d1
30+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ll
31+
total 4
32+
drwxr-xr-x 2 root root 4096 Feb 12 17:42 d1
33+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# mkdir d2/d3/d4
34+
mkdir: cannot create directory ‘d2/d3/d4’: No such file or directory
35+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# mkdir -p d2/d3/d4
36+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ls
37+
d1 d2
38+
```
39+
40+
### rmdir:删除空目录
41+
rmdir只能删除空目录,被删除的目录中肯定不能存在其他目录或者文件。
42+
-p: 连同上层的空目录也一起删除
43+
44+
```python
45+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ls
46+
d1 d2
47+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# rmdir d1
48+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ls
49+
d2
50+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# rmdir d2
51+
rmdir: failed to remove ‘d2’: Directory not empty
52+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# rmdir -p d2
53+
rmdir: failed to remove ‘d2’: Directory not empty
54+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# rmdir -p d2/d3/d4/
55+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ls
56+
```
57+
58+
## <span id="2">2.文件与目录管理(ls, cp, rm, mv, dirname, basename)</span>
59+
**包括查看属性,复制、删除文件,移动文件或目录。**
60+
### ls:查看
61+
```python
62+
-a : 查看全部文件,包括隐藏文件
63+
-h : 将文件大小以易读的方式显示出来
64+
-l : 显示文件的属性与权限等数据
65+
```
66+
67+
### cp:复制文件或目录
68+
69+
```python
70+
# 复制文件
71+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cp ~/test.py test
72+
cp: overwrite ‘test/test.py’?
73+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# ls
74+
75+
# 复制整个目录到另一个目录
76+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cp -r ~/py_test/ test
77+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# ls test/
78+
py_test test.py
79+
80+
# 复制目录下所有文件到另一个目录下
81+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# cp -r ~/py_test/* test
82+
cp: overwrite ‘test/test.py’? y
83+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# ls test/
84+
log nohup.out test.py
85+
```
86+
87+
### rm: 移除文件或目录
88+
```python
89+
-f:force,强制删除
90+
-i:删除之前会询问
91+
-r:递归删除
92+
```
93+
94+
### mv:移动文件或目录
95+
```python
96+
# 重命名
97+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ll
98+
total 20
99+
-rw------- 1 root root 12980 Feb 12 18:20 nohup.out
100+
-rw-r--r-- 1 root root 1984 Feb 12 18:20 test.py
101+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# mv test.py test.py.bak
102+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ll
103+
total 20
104+
-rw------- 1 root root 12980 Feb 12 18:20 nohup.out
105+
-rw-r--r-- 1 root root 1984 Feb 12 18:20 test.py.bak
106+
107+
# 移动文件
108+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# mv ~/test.py ~/test
109+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ll
110+
total 76
111+
-rw------- 1 root root 12980 Feb 12 18:20 nohup.out
112+
-rw-r--r-- 1 root root 55288 Jan 6 11:55 test.py
113+
-rw-r--r-- 1 root root 1984 Feb 12 18:20 test.py.bak
114+
```
115+
### 获取路径的文件名称和目录名
116+
```python
117+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# dirname ~/test/nohup.out
118+
/root/test
119+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# basename ~/test/nohup.out
120+
nohup.out
121+
```
122+
123+
## <span id="3">3.查看文件内容(cat, less, more, head, tail)</span>
124+
* cat: 从第一行开始显示文件内容,文件行数比较少时适用,-n参数显示行号。
125+
* more: 一页一页显示文件内容。
126+
* less: 和more类似,less可以使用方向键上下移动,加载速度比more快。
127+
* head:只看头几行,head -n 20 filename,只看前几行。
128+
* tail: 只看后几行,tail -f filename持续输出。
129+
130+
### more的指令
131+
* Enter: 下翻一行
132+
* 空格键:下翻一页
133+
* b: 向上翻页
134+
* q: 退出
135+
136+
### less的指令
137+
* Enter: 下翻一行
138+
* 空格键:下翻一页
139+
* b: 向上翻页
140+
* q: 退出
141+
* /字符串:向下查找字符串
142+
* n: 重复前一个查找的字符串
143+
* N: 反向查找
144+
145+
### 文件的时间
146+
* modification time (mtime):文件内容数据变化时,会更新这个时间,ll显示出来的就是这个时间。
147+
* status time (ctime):文件的权限与属性发生变化时会更新。
148+
* access time (atime):文件内容被取用时更新,如cat读取文件内容。
149+
150+
### 查看文件类型
151+
```python
152+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# file test.py
153+
test.py: Python script, UTF-8 Unicode text executable
154+
```
155+
156+
## <span id="4">4.指令与文件的查找(which, locate, find)</span>
157+
### which 寻找可执行文件
158+
```python
159+
# -a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
160+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# which python
161+
/usr/bin/python
162+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# which -a python
163+
/usr/bin/python
164+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# which -a ls
165+
alias ls='ls --color=auto'
166+
/usr/bin/ls
167+
```
168+
### whereis(从一些特定的目录中查找文件文件名)
169+
whereis主要是针对 /bin /sbin 下面的可执行文件,以及 /usr/share/man 下面的 man page 文
170+
件,跟几个比较特定的目录来查找文件。
171+
* whereis -l: 查看whereis查找的是哪些目录
172+
173+
### locate(利用数据库来查找)
174+
locate 寻找的数据是由“已创建的数据库 /var/lib/mlocate/” 里面的数据所
175+
搜寻到的,所以不用直接在去硬盘当中存取数据.
176+
177+
数据库不是实时更新的,如果需要手动更新,可以用updatedb指令。
178+
179+
```python
180+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# locate regular_express.txt
181+
/root/regular_express.txt
182+
```
183+
184+
### find(通过硬盘查找,速度较慢)
185+
```python
186+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# find /root -name rootfile.txt
187+
/root/rootfile.txt
188+
```

linux/Linux文件系统.md

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
## 1.索引式文件系统
2+
操作系统的文件数据,除了包含文件的实际内容之外,还包含一些文件的属性,如文件的权限、拥有者、时间等。Linux文件系统通常将
3+
这两部分数据存放在不同的区块,权限和属性存放在inode中,实际数据存放在data block中,另外还有一个superblock会记录整个文件系统的整体信息。
4+
* superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息。
5+
* inode:记录文件的属性,一个文件占用一个inode,同时记录此文件数据所在的block号码。
6+
* block:记录文件的数据内容,文件太大时,会占用多个block。
7+
8+
每个inode与block都有编号,每个文件占用一个inode,inode中记录有文件数据放置的block号码,所以,如果找到inode,就能够
9+
找到block,进而获取到该文件的实际数据内容。
10+
11+
如图,假设文件的inode序号是4,记录的文件block号码分别是2,7,13,15,此时操
12+
作系统就能够据此来排列磁盘的读取顺序,可以一口气将四个block内容读出来。
13+
![](../pic/linux/fs1.png)
14+
15+
## 2.Liunx的Ext2文件系统
16+
标准的Linux文件系统Ext2就是使用inode为基础的文件系统。second extended filesystem,第二代扩展文件系统。
17+
18+
文件系统的inode与block一开始就规划好了,除非重新格式化。如果文件系统比较大,inode与block的数量比较庞大,如果放置在一起不易管理。
19+
20+
所以Ext2文件系统在格式化的时候是区分为多个区块群组(block group),每个区块群组都有独立的superblock,inode,block。
21+
22+
![](../pic/linux/fs2.png)
23+
24+
### data block(数据区块)
25+
data block是存放文件数据的地方,block的大小有1k,2k,4k三种,在格式化的时候block大小与号码都已经固定,以方便inode的记录。
26+
* block的大小与数量在格式化完就不能再改变
27+
* 每个block内只能存放一个文件的数据
28+
* 如果文件大于block的大小,则一个文件占用多个block
29+
* 如果文件大小小于block,则该block的剩余容量不能够在使用(磁盘空间被浪费)
30+
31+
### Inode Table
32+
inode的大小和数量也是在格式化的时候就已经固定,
33+
* 每个inode大小固定128bytes(ext4可设置256bytes)
34+
* 每个文件只会占用一个inode
35+
* 文件系统能创建的文件个数与inode的数量有关
36+
* 系统读取文件时需要先找到inode,分析inode所记录的权限与所有者是否符合,若符合才会读取block内容
37+
38+
inode中记录的有:
39+
1. 文件的权限(rwx)
40+
2. 文件的拥有者、群组
41+
3. 文件的容量
42+
4. 文件的创建或状态改变时间(ctime)
43+
5. 文件的读取时间(atime)
44+
6. 文件的修改时间(mtime)
45+
7. 文件真正内容的指向等。
46+
47+
**一个inode只有128bytes,记录一个block需要4bytes,那一个inode如何记录大文件所有的block号码?**
48+
49+
文件系统将inode记录block号码的区域定义为12个直接,一个间接,一个双间接,一个三间接。
50+
直接指向就是inode记录的block号码直接可以获取文件的数据内容。
51+
间接指向就是再拿一个block来记录block号码的记录。inode指向bolck,该block中记录的block号码指向的才是实际文件数据。
52+
以此类推,双间接,三间接是同样道理。
53+
54+
### superblock
55+
superblock是非常重要的,因为文件系统的基本信息都在这里记录。
56+
* 记录block与inode的总量
57+
* 未使用与已使用的inode/block数量
58+
* block与inode的大小
59+
* filesystem的挂载时间、最近一次写入数据的时间等文件系统的相关信息
60+
* 一个valid bit数值,已挂载为0,未挂载为1
61+
62+
### 文件系统描述
63+
描述每个block group的开始与结束的block号码。
64+
65+
### 区块对应表
66+
新增文件的时候,需要用到block,通过区块对应表就知道那个block是空的,系统可以通过区块对应表,快速找到可使用的空间来处置文件。
67+
68+
### inode对照表
69+
与区块对应表一样,inode对照表记录的是已使用与未使用的inode号码
70+
71+
#### 目录
72+
在linux下创建一个目录的时候,系统会分配一个inode与至少一个block给该目录,inode记录该文件夹的相关权限与属性,以及分配到的block号码;
73+
block记录的则是在这个目录下的文件名与该文件名占用的inode号码。
74+
75+
#### 创建文件
76+
1. 先确定使用者对新增的文件的目录是否具有w和x的权限,有的话才可以新增
77+
2. 根据inode对照表找到没有使用的inode号码,将新文件的权限和属性写入
78+
3. 根据block对照表找到没有使用的block号码,将实际数据写入到block中,并且更新inode中的block指向。
79+
4. 更新inode对照表与block对照表,更新superblock的内容。
80+
81+
#### 挂载
82+
每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目
83+
录树才能被我们使用。 将文件系统与目录树结合的动作称为“挂载”。挂载点一定是目录,该目录为进入该文件系统的入口。
84+
85+
## 3.文件系统的简单操作
86+
* df:列出文件系统的整体磁盘使用量
87+
* du:评估文件系统的磁盘使用量
88+
89+
#### df -h 将容量结果以易读的容量格式显示出来
90+
```python
91+
Filesystem Size Used Avail Use% Mounted on
92+
/dev/vda1 40G 4.0G 34G 11% /
93+
devtmpfs 486M 0 486M 0% /dev
94+
tmpfs 496M 0 496M 0% /dev/shm
95+
96+
# Filesystem:代表该文件系统是在哪个 partition ,所以列出设备名称
97+
# Mounted on:磁盘挂载的目录,挂载点。
98+
```
99+
100+
#### df -ih 将目前各个 partition 当中可用的 inode 数量列出
101+
```python
102+
[root@iZ8vb6ughzbdqkfd58dowoZ ~]# df -ih
103+
Filesystem Inodes IUsed IFree IUse% Mounted on
104+
/dev/vda1 2.5M 101K 2.5M 4% /
105+
devtmpfs 122K 324 122K 1% /dev
106+
tmpfs 124K 1 124K 1% /dev/shm
107+
tmpfs 124K 387 124K 1% /run
108+
tmpfs 124K 16 124K 1% /sys/fs/cgroup
109+
tmpfs 124K 1 124K 1% /run/user/0
110+
```
111+
112+
#### du:列出当前目录下所有文件的大小
113+
直接输入du不加任何参数, du会分析“目前所在目录”的文件与目录所占用的磁盘空间,
114+
但实际显示仅包含目录容量,不包含文件的大小。
115+
* du -a: 将文件的容量也列出来
116+
* du -h:以人们较易读的容量格式 (G/M) 显示
117+
* du -s:列出总量而已,而不列出每个各别的目录占用容量
118+
* du -S:不包括子目录下的总计,与 -s 有点差别
119+
120+
```python
121+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ll
122+
total 28
123+
drwxr-xr-x 2 root root 4096 Oct 26 09:47 log
124+
-rw------- 1 root root 12980 Oct 26 13:51 nohup.out
125+
-rw-r--r-- 1 root root 1984 Oct 26 10:02 test.py
126+
-rw-r--r-- 1 root root 1984 Feb 12 18:20 test.py.bak
127+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# du
128+
20 ./log
129+
48 .
130+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# du -a
131+
4 ./test.py.bak
132+
4 ./test.py
133+
16 ./nohup.out
134+
16 ./log/test
135+
20 ./log
136+
48 .
137+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# du -h
138+
20K ./log
139+
48K .
140+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# du -ah
141+
4.0K ./test.py.bak
142+
4.0K ./test.py
143+
16K ./nohup.out
144+
16K ./log/test
145+
20K ./log
146+
48K .
147+
```
148+
149+
## 4.实体链接与符号链接
150+
### hard link(实体链接、硬链接)
151+
**目录下记录的是每个文件的文件名,以及文件对应的inode号码,多个文件名对应同一个inode时候,就是hard link。**
152+
153+
* hard link生成的文件inode与源文件的inode相同。
154+
* hard link不能跨filesystem
155+
* hard link不能link目录
156+
* 安全,删除任意一个链接,只要文件的inode引用不为0,文件就还存在
157+
158+
```python
159+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ln /etc/crontab
160+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ll
161+
total 4
162+
-rw-r--r--. 2 root root 451 Jun 10 2014 crontab
163+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ll -i /etc/crontab /root/test/crontab
164+
394377 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
165+
394377 -rw-r--r--. 2 root root 451 Jun 10 2014 /root/test/crontab
166+
```
167+
168+
### symbolic link(符号链接)
169+
符号链接类似windows的快捷方式,符号链接记录的是源文件的绝对路径,当访问符号链接时候,其实访问的是源文件。如果源文件不存在,符号链接就会报错。
170+
171+
* 符号链接文件有自己的inode与block
172+
* 符号链接文件的block记录的是源文件的真实路径
173+
174+
```python
175+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ln -s /etc/crontab /root/test/crontab2
176+
[root@iZ8vb6ughzbdqkfd58dowoZ test]# ll -i /etc/crontab /root/test/crontab2
177+
394377 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
178+
1184788 lrwxrwxrwx 1 root root 12 Feb 16 21:32 /root/test/crontab2 -> /etc/crontab
179+
```

linux/main.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
8. [vim编辑器与shell命令脚本](vim编辑器与shell命令脚本.md)
1010
9. [shell语法](shell语法.md)
1111

12-
### Linux文件权限与目录配置
13-
6. [Linux文件权限概念](Linux文件权限.md)
14-
### Linux文件与命令管理
15-
7. [Linux文件权限概念](Linux文件权限.md)
12+
## Linux基础
13+
6. [Linux文件属性与权限](Linux文件权限.md)
14+
7. [Linux文件与目录管理](Linux文件目录管理.md)
15+
8. [Linux文件系统(索引式文件系统)](Linux文件系统.md)

pic/linux/fs1.png

275 KB
Loading

pic/linux/fs2.png

13.1 KB
Loading

0 commit comments

Comments
 (0)