1.目录与路径
1、cd(Change Directory):切换目录
2、pwd:显示当前目录
- -P选项:显示出确切的路径,而非使用链接(link)路径。
3、mkdir:建立一个新的目录
-
-m选项:配置文件案的权限。可以直接设定。(如果未加-m选项,会使用系统默认属性)
-
-p选项:帮助你直接将所需要的目录(包括上层目录)递归建立起来
4、rmdir:删除一个[空]的目录
-
-p选项:连同上层[空]目录也一起删除掉。
**注:**如果想要将目录下所有的档案都删除,可以使用[rm - r 档案or目录名称]。
5、关于执行文件路径的变量:$PATH
-
系统会依据PATH的设定去每个PATH定义的目录下搜寻文件名为(ls或者其它名称)的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,则先被搜索到的同名指令会被先执行。
-
例如:(通过echo 打印出环境变量的值)($表示后面接的是变量)
- root用户的$PATH:
- 普通用户的$PATH:
- root用户的$PATH:
-
因为无论是root还是普通用户的$PATH变量的内容都包含了/bin这个目录在环境变量内,所以就能够在任何地方使用ls指令来找到/bin/ls执行档。
-
案例:
- 案例1:
- 案例2:
- 案例1:
-
总结:
- 不同用户身份使用者预设的PATH不同,默认能够随意执行的指令也不同(如root和其它普通用户)
- PATH是可以修改的,一般使用者还是可以通过修改PATH来执行某些位于/sbin或者/usr/sbin下的执行来查询。
- 使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻PATH来的正确和快速;
- 指令应该放置到正确的目录下,执行才比较方便。
- 当前目录(.)最好不要放在PATH当中
2.档案与目录管理
1、档案与目录的检视:ls
2、复制、删除、移动:cp,rm,mv
-
cp(复制档案或目录)
- 注意点
- 是否需要完整保留来源档案信息
- 来源文档是否为连接档
- 来源档是否为特殊的档案,如FIFO,socket等
- 来源文件是否是目录
-
rm(移除档案或目录)
-
mv(移动档案与目录,或更名)
3、取得路径的文件名与目录名称(可以用在shell scripts里面)
- basename(取得最后的档名)
- dirname(取得其所在目录名称)
3.档案内容查阅
1、查阅档案内容的相关指令(一次性显示全部)
-
-
cat(Concatenate (连续)正向显示)
- 选项
- 选项
-
tac(反向显示,从最后一行开始)
-
nl(添加行号打印)
- 选项
- 选项
2、可翻页检视
-
more(一页页显示)
- 搜寻字符串功能
-
less(一页页显示)
3、修改档案时间或者建立新档案(touch)
-
三个主要的变动时间
- modification time(mtime):当该档案的[内容数据]变更时,就会更新这个时间。(ls默认显示的时间)
- status time(ctime):该档案的[状态]改变时,就会更新这个时间,如档案权限与属性。
- access time(atime):当档案的内容被读取取用时,就会更新这个时间。
-
可选项:
4、档案权限设置:umask
-
用于指定当前用户在建立档案或者目录时候的权限默认值。
- 建立档案时:(-rw-rw-rw-) - (-----w–w-) ==> -rw-r–r--
- 建立目录时:(drwxrwxrwx) - (d----w–w-) ==> drwxr-xr-x
-
实例:
-
unmask一般用于专题制作,让不同用户将umask修订为002,使得群组的用户均能够修改访问被建立的文档或者目录。
-
一般来说,基于安全性考虑,root的umask为002,而普通用户的umask为022。
5、档案的隐藏属性
- chattr(配置文件案隐藏属性)
- lsattr(显示档案隐藏属性)
6、档案特殊权限
-
SUID的特殊权限(Set UID):
- SUID权限仅对二进制程序有效,不能用在shell script上
- 执行者对于该程序需要具有x的可执行权限
- 本权限仅在执行该程序的过程中有效
- 执行者将暂时具有该程序拥有者的权限
-
SGID的特殊权限(Set GID)
- 对于档案来说:
- SGID对二进制程序有用;
- 程序执行者对于该程序来说,需要具备x的权限。
- 执行者在执行过程中将会或者该程序群组的权限支持。
- 对于目录来说:
- 用户若对于此目录具有r,x的权限时,该用户能够进入此目录
- 用户在此目录下的有效群组将会变为该目录的群组
- 用途:若用户在此目录下具有w权限(可以新建档案),则使用者所建立的新的档案,该档案的群组与此目录的群组相同。
- 对于档案来说:
-
SBIT的特殊权限(Sticky Bit):仅仅针对目录有效
- 当用户对于此目录具有w,x权限,即具有写入的权限时。
- 当用户在该目录下建立档案或者目录时,仅有自己与root才有权力删除该档案。
6、SUID/SGID/SBIT 权限设定
-
权限代表数字
- 4为SUID
- 2为SGID
- 1为SBIT
-
案例
- S或者T代表为空SUID/SGID权限,因为原来的用户/群组不具备可执行x权限。
-
权限代表符号:
- SUID:u+s
- SGID:g+s
- SBIT:o+t
7、观察文件类型:file
- 通过file指令可以了解某个档案的基本数据以及格式,例如是属于ASCII或者是data档案,或者是binary,以及其中有没有使用到动态函式库等等信息。
4、指令与档案搜寻
1、脚本文件名的搜寻
- which(寻找[执行档])
2、档案名的搜寻
-
whereis(寻找特定的档案)
- 可选项
- 该指令会在数据库档案里面找,所以查找速度较快,而find会在硬盘中找,查找速度会很慢。
- 可选项
-
locate(根据档案的部分名称查找)
- 可选项:
- 该指令会在已建立的数据库 /var/lib/mlocate/中去查找。根locate指令一样,速度相比于find会很快。但由于一些distribution设定的数据库是每天更新一次,所以有可能查找不到新建立起来的档案。
- 手动更新数据库:输入updatedb
- updatedb:根据/etc/updatedb.conf的设定去搜寻系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库档案。
- locate:依据/var/lib/mlocate内的数据库记载,找出用户输入的关键词文件名。
- 可选项:
-
find(可以加入很多选项来查询文件系统,从硬盘中查询,速度较慢)
-
可选项1:
-
可选项2:
-
可选项3:
-
-
额外可选项:
-
-
例如:
-
-
-
5、权限项目实战
1、要求:
2、实现步骤:
-
首先:制作出两个账号的相关数据,以及制作工作群组。且保证两个用户均支持project这个群组。
-
步骤1:建立所需要开发的项目目录
-
步骤2:由于此时alex和arod都不能在目录内建立档案,所以需要进行目录权限与属性的修改。由于其他人均不可以进入此目录,因此该目录的群组为project,权限为770。
-
步骤3:使用两个用户来测试,先用alex建立档案,然后用arod去处理。若只是使用传统的rwx的权限,则对刚刚alex用户建立的abcd这个档案,arod可以删除,但是不可以编辑它。
-
加入SGID权限给项目开发目录。让不同用户在该开发目录下新建目录或者档案时,都是以project群组的身份去创建。
-
[外链图片转存中…(img-wGPGZMmZ-1636598818806)]
-
步骤3:使用两个用户来测试,先用alex建立档案,然后用arod去处理。若只是使用传统的rwx的权限,则对刚刚alex用户建立的abcd这个档案,arod可以删除,但是不可以编辑它。
- [外链图片转存中…(img-0eZvP302-1636598818807)]
-
加入SGID权限给项目开发目录。让不同用户在该开发目录下新建目录或者档案时,都是以project群组的身份去创建。