Linux文件与目录管理

8次阅读

共计 5478 个字符,预计需要花费 14 分钟才能阅读完成。

基础中的基础,趁着面试前复习过一遍。
基础命令
基本命令
pwd 命令作用:显示当前工作目录的名称选项:-p 显示链接的真实路径
cd 命令作用:切换当前工作目录常用:

cd 切换到根目录

cd – 返回到前一个工作目录

cd .. 切换工作目录到当前目录的上一级目录

cd /usr/local 切换工作目录到 /usr/local

ls 命令作用:显示目录与文件信息常用选项:

-a 显示所有文件,包括以. 开头的隐藏文件

-h 人性化显示容量信息

-l 长格式显示文档的详细信息

-u 显示文件或目录最后被访问的时间

-t 以修改时间排序,ls 默认按文件名称排序

-R 递归显示子目录

touch 命令作用:创建文件或者修改文件时间如:$ touch hello.txt 如果 hello.txt 文件不存在,则创建文件,如果存在,则修改 hello.txt 所有的时间为当前系统的时间。
mkdir 命令作用:创建目录选项:-p 创建多级目录如:$ mkdir -p /tmp/data/mysql 假如 /tmp/data 目录不存在,就会自动创建 /data 目录再创建 mysql 目录。
cp 命令作用:复制文件或者目录选项:

-r 递归,复制子文件与子目录(复制目录必加)

-a 复制时保留源文档的所有属性

rm 命令作用:删除文件或者目录选项:

-f 不提示,强制删除

-i 删除前,提示是否删除

-r 递归删除,删除目录以及目录下的所有内容

需谨慎:rm -rf *
mv 命令作用:移动或者重命名文件或目录如:

重命名文件 $ mv hello.txt hello.doc

移动文件到指定目录 $ mv hello.txt /usr/local/src

移动文件到指定目录并改名 $ mv hello.txt /usr/local/src/hello.doc

du 命令作用:计算文件或目录的大小 (容量) 选项:

-h 人性化显示容量信息

-a 查看所有目录以及文件的容量信息

-s 仅显示总容量

查看文件内容命令
cat 命令作用:查看文件内容选项:

-b 显示行号,空白行不显示行号

-n 显示行号,包含空白行

示例:
[root@moli_linux1 ~]$ cat -b hello.txt
1 one:hello world

2 two:hello world
[root@moli_linux1 ~]$ cat -n hello.txt
1 one:hello world
2
3 two:hello world

tac 命令作用:倒序查看文件内容(与 cat 相反)
[root@moli_linux1 ~]$ tac hello.txt
two:hello world

one:hello world

head 命令作用:查看文件头部内容,默认显示前 10 行。选项:

-c nK 显示文件前 nKB 的内容

-n 显示文件前 n 行内容

示例:head -5 /etc/passwd 显示 /etc/passwd 文件前 5 行内容。
tail 命令作用:查看文件尾部内容,默认显示末尾 10 行。选项:

-c nK 显示文件前 nKB 的内容

-n 显示文件前 n 行内容

示例:tail -5 /etc/passwd 显示 /etc/passwd 文件后 5 行内容。
less 命令作用:分页查看文件内容说明:按空格键查看下一页,q 键退出查看,ctrl b 向上翻页,ctrl f 向下翻页,g 跳到第一行,G 跳到最后一行。示例:less /var/log/jenkins/jenkins.log
more 命令作用:分页查看文件内容说明:按空格键查看下一页,q 键退出查看,ctrl b 向上翻页,ctrl f 向下翻页示例:`more /var/log/jenkins/jenkins.log`
wc 命令作用:显示文件行,单词与字节统计信息选项:

-c 显示文件字节统计信息

-l 显示文件行数统计信息

-w 显示文件单词统计信息

示例:
[root@moli_linux1 ~]$ wc hello.txt
3 4 33 hello.txt
[root@moli_linux1 ~]$ wc -c hello.txt
33 hello.txt
[root@moli_linux1 ~]$ wc -l hello.txt
3 hello.txt
[root@moli_linux1 ~]$ wc -w hello.txt
4 hello.txt
权限管理
Linux 下文件的权限一般包括读、写、可执行三种控制,可用字母或者数字表示。

