声明:本文章为《鸟哥的linux私房菜》读书摘要!
绝对路径与相对路径
绝对路径:由根目录(/)开始写起的文件名或目录名称,例如 /home/dmtsai/.bashrc;
相对路径:相对于目前路径的文件名写法。例如 ./home/dmtsai 或../../home/dmtsai/ 等等。反正开头不是 /就属于相对路径的写法、
相对路径是以『你当前所在路径的相对位置』来表示的。举例来说,你目前在 /home这个目录下,如果想要进入 /var/log 这个目录时,可以怎么写呢?
1、cd /var/log (absolute)
2、cd ../var/log (relative)
以上两种方法都对。关于相对路径的还有如下规则
.代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前用户身份』所在的家目录
~account代表account这个用户的家目录(account是个账号名称)
目录操作中几个常用的命令
cd:变换目录
pwd:显示当前目录
mkdir:建立一个新的目录
rmdir:删除一个空的目录
文件预设权限:umask
umask 就是指定 『 目前用户在建立文件或目录时候的权限默认值』
查阅的方式有两种,一种可以直接输入 umask ,就可以看到数字型态的权限设定分数, 一种则是加入 -S (Symbolic) 这个选项,就会以符号类型的方式来显示出权限了
在默认权限的属性上,目录与文件是不一样的。我们知道 x 权限对于目录是非常重要的! 但是一般文件的建立则不应该有执行的权限。因此若使用者建立为『 文件』则预设『没有可执行( x )权限』,亦即只有 rw 这两个项目,也就是最大为 666 分,
预设权限如下:-rw-rw-rw-。若用户建立为『目录』,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,预设权限如下:drwxrwxrwx。
要注意的是, umask 的分数指的是『该默认值需要减掉的权限!』。比如当umask为022时,有如下情况
建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--建立目录时: (drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
在预设的情况中,root的umask会拿掉比较多的属性,root的umask默认是022,这是基于安全的考虑啦~至于一般身份使用者,通常他们的umask为002,亦即保留同群组的写入权力。
echo 有『显示、印出』的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以会显示出目前的 PATH
不同身份使用者预设的 PATH 不同,默认能够随意执行的指令也不同(如 root 与 dmtsai);
PATH 是可以修改的;
使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻 PATH 来的正确;
指令应该要放置到正确的目录下,执行才会比较方便;
本目录(.)最好不要放到 PATH 当中。
要复制文件,请使用 cp (copy) 这个指令即可~不过, cp 这个指令的用途可多了~ 除了单纯的复制之外,还可以建立连结档 (就是快捷方式啰),比对两文件的新旧而予以更新, 以及复制整个目录等等的功能呢!至于移动目录与文件,则使用 mv (move), 这个指令也可以直接拿来作更名 (rename)的动作喔!至于移除吗?那就是 rm (remove) 这个指令
cp (复制文件或目录)
rm (移除文件或目录)
mv (移动文件与目录,或更名)
关于cp、rm、mv指令的具体用法还需要根据实际操作,需要注意的很多,实际应用时要注意。mv指令是对单个文件的更名,在linux中还有一个rename指令是专职对多个档名同时更名。这一点需要区分。
文件内容的查阅。
之间有介绍过使用nano指令可以查阅文件,也可以修改文件。这里再罗列几个指令
cat由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
od 以二进制的方式读取文件内容!
less指令使用的画面与之前的man指令的画面非常的相似。这是因为实际上man这个指令就是呼叫less来显示说明文件的内容的。关于这些指令的具体应用可以使用man指令来查看。
修改文件时间或建置新档;touch
每个文件在 linux 底下都会记录许多的时间参数, 其实是有三个主要的变动时间
modification time (mtime):
当该文件的『内容数据』变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!
status time (ctime):
当该文件的『状态 (status)』改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。
access time (atime):
当『该文件的内容被取用』时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读取/etc/man_db.conf,就会更新该文件的atime了。
将某个文件日期修订为目前 (mtime 与 atime)
关于权限应用的两个例题
文件的隐藏属性
chattr(配置文件案隐藏属性)
文件的特殊权限,SUID,SGID,SBIT
4 为 SUID
2 为 SGID
1 为 SBIT
假设要将一个文件权限改为『 -rwsr-xr-x』时,由于 s 在用户权力中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『chmod 4755 filename 』来设定
which(寻找“执行档”)(这个指令是根据『 PATH』这个环境变量所规范的路径,去搜寻『执行档』的档名)
最后一个范例最有趣,怎么 history 这个常用的指令竟然找不到啊!为什么呢?这是因为 history 是『 bash 内建的指令』
whereis(由一些特定的目录中寻找文件文件名)
数据库的建立默认是在每天执行一次 (每个 distribution 都不同, CentOS 7.x 是每天更新数据库一次! ),所以当你新建立起来的文件, 却还在数据库更新之前搜寻该文件,那么 locate 会告诉你『找不到!』呵呵!因为必须要更新数据库呀!
updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件;
locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名。