linux学习笔记
鸟哥的linux私房菜第八章 https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/48.html
linux文件与目录管理
相对路径与绝对路径
绝对路径:路径的写法“一定由根目录 / 写起”,例如: /usr/share/doc 这个目录。
相对路径:路径的写法“不是由 / 写起”,例如由 /usr/share/doc 要到 /usr/share/man 下面时,可以写成: “cd …/man”,相对路径意指“相对于目前工作目录的路径!”
注意:绝对路径的准确度好,在写程序 (shell scripts) 来管理系统的条件下,务必使用绝对路径的写法。
目录管理
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前使用者身份”所在的主文件夹
处理目录的指令
- cd:变换目录
cd ..
# 表示回到上一层目录
cd -
# 表示回到上一个目录
cd ~
cd
## cd 和 cd ~都是回到主目录的意思
cd ~accout
- pwd:显示目前的目录
pwd [-P]
选项与参数:
-P :显示出确实的路径,而非使用链接 (link) 路径。
- mkdir:创建一个新的目录
mkdir test
# 创建一个名为test的目录
mkdir -p test1/test2/test3/test4
#同时创建多层目录
- rmdir:删除一个空的目录
rmdir [-p] 目录名称
选项与参数:
p :连同“上层”“空的”目录也一起删除
注意只能删除空目录
文件与目录的查看
- ls
ls [-aAdfFhilnrRSt] 文件名或目录名称
常用:
ls -a #全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来
ls -l #长数据串行出,包含文件的属性与权限等等数据
ls -h #将文件大小以较易读的方式(例如 GB, KB 等等)列出来
ls [–color={never,auto,always}] 文件名或目录名称
颜色显示选项
ls [–full-time] 文件名或目录名称
以完整时间模式 (包含年、月、日、时、分) 输出
文件的复制(cp)、删除(rm)和移动(mv)
- cp
[[email protected] ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
cp -a #将文件的所有特性都一起复制过来(文件的权限,特征,创建时间都不变)
cp -i #若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行
cp -r #递回持续复制,用于目录的复制;
[[email protected] ~]# cp [options] source1 source2 source3 … directory
同时将多个文件复制到同一个目录下
- rm
rm [-fir] 文件或目录
rm -f #就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
rm -i #互动模式,在删除前会询问使用者是否动作
rm -r #递回删除,最常用在目录的删除了!这是非常危险的选项!!!
- mv
mv [-fiu] source destination
mv -f #force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
mv -i #若目标文件 (destination) 已经存在时,就会询问是否覆盖!
mv -u #若目标文件已经存在,且 source 比较新,才会更新 (update)
mv [options] source1 source2 source3 … directory
同时将多个文件复制到同一个目录下
取得路径的文件名称与目录名称
basename /etc/sysconfig/network
#取得文件名
dirname /etc/sysconfig/network
#取得目录名
文件内容查阅
cat
由第一行开始显示文件内容tac
从最后一行开始显示nl
显示的时候,顺道输出行号more
一页一页的显示文件内容less
与more 类似,但可以往前翻页head
只看头几行tail
只看尾巴几行od
读取非文本文件
od [-t TYPE] 文件
选项或参数:
-t :后面可以接各种“类型 (TYPE)”的输出,例如:
a :利用默认的字符来输出;
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size Bytes ;
f[size] :利用浮点数值(floating)来输出数据,每个数占用 size Bytes ;
o[size] :利用八进位(octal)来输出数据,每个整数占用 size Bytes ;
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size Bytes ;
echo password | od -t oCc echo 可以得到 ASCII code 对照
补充:
管道:|
一个命令的输出可以通过管道做为另一个命令的输入。
echo 可以输出任何信息,而这个信息不由屏幕输出,而是传给 od 去继续处理
修改文件时间
linux三个主要变动的时间参数
modification time (mtime): 当该文件的“内容数据”变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!
status time (ctime): 当该文件的“状态 (status)”改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。
access time (atime): 当“该文件的内容被取用”时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man_db.conf , 就会更新该文件的 atime 了。
修改文件时间–touch
touch [-acdmt] 文件
选项与参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不创建新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date=“日期或时间”
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
文件与目录权限与属性
默认权限
unmask查看默认权限
umask
# 输出0022
umask -S
# 输出u=rwx,g=rx,o=rx
所以0022意即拿掉user 和 group的 w权限
若使用者创建为“文件”则默认“没有可执行( x )权限”,亦即只有 rw 这两个项目,也就是最大为 666 分,默认权限如下: -rw-rw-rw-
因此创建文件时:权限值 644若使用者创建为“目录”,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,默认权限如下: drwxrwxrwx
因此创建目录时: 权限值 755
更改unmask
unmask 003
# 即拿掉group的 w 和 x权限
文件隐藏属性
- chattr 修改文件隐藏属性
chattr [±=][ASacdistu] 文件或目录名称
选项与参数:
+:增加某一个特殊参数,其他原本存在参数则不动。
-:移除某一个特殊参数,其他原本存在参数则不动。
= :设置一定,且仅有后面接的参数
a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,
i :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”
对于系统安全性有相当大的助益!只有 root 能设置此属性
- lsattr 查看文件隐藏属性
lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!
文件特殊权限
- SUID
特点:
- SUID 权限仅对二进制程序(binary program)有效;
- 执行者对于该程序需要具有 x 的可执行权限;
- 本权限仅在执行该程序的过程中有效 (run-time);
- 执行者将具有该程序拥有者 (owner) 的权限。
举例说明:
user对文件/usr/bin/passwd 没有w权限,但由于own拥有s权限,user在执行/usr/bin/passwd 时会短暂获得root的权限,也就是说短暂获得w权限,可以改密码啦!
- SGID
当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID,另外SGID针对文件和目录,而SUID仅针对文件
特点:
- SGID 对二进制程序有用;
- 程序执行者对于该程序来说,需具备 x 的权限;
- 执行者在执行的过程中将会获得该程序群组的支持!
- SBIT
只针对目录
特点:
- 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
- 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
举例来说,我们的 /tmp 本身的权限是“drwxrwxrwt”, 在这样的权限内容下,任何人都可以在 /tmp 内新增、修改文件,但仅有该文件/目录创建者与 root 能够删除自己的目录或文件。
SUID/SGID/SBIT 权限设置
数字法:
- 4 为 SUID
- 2 为 SGID
- 1 为 SBIT
在原本的3个数字前加上相应数字
例:4755表示加入SUID权限
注意:s和t是取代x权限的,如果没有x权限,权限会显示为S和T
符号法:
SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t
查看文件类型
file 文件
指令与文件的搜寻
指令的搜寻
which [-a] command
选项或参数:
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
注意:which 默认查找path路径内的目录,所以找不到history
文件的搜寻
- whereis
whereis [-lbmsu] 文件或目录名
选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件(可执行文件)
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
- locate 只用输入文件的关键字就可以了
locate [-ir] keyword
选项与参数:
-i :忽略大小写的差异;
-c :不输出文件名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正则表达式的显示方式
locate是经由数据库来搜寻的,而数据库的创建默认是在每天执行一次 ,即数据库每天更新一次。
所以新创建文件时,需要用updatedb更新数据库
- find
find [PATH] [option] [action]
选项与参数:
(1)与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的“一天之内” 被更动过内容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名
(2)与使用者或群组名称有关的参数:
-uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID
-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID
-user name :name 为使用者帐号名称
-group name:name 为群组名称
-nouser :寻找文件的拥有者不存在 /etc/passwd 的人!
-nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!
当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,
这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。(3) 与文件权限及名称有关的参数: -name filename:搜寻文件名称为 filename 的文件; -size
[±]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件 -type TYPE :搜寻文件的类型为 TYPE 的。
-perm mode :搜寻文件权限**“刚好等于**” mode 的文件,这个 mode 为类似 chmod的属性值,举例来说, -rwsr-xr-x 的属性为 4755 ! -perm -mode :搜寻文件权限“必须要全部囊括 mode 的权限”的文件,举例来说,
我们要搜寻 -rwxr–r-- ,亦即 0744 的文件,使用 -perm -0744,
当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
因为 -rwsr-xr-x 的属性已经囊括了 -rwxr–r-- 的属性了。 -perm /mode :搜寻文件权限“包含任一 mode 的权限”的文件,举例来说,我们搜寻-rwxr-xr-x ,亦即 -perm /755
时,但一个文件属性为 -rw-------也会被列出来,因为他有 -rw… 的属性存在! (4). 额外可进行的动作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。 -print :将结果打印到屏幕上,这个动作是默认动作!
总结:
一、让使用者能进入某目录成为“可工作目录”的基本权限为何:
可使用的指令:例如 cd 等变换工作目录的指令;
目录所需权限:使用者对这个目录至少需要具有 x 的权限
额外需求:如果使用者想要在这个目录内利用 ls 查阅文件名,则使用者对此目录还需要 r 的权限。
二、使用者在某个目录内读取一个文件的基本权限为何?
可使用的指令:例如本章谈到的 cat, more, less等等
目录所需权限:使用者对这个目录至少需要具有 x 权限;
文件所需权限:使用者对文件至少需要具有 r 的权限才行!
三、让使用者可以修改一个文件的基本权限为何?
可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等;
目录所需权限:使用者在该文件所在的目录至少要有 x 权限;
文件所需权限:使用者对该文件至少要有 r, w 权限
四、让一个使用者可以创建一个文件的基本权限为何?
目录所需权限:使用者在该目录要具有 w,x 的权限,重点在 w 啦!
五、让使用者进入某目录并执行该目录下的某个指令之基本权限为何?
目录所需权限:使用者在该目录至少要有 x 的权限;
文件所需权限:使用者在该文件至少需要有 x 的权限