字母表示为为 r、w、x

数字表示为 4、2、1

也就是 r =4,w=2,x=1。我们可以使用 ls - l 命令查看文件或者目录的权限。
[root@moli_linux1 ~]$ ls -l
总用量 8
drwxr-xr-x. 3 root root 23 6 月 6 2018 192.168.229
-rw——-. 1 root root 1538 5 月 19 2018 anaconda-ks.cfg
drwxr-xr-x. 3 root root 18 7 月 27 2018 git_data
-rw-r–r– 1 root root 33 3 月 5 13:37 hello.txt
drwxr-xr-x. 4 root root 33 7 月 4 2018 server
drwxr-xr-x 4 root root 68 10 月 2 15:48 shell-100
drwxr-xr-x 4 root root 67 11 月 16 21:29 test-find
其中第一列的第一个字符表示文件类型,之后的 9 个字符就是权限了,而第一列最后一个字符有的是一个点.,有的没有,这个点代表这个文件受 selinux 所限制。以上面的 drwxr-xr-x. 为例:

第一个字符是字母 d,表示文件类型是目录,常见的有:字母 l 代表链接文件、字母 b 或者 c 代表设备、字母 s 代表 socket 文件等。
第二个字符到第九个字符代表权限。三位一组分别为所有者 (a) 权限,所属组 (g) 权限、其他用户 (o) 权限。这个文件的权限为所有者权限可读可写可执行、所属组权限为可读可执行不可写、其他用户权限可执行不可读不可写。
最后一个字符是点,表示受 selinux 限制。

关于权限的表示可看下表:

数字
字母
文件
目录

4
r
查看文件内容
查看目录下的文件与目录名称

2
w
修改文件内容
在目录下增、删、改文件与目录名称

1
x
可执行,一般为程序或者脚本
可用 cd 命令进入目录

Linux 默认权限
文件默认权限

文件默认最大权限为 644 (rw-r–r–)

一般会给文件 644 权限

目录默认权限

目录默认最大权限为 755(rwxr-xr-x)

一般会给目录 755 权限

chmod 命令
作用:修改文件或者目录的权限格式:chmod [选项] 权限 文件或目录选项:-R 递归将权限应用于所有的子目录与子文件其中权限的表示可用数字或者字母, 也可以用 a(所有人)、u(代表所有者)、g(所属组)、o(其他用户)。示例:环境准备,test 目录下有 3 个文件和 1 个目录 test-1,子目录 test- 1 里有文件 hello.txt。各个文件目录权限如下:
[root@moli_linux1 test]$ ll -R
.:
总用量 0
-rw-r–r– 1 root root 0 3 月 7 14:43 1.txt
-rw-r–r– 1 root root 0 3 月 7 14:43 2.txt
-rw-r–r– 1 root root 0 3 月 7 14:43 3.txt
drwxr-xr-x 2 root root 23 3 月 7 14:44 test-1

./test-1:
总用量 0
-rw-r–r– 1 root root 0 3 月 7 14:44 hello.txt
[root@moli_linux1 test]$ tree
.
├── 1.txt
├── 2.txt
├── 3.txt
└── test-1
└── hello.txt

1 directory, 4 files
修改 1.txt 文件的权限为 600
$ chmod 600 1.txt 或者 $ chmod u=rwx,g-r,o-r 1.txt

对 1.txt 文件的所有人权限添加可执行权限
$ chmod a+x 1.txt 或者 $ chmod u+x,g+x,o+x 1.txt
对 test 目录下的所有文件设置所有人可读可写
$ chmod -R a=rw test
建议:修改权限能用数字就用数字 …
chown 命令
作用:修改文件或目录的所有者与所属组格式:chown [选项] [所有者]:[所属组] 文件名 / 目录名选项:-R 递归将权限应用于所有子目录与子文件使用 ls - l 命令查看文件或目录的时候,第三列和第四列就是文件或目录的所有者与所属组。
[root@moli_linux1 test]$ ls -l 1.txt
-rwx—— 1 root root 0 3 月 7 14:43 1.txt
比如上面 1.txt 文件的所有者是 root 用户,所属组是 root 组。
修改 1.txt 文件的所有者为 mori, 所属组为 mail
[root@moli_linux1 test]$ chown mori:mail 1.txt
[root@moli_linux1 test]$ ll 1.txt
-rwx—— 1 mori mail 0 3 月 7 14:43 1.txt
# 所有者与所属组已改变

