1 Linux的文件权限与目录配置
了解文件的权限,首先先要知道文件的拥有者,文件对于用户主要有3个部分:文件拥有者
,用户组
,非用户组外其他人
1.1 Linux文件属性
查看文件的命令是ls
,此处查询使用ls -al
,其中a是展示所有文件,l是以列表是个显示所有文件。
gpu-server@gpu-server:~$ ls -al
total 352052
drwxr-xr-x 4 gpu-server gpu-server 4096 Jun 21 07:13 .
drwxr-xr-x 5 root root 4096 Jun 21 01:18 ..
-rw------- 1 gpu-server gpu-server 2664 Jun 21 06:41 .bash_history
-rw-r--r-- 1 gpu-server gpu-server 220 Apr 4 2018 .bash_logout
-rw-r--r-- 1 gpu-server gpu-server 3771 Apr 4 2018 .bashrc
drwx------ 2 gpu-server gpu-server 4096 Jun 20 14:24 .cache
drwx------ 3 gpu-server gpu-server 4096 Jun 20 14:24 .gnupg
-rw-rw-r-- 1 gpu-server gpu-server 360459673 Jun 20 14:31 NVIDIA-Linux-x86_64-515.48.07.run
-rw-r--r-- 1 gpu-server gpu-server 807 Apr 4 2018 .profile
-rw-r--r-- 1 gpu-server gpu-server 0 Jun 20 14:24 .sudo_as_admin_successful
-rw------- 1 root root 1466 Jun 21 01:18 .viminfo
-rw------- 1 gpu-server gpu-server 112 Jun 21 07:13 .Xauthority
[---1---] [2][---3----] [----4444] [---5---][----6------] [------7----------------]
[ 权限 ][连接][ 用户 ] [ 用户组 ] [文件大小][ 修改日期 ] [---文件名-----]
- 权限
- 第一个文件类型, d = 目 录 , − = 文 件 , l = 链 接 d=目录 , - = 文件 , l=链接 d=目录,−=文件,l=链接
- 接着是第一组权限,为用户权限 一组3个标志位,分别为
r
w
x
=
读
写
可
执
行
r w x=读 写 可执行
rwx=读写可执行(权限位置不可变),若不具备则是用
-
。 - 第二组权限是用户组的权限
- 第三组权限是非用户组成员的权限
Linux的文件权限有何作用
- 保护系统服务文件,例如/etc/shadow,一个账号管理文件,不让任何人读取,root除外
- 但可以发现它的权限是[----------],所有人不可读。
- 需要知道root用户不论权限,都默认读写
若一个文件是目录,
X
难道还代表可执行嘛?
- 此时,
X
代表是否可以进入目录。
1.2 如何修改文件权限
- chgrp:修改文件所属用户组
- chown:修改文件拥有者
- chmod:修改文件权限
1.2.1 修改所属用户组
若在root用户下,可执行:chgrp [用户组] [文件名]
root@gpu-server:/home/gpu-server# ls -l
total 352012
-rw-rw-r-- 1 gpu-server gpu-server 360459673 Jun 20 14:31 NVIDIA-Linux-x86_64-515.48.07.run
-rw-r--r-- 1 root users 0 Jun 21 11:37 tets.txt
若输入的用户名,不存在则会报错。 invalid group:[你输入的错误用户组]
1.2.2 修改文件所属用户
若在root用户下,可执行:chown -R [用户]:[用户组] [文件或者目录]
-R 参数是指递归,即若是目录,其下的文件也修改权限。
root@gpu-server:/home/gpu-server# chown root tets.txt
root@gpu-server:/home/gpu-server# ls -l
total 352012
-rw-rw-r-- 1 gpu-server gpu-server 360459673 Jun 20 14:31 NVIDIA-Linux-x86_64-515.48.07.run
-rw-r--r-- 1 root users 0 Jun 21 11:37 tets.txt
root@gpu-server:/home/gpu-server# chown root:root tets.txt
root@gpu-server:/home/gpu-server# ls -l
total 352012
-rw-rw-r-- 1 gpu-server gpu-server 360459673 Jun 20 14:31 NVIDIA-Linux-x86_64-515.48.07.run
-rw-r--r-- 1 root root 0 Jun 21 11:37 tets.txt
1.2.3 修改文件权限
上文提到,文件的权限有3组,分别是用户,用户组,非用户组其他人。在修改文件权限时,linux用数字表示文件的权限,权限与数字对应关系如下:
r
=
4
,
w
=
2
,
x
=
1
r=4,w=2,x=1
r=4,w=2,x=1
则若一个文件的所属用户权限是:rwx则其权限数字是
4
+
2
+
1
=
7
4+2+1=7
4+2+1=7,即7是最高权限
修改文件权限命令:chmod -R xyz 文件或者目录
xyz则是用户,用户组,非用户组成员的权限数字。
其实还有一种符号的方法,太复杂了不学了。
1.3 文件目录配置
早期linux为了文件目录方便管理,推出了如下表四种交互作用的形态:
可分享 | 不可分享 | |
---|---|---|
不变 | /usr(软件存放处) | /etc(配置文件) |
/opt(第三方辅助软件) | /boot(启动内核文件) | |
可变 | /var/mail(用户邮箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | var/lock(程序相关) |
这4类具体是什么?
- 可分享:可以给其他系统挂载继而使用的目录
- 不可以分享:与自己系统运行息息相关的文件等
- 不变:数据不会经常变动
- 可变:经常修改的
1.3.1 根目录(/)的意义与内容
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来,同时根目录也与启动、还原、系统修复等操作有关 由于系统启动时需要特定的启动软件、内核文件、启动所需 程序、函数库等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行 因为根目录这么重要,所以希望根目录不要放在非常大的分区内,因为越大的 分区你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会。
目录 | 存放的文件内容 |
---|---|
/opt | 第三方辅助软件 |
/run | 系统启动后产生的各项信息 |
/sbin | 一些系统环境的命令,只能root使用,比如:启动,修复,还原系统等等,如有:fdisk,fsck,ifconfig,mkfs |
/srv | 网络服务启动后产生的文件 |
/tmp | 执行程序展示存放的位置,任何人都能够访问修改,一般是不重要的数据 |
/usr | 看后一节 |
/var | |
/home | 系统默认的用户目录,一个用户将会在此目录下有个子目录,目录名为用户名。 |
/lib | 用户存放二进制文件库 |
/root | root用户的home目录,没有挂载到/home |
1.3.2 /usr的意义与内容
此目录下的文件有可分享和不可分享,这个目录下类比windows的默认下载地址c://windows//Program Files
目录 | 存放的文件内容 |
---|---|
/usr/bin/ | 用户的常规可执行命令都 |
/usr/lib/ | 就是/lib,它是链接到这里的 |
/usr/local/ | 系统管理员下载的一些软件存放地址,例如cuda的默认存放地址也是这里 |
/usr/sbin/ | 非系统正常运行的系统命令,/sbin也是链接到此处 |
/usr/games | 游戏相关的数据放置处 |
/usr/includes | c与c++头文件存放的位置 |
/usr/libexec | 不会被用户执行的文件和脚本 |
/usr/src | 源代码存放处,内核源代码就是在/usr/src/Linux下 |
1.3.3 /var的意义与内容
此目录是系统运行后慢慢会积累的内容,其中包括一些:cache、log file 、 以及一些产生的文件如数据库文件
目录 | 应该放置的文件内容 |
---|---|
/var/cache/ | 应用程序本身运行过程中会产生的一些缓存 |
/var/lib/ | 程序执行过程中,需要用到的配置文件,如:/var/lib/mysql |
/var/lock | 设备锁的相关文件目录 |
/var/log | 日志文件 |
/var/run | 程序和服务启动后,会将他们的PID放到这个目录下面 |
/var/spool | 这个目录会放置一些队列数据,就是排队等到其他程序使用的数据 |
其中 ~表示当前用户的home目录
.表示当前级目录
…表示上一级目录
-表示前一个工作区的目录
1.3.4 目录与文件的基本命令
-
cd:切换目录
-
pwd:显示当前目录
-
mkdir:创建一个新目录
-
rmdir:删除一个目录
-
cp:复制
-
[ root@study ~]# cp [ adfilprsu ]源文件( source 目标文件 destination) [ root@study ~]# cp [options] sourcel source2 source3 ... directory 选项与参数 - a 相当于 dr -- preserve=all 的意思,至于 dr 请参考下列说明(常用) - d 若源文件为链接文件的属性 link il ,则复和 链接文件 性而非文件本身 -f 为强制 force 的意思,若目标文件已经存在且无法 则删除后再尝试一次 - i 若目标文件 destination 已经存在时,在覆盖时会先询问操作的进行(常用), - 1 进行硬链接 hard link 的链接文件建立,而非复制文件本身 - p 连同文件的属性 权限 用户 时间 一起复制过去,而 默认属性 备份常用 ); - r 递归复制 用于目录的复制操作(常用) - s 复制成为符号链接文件( lbolic link ),亦即“快捷方式”文件 - u : destination source 旧才更新 destination estination 不存在的情况下才复制; -- preserve=all 除了 的权限相关参数外,还加入 SELi 的属性, li xattr 制, 最后需要注意的是,如果源文件有两个以上,则最后一个目标文件一定要是“目录”才行.
-
-
rm:删除
-
[ root@study ~]# rm 文件或者目录 选项与参数 - r 递归删除 用于目录的删除操作(常用) -f 为强制忽略不存在的的文件 -T 交互模式,询问是否操作
-
-
mv:移动文件与目录、重命名
[ root@study ~]# mv [-fiu] source destination
[ root@study ~]# mv [options] sourcel source2 source3 ... directory
选项与参数
-f 为强制,若已存在,直接覆盖
-u 若目标文件已经存在,会比新,新才替换
-i 若目标文件已经存在,就会询问是否覆盖
-
文件查看命令:
-
cat:从第一行显示文件内容
-
tac:从最后一行开始显示文件内容
-
nl:显示同时输出行号
nl [-bnw] 文件
-
-b 有两种方式
a 不论是否空行,输出行号
t 与上相反,(默认)
使用方式:nl -b a 文件
-n 有三种方式
ln 行号在屏幕最左边
rn行号在自己栏位里的右边,不加0
rz行号在自己栏位里的右边,加0
-w 行号栏位占用的字符数
-
-
more:一页一页显示文件内容
空格:向下翻页
pageup: 向上翻页
pagedown:向下翻页
/字符串:查找(向上)
?字符串:查找(向上)
n:重复前一个查找(在/或者?后使用)
N:方向的重复前一个查找
g:前进到这个数据第一行
G:前进到这个数据最后一行
q:离开
-
less:与more类似,但是可以往前翻页
功能按键和more一样
-
head:只看前面几行
-
tail:只看后面几行
-
od:以二进制方式读取文件内容
-
-
umask:查看文件创建的默认权限数字
?字符串:查找(向上)
n:重复前一个查找(在/或者?后使用)
N:方向的重复前一个查找
g:前进到这个数据第一行
G:前进到这个数据最后一行
q:离开
-
less:与more类似,但是可以往前翻页
功能按键和more一样
-
head:只看前面几行
-
tail:只看后面几行
-
od:以二进制方式读取文件内容
-
-
umask:查看文件创建的默认权限数字