文章目录
文件权限
linux文件属性
dr-xr-x---. ( d > 目录
-r-xr-x---. ( - > 文件
lr-xr-x---. ( l > 连接文件
br-xr-x---. ( b > 区块(block) 设备文件,如硬盘软盘
cr-xr-x---. ( c > 字符(character)设备文件,如鼠标键盘
root不受系统权限限制,即使文件权限是[----------],root都可以读写。
修改文件属主/属组权限(chgrp/chown/chmod)
chgrp (change group)
- 语法: chgrp [-R] groupname dirname/filename
- -R ( 递归更改文件属性,即更改包括该目录下的所有子文件属性)
chown (change owner)
- chown [-R] owner dir/filename (只修改owner)
- 或者:chown [-R] owner:group dir/filename (不仅修改owner,同时修改group)
- chown [-R] .group dir/filename (这样写也行)
- chown [-R] .group dir/filename ( . 的前面不写owner,这样可以单纯修改group)
chmod (修改权限)
- 方式一:chmod [-R] xyz dir/filename
- rwx权限的数字对照 —> r : 4 ,w : 2 ,x : 1
- 方式二,例:chmod u=rwx,g=rw,o=r dir/filename
- u = user , g = group , o = other , a = all
- +(加入),-(移除),=(设置)
- chmod g+w,o-x dir\filename
- 注意 ‘ u=r,g=r,o=r ’ 中间没有任何空格
权限对文件的意义
r (read): 可读取文件内容
w (write): 可以编辑、新增、修改文件内容,不包括删除该文件
x (eXecute): 该文件具有被系统执行的权限
权限对目录的意义(重要)
r (read contents in directory): 可以读取目录结构列表,只有当目录具有 [ r ] 权限的时候,才可以使用 [ ls ] 将该目录下的文件列出。
w (modify contents of directory): 可以改动该目录结构列表。
- 建立新的文件与目录
- 删除已经存在的文件与目录
- 将已存在的文件或目录重命名
- 移动该目录内的文件、子目录位置
x (access directory): 代表用户能否进入该目录成为工作目录,工作目录指当前目录;若某用户对一个目录的权限是 [ rw- ],那么他仅可以使用 [ ls ] 读取该目录里面的内容,但不能用 [ cd ] 切换到这个目录,也就无法执行该目录下的任何命令,即使具有 [ w ] 权限。
注意:要开放目录给任何人浏览,应该至少给与 r、x 的权限,但 w 权限不可随便赋予。
目录与路径
绝对路径:一定由根目录/写起,如:/etc/group
相对路径:不是由/写起,如:cd …/ 切换到上一层目录
对于文件名的正确性来说,绝对路径的正确优于相对路径,特别是在写程序来管理系统时,务必使用绝对路径。
目录的相关操作(cd/pwd/mkdir/rmdir)
. | 代表此层目录 |
---|---|
. . | 代表上层目录 |
- | 代表前一个工作目录 |
~ | 代表当前用户所在的家目录 |
~account | 代表account这个用户的家目录 |
cd (change directory)
下例中假设已经用 su - 切换成root身份
- cd ~account(进入account用户的家目录,即 /home/account)
- cd ~ (回到自己的家目录,即 /root)
- cd (没有加任何路径,表示回到自己的家目录 /root)
- cd . . (切换到当前目录的上层目录,即根目录 /)
- cd - (回到上一次操作的目录,即 /root)
提醒:Linux的默认命令行( bash shell )具有文件补齐功能,可以利用 [Tab]键来自动补全路径,这样可以避免写路径时输入错误。
pwd (print working directory)
- [ -P(大写) ] 可选参数,显示出真正的路径,而非链接路径
mkdir (make directory)
- [ -p ] 递归创建,即一层一层的创建,目录下面还有子目录
- mkdir test/test1/test2/test3 (创建失败)
- madir -p test/test1/test2/test3 (创建成功)
- [ -m ] 设置文件权限
- mkdir -m 611 testing (创建了一个权限是d rw- r-- r- - 的目录testing)
- 若不使用 -m 参数,则会使用默认权限umask
rmdir (remove directory)(删除“空”目录)
- [ -p ] 连同上层‘空的’目录也一起删除
- rmdir -p test/test1/test2/test3
执行路径的变量: $PATH
- echo $PATH (显示当前用户的 PATH)
- PATH="${PATH}:dir/filename" (添加PATH)
- 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同
- 使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查找PATH来的正确
文件与目录相关操作(ls/cp/rm/mv)
ls (文件与目录查看)
- ls [ options ] [ dir/filenam ]
- -a <全部文件,连同隐藏文件(.开头的文件)一起列出>
- -d <仅列出目录本身,而不是列出目录内的文件>
- -l <详细信息显示,包含文件的属性与权限等>
- –full-time <以完整时间模式输出,full前面是两个->
- 例:ls -al --full-time /home
cp (除复制文件外,还可以建立链接文件和复制整个目录)
- cp [ options ] 源文件(source) 目标文件(destination)
- -a <连同文件所有的特性一起复制>
- -i <若destination已经存在,在覆盖时会先询问是否进行操作>
- -p <连同文件的属性一起复制过去,而非使用默认属性>
- -r <递归复制,用于目录的复制>
- -d <若源文件为链接文件属性(link file),则复制链接文件属性而非文件本身>
- -s <复制称为符号链接文件(symbolic link),即’快捷方式’文件>
- -l <进行硬链接(hard link)的链接文件建立,而非复制文件本身>
在复制时需要考虑的问题:
- 是否需要完整的保留源文件的信息?
- 源文件是否为符号链接文件?
- 源文件是否为特殊文件?如FIFO、socket等
- 源文件是否为目录?
rm (删除文件或目录)
- rm [ options ] dir/filename
- -f <f是force的意思,忽略不存在的文件,不会出现警告信息>
- -i <询问是否操作>
- -r <递归删除,常用于目录的删除>
mv (移动文件与目录,或重命名)
- mv [ options ] source destination
- mv [ options ] source1 source2 source3… directory
- -f <force,如果目标文件已经存在,不会询问而直接覆盖>
- -i <若目标文件已经存在,则询问是否覆盖>
- -u <若目标文件已经存在,且source比较新,才会更新>
文件内容查看(cat/more/less/head/tail)
cat (concatenate) (一次性全部读取)
- cat [ options ] file
- -A <显示包括特殊字符(空白符、换行符等)所有的内容>
- -n <打印行号,连同空白行也有行号>
- -b <d打印行号,不包括空白行>
more (一页一页读取)
- 空格键 >下翻一页
- 回车键 >下翻一行
- b >回翻 (此操作只对文件有用,对管道无用)
- q >离开
less (一页一页读取)
- 空格键 >下翻一页
- pagedown \ pageup
- /字符串 >向下查找字符串
- ?字符串 >向上查找字符串
- n >重复前一个查找
- g >跳到第一行
- G >跳到最后一行
- q >离开
head (读取前面几行)
- head [ -n number ] file
tail (读取后面几行)
- tail [ -n number ] file
修改文件时间或创建新文件(touch)
文件的三个时间
- 修改时间 【modification time,mtime】(内容数据变更,mtime更新)
- 状态时间 【status time,ctime】(权限属性变更,ctime更新)
- 读取时间 【access time,atime】(文件内容被读取是,atime更新)
在默认情况下,ls 显示出来的是文件的 mtime,可以同过命令查看其它时间
- ls -l --time=atime/ctime dir/file
touch
- touch [ options ] file
- -a <仅修改atime,若文件不存在,创建新文件>
- -c <仅修改ctime,若文件不存在,不会创建新文件,也不报信息>
- -d <接自定义的时间而不用当前时间,如 -d “7 days ago” file>
- -m <仅修改mtime,若文件不存在,创建新文件>
- -t <接自定义的时间,格式为[YYYYMMDDhhmm],如 -t 202008102215 file>
文件默认权限(umask)
umask:指定当前用户在建立文件或目录是的权限默认值
查看umask:
[用户名@主机名 工作目录]$ umask
0002 #普通用户umask
# 四位数的第一位代表特殊权限,后三位代表 u g o 所对应的权限
[用户名@主机名 工作目录]$ umask -S #S大写
u=rwx,g=rwx,o=rw #002代表的权限
[root@主机名 ~]# umask
0022 #管理员umask,022代表u=rwx,g=rx,o=rx
在默认权限的属性上,file 和 directory 是不同的:
- 若用户建立的是文件,则默认没有 x 权限,即默认 -rw-rw-rw-
- 若用户建立的是目录,则默认所有权限开放,即默认 drwxrwxrwx
注意:umask的数字指的是默认需要减掉的权限,因此
- 建立文件时:(-rw-rw-rw-)-(002)=(-rw-rw-r–)
- 建立目录时:(drwxrwxrwx)-(002)=(drwxrwxr-x)
设置 umask :
[用户名@主机名 工作目录]$ umask 044
[用户名@主机名 工作目录]$ umask
0044 #设置成功
文件特殊权限(SUID/SGID/SBIT)
文件权限除了 rwx 之外,还包括 特殊权限 s 和 t ,这两个特殊权限与系统账号及系统的进程管理相关。
Set UID:当 s 这个标志出现在文件拥有者的 x 权限上时,如【-rwsr-xr-x】,则此时被称为SUID特殊权限。
SUID权限的限制和功能:
- SUID权限仅对二进制程序有效
- 执行者对该程序需要具备 x 的可执行权限
- 本权限仅在执行该程序的过程中有效
- 执行者将具有该程序拥有者(owner)的权限
举例说明:Linux系统中,所有账号的密码都记录在 /etc/shadow 这个文件里,该文件的权限为【---------- 1 root root】,即只有 root 能对该文件进行强制读写。但是有一个程序( /sur/bin/passwd,修改账户密码 )能让普通用户读写 shadow 这个文件,passwd 对普通用户的权限是【-rwsr-xr-x 1 root root】,权限当中在owner的 x 位置上出现了 s 标志,即普通用户具有SUID权限
- 普通用户对于 /usr/bin/passwd 具有 x 权限
- passwd 的拥有者是root
- 普通用户执行 passwd 的过程中,会‘暂时’获得root的权限
- 于是 /etc/shadow 可以被用户执行的 passwd 程序修改
Set GID:当 s 标志出现在用户组(group)的 x 位置上时,如【-rwxr-sr-x】,则称为SGID特殊权限,SGID的限制和功能同SUID
SGID除了作用于二进制程序外,还能够用在目录中。假定某个目录被设置成SGID权限,若用户对此目录具有r-x权限,则该用户能进入目录;用户在此目录下会‘暂时’成为该目录的用户组,获得w权限
Sticky Bit:当 other 的 x 位置上出现 t 标志时,被称为SBIT特殊权限,只针对目录有效,其作用是:
- 若用户对此目录具有 w、x 权限,当用户在此目录下建立文件或目录时,仅自己和root有权利删除新建的文件
- 如 /tmp【drwxrwxrwt】,任何人都可以在 /tmp 目录下建立或修改文件,但仅有自己和root有权利删除子的创建的文件或目录
SUID/SGID/SBIT 权限设置
- 4 为 SUID
- 2 为 SGID
- 1 为SBIT
例:要将一个文件权限改为 【-rwsr-xr-x】,只需在原先的 755 的前面加上 4,即 chmod 4755 filename
加入SUID/SGID权限:chmod 6755 filename
加入SBIT权限:chmod 1755 filename
文件的查找(whereis/locate/find)
whereis (由一些特定的目录中查找文件)
- whereis [ options ] dir/filename
- -l <列出 whereis 会去查询的几个主要目录>
- -m <只查找在说明文件 manual 路径下的文件>
- -s <只查找 source 源文件>
whereis 主要查询 /bin/sbin 下面的执行文件,和 /usr/share/man 下面的 man page 文件,以及几个特定目录,所以查询速度比较快。
locate / updatedb
locate:依据 /var/lib/mlocate 内的数据库记录,找出用户所输入关键词的文件名
updatedb:根据 /etc/updatedb.conf 的设置去查找系统硬盘内的文件,并更新 var/lib/mlocate 内的数据库文件
- locate [ options ] keyword
- -i <忽略大小写>
- -l <number 仅输出指定行数>
- -S <输出 locate 所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等>
- -r <可以接正则表达式的显示方式>
使用 locate 命令查找文件,可以只输入文件的部分名称;locate 寻找数据特别快,因为 locate 寻找的数据是由已建立的数据库 /var/lib/mlocate 里面的数据所查找到的,不必去硬盘中读取数据。
当建立新的文件时,数据库需要使用 updatedb 命令更新之后,才能查找到新文件。
文件系统
磁盘分区完毕后还需要进行格式化,之后操作系统才能使用这个文件系统;
传统磁盘与文件系统应用中,一个分区只能被格式化成为一个文件系统,即一个文件系统就是一个硬盘分区;
但是随着新技术的发展,已经可以将一个分区格式化为多个文件系统(如LVM),也可以将多个分区整合成为一个文件系统(如LVM,RAID),因此,我们称一个可被挂载的数据为一个文件系统而不是一个分区。
文件系统通常会将 文件实际内容 和 文件权限、文件属性 放置在两个不同的区块,权限与属性放置到 inode 中,实际内容放置到 data block(数据区块) 中。另外还有一个 superblock(超级区块) 用来记录整个文件系统的整体信息。
- 超级区块:记录此文件系统的整体信息,包括 inode 与 data block 的总量、使用量、剩余量,及文件系统的格式等相关信息
- inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 data block 号码
- data block:记录文件的实际内容,若文件太大,则会占用多个区块
文件系统与目录树的关系
当我们在linux下的文件系统建立一个目录时,文件系统会分配一个 inode 与至少一块 data block 给该目录。inode 记录该目录的权限与属性,以及分配到的区块号码;data block 记录这个目录下的文件名与该文件名占用的 inode 号码。
当我们建立一个一般文件时,文件系统会分配一个 inode 与 相对于该文件大小相匹配的区块数量 给给文件。
我们想要对某个目录下的子目录或文件进行新增、修改、删除的操作时,需要具备该目录的 w 权限,原因就在于:文件名是记录在目录的 data block 中,要读取某个文件时,必定会经过目录下的 inode 与 data block,然后才能找到待读取文件的 inode 号码,进而读取到该文件 data block 中的实际数据。
挂载点的意义
每个文件系统都有独立的 inode、data block、superblo等信息,这个文件系统要能够链接到目录树才能被用户使用。
将文件系统与目录树结合的操作被称为 挂载;
挂载点一定是目录,该目录为进入这个文件系统的入口。
辅助命令
热键
[ctrl] + u / [ctrl] + k
- 从光标处向前删除命令串 和 向后删除命令串
[ctrl] + a / [ctrl] + e
- 让光标移动到整行的最前面 和 最后面
Tab
- 命令补全
- 文件补齐
Shift + [Page up] [Page down] (翻页)
在线求助
man page (manual)
- 代号(1)用户在shell环境中可以操作的命令或可执行文件
- 代号(5)配置文件或某些文件格式
- 代号(8)系统管理员可用的管理命令
info page (以节点(node)形式输出信息)
- Space (下翻一页)
- [Page Down/Up] (下/上翻一页)
关机
su - (转换root身份)
sync (数据同步写入磁盘)
- 一般账号仅更新自己的数据
- root更新整个系统的数据
shutdown
- shutdown [options] [time] [warnings]
- -k (伪关机,发送警告信息)
- -r (重启)
- -h (立即关机)
- -c (取消)
reboot、halt、poweroff (重启)
通配符 *:代表0到无穷多个任意字符