umask
Linux 默认权限控制,也就是说 umask 的作用是设置用户创建文件或者目录时,这个文件或目录的默认权限。在 Linux 终端输入 umask 时,出现数字 0022 这个就是默认的 umask 值。
[root@moli_linux1 test]$ umask
0022
修改 umask 我们可以通过输入命令 $ umask 0032 修改系统默认的 umask 值
[root@moli_linux1 test]$ umask 0032
[root@moli_linux1 test]$ umask
0032

umask 反掩码计算当 umask 掩码是偶数的时候,默认权限 = 最大权限 -umask 值

文件最大权限是 666,因此创建文件的默认权限是 666-022=644

目录最大权限是 777,因此创建目录的默认权限是 777-022=755

当 umask 掩码是奇数的时候,计算文件的默认权限的时候,要在奇数位加 1 如:umask=032

对于文件:666-032=634, 然后奇数位 +1,634+010=644

对于目录:777-032=745,然后奇数位 +1,745+010=755

文件系统权限
设置文件系统权限命令 chattr

chattr +a(append) 只能追加
chattr +i 无敌,不能进行任何操作

查看文件系统权限命令 lsattr 示例:
[root@moli_linux1 test]$ ll 2.txt
-rw-r–r– 1 root root 0 3 月 7 14:43 2.txt

[root@moli_linux1 test]$ chattr +a 2.txt # 添加隐藏权限

[root@moli_linux1 test]$ echo “hello world” > 2.txt # 不允许重定向
-bash: 2.txt: 不允许的操作

[root@moli_linux1 test]$ echo “hello world” >> 2.txt # 允许追加重定向

[root@moli_linux1 test]$ mv 2.txt helloworld.txt # 不允许移动
mv: 无法将 ”2.txt” 移动至 ”helloworld.txt”: 不允许的操作

[root@moli_linux1 test]$ rm -f 2.txt # 不允许删除
rm: 无法删除 ”2.txt”: 不允许的操作

[root@moli_linux1 test]$ lsattr 2.txt #查看隐藏权限
—–a———- 2.txt

[root@moli_linux1 test]# chattr -a 2.txt # 去除隐藏权限

[root@moli_linux1 test]$ lsattr 2.txt # 没有隐藏权限
—————- 2.txt
[root@moli_linux1 test]$ rm -f 2.txt # 再次删除,成功

链接文件
Linux 中链接文件分为软连接和硬链接。软连接可以跨分区,但源文件不可删除。硬链接不可以跨分区,但可以将源文件删除。创建软硬链接使用命令 ln 创建软连接:ln -s 文件名 链接名创建硬链接:ln 文件名 链接名
软连接
软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制:

软链接有自己的文件属性及权限等;
可对不存在的文件或目录创建软链接;
软链接可交叉文件系统;即,可跨分区。
软链接可对文件或目录创建;
创建软链接时,链接计数 i_nlink 不会增加;
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

示例:
[root@moli_linux1 ~]$ ln -s /test/hello.txt /tmp/hi.txt #创建文件软连接
[root@moli_linux1 ~]$ ln -s /test/ /var/test #创建目录软连接
[root@moli_linux1 ~]$ rm /test/hello.txt;cat /tmp/hi.txt #删除源文件后,链接无法使用

硬链接
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:

文件有相同的 inode 及 data block;
只能对已存在的文件进行创建;
不能交叉文件系统进行硬链接的创建;
不能对目录进行创建,只可对文件创建;
删除一个硬链接文件并不影响其他有相同 inode 号的文件。

示例:
[root@moli_linux1 ~]$ ln /test/hello.txt /tmp/hi.txt #创建文件硬链接
[root@moli_linux1 ~]$ rm /test/hello.txt #删除源文件后依旧可用

先这样吧。如果错误,请指正,谢谢。溜了溜了,玩会游戏去了。2019-3-6

正文完
 0