目录与路径
一些特殊的目录
在所有目录底下都会存在的两个目录,分别是『.』与『..』 分别代表此层与上层目录的意思。请问在 Linux 底下,根目录下有没有上层目录(..)存在?若使用『 ls -al / 』去查询,可以看到根目录下确实存在 . 与 .. 两个目录,再仔细的查阅, 可发现这两个目录的属性与权限完全一致,这代表根目录的上一层(..)与根目录自己(.)是同一个目录。
常见的处理目录的命令
- cd命令:变换目录.登入 Linux 系统后,每个账号都会在自己账号的家目录中。那回到上一层目录可以用『 cd .. 』。利用相对路径的写法必须要确认你目前的路径才能正确的去到想要去的目录。
- pwd命令:显示目前所在的目。.-P 的选项啦!他可以让我们取得正确的目录名称,而不是以链接文件的路径来显示的
- mkdir :建立新目录。mkdir [-mp] 目录名称。 选项与参数:-m :配置文件案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~。-p :帮助你直接将所需要的目录(包含上层目录)递归建立起来!
- rmdir (删除『空』的目录)
关于执行文件路径的变量:$PATH
我们知道查阅文件属性的指令 ls 完整文件名为:/bin/ls(这是绝对路径),那你会不会觉得很奇怪:『为什么我可以在任何地方执行/bin/ls 这个指令呢? 』 为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量PATH 的帮助所致呀
请下达『echo $PATH』来看看到底有哪些目录被定义出来了? echo 有『显示、印出』的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以会显示出目前的 PATH !
PATH(一定是大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开, 每个目录是有『顺序』之分的。
- 不同身份使用者预设的 PATH 不同,默认能够随意执行的指令也不同(如 root 与 dmtsai);
- PATH 是可以修改的;
- 使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻 PATH 来的正确;
- 指令应该要放置到正确的目录下,执行才会比较方便;
- 本目录(.)最好不要放到 PATH 当中
文件与目录管理
文件与目录的管理上,不外乎『显示属性』、 『拷贝』、『删除文件』及『移动文件或目录』等等,由于文件与目录的管理在 Linux 当中是很重要的, 尤其是每个人自己家目录的数据也都需要注意管理!
文件与目录的检视:ls命令
当你只有下达 ls 时,默认显示的只有:非隐藏档的档名、 以档名进行排序及文件名代表的颜色显示如此而已。举例来说, 你下达『 ls /etc 』之后,只有经过排序的文件名以及以蓝色显示目录及白色显示一般文件,如此而已。
无论如何, ls 最常被使用到的功能还是那个 -l 的选项,为此,很多 distribution 在预设的情况中,已经将 ll (L 的小写) 设定成为 ls -l 的意思了
复制、删除与移动:cp、rm、mv
要复制文件,请使用 cp (copy) 这个指令即可~不过, cp 这个指令的用途可多了~ 除了单纯的复制之外,还可以建立连结档 (就是快捷方式啰),比对两文件的新旧而予以更新, 以及复制整个目录等等的功能呢!至于移动目录与文件,则使用 mv (move), 这个指令也可以直接拿来作更名 (rename)的动作喔!至于移除吗?那就是 rm (remove) 这个指令啰
- cp (复制文件或目录)
我们如果去复制别人的数据 (当然,该文件你必须要有 read 的权限才行啊! _) 时, 总是希望复制到的数据最后是我们自己的,所以,在预设的条件中, cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身。
由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码文件 (/etc/shadow) 以及一些配置文件,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项才行!另外,如果你想要复制文件给其他的使用者, 也必须要注意到文件的权限(包含读、写、执行以及文件拥有者等等), 否则,其他人还是无法针对你给予的文件进行修订的动作喔
总之,由于 cp 有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚的了解到:
- 是否需要完整的保留来源文件的信息?
- 来源文件是否为连结档 (symbolic link file)?
- 来源档是否为特殊的文件,例如 FIFO, socket 等?
- 来源文件是否为目录?
rm,移除文件或者目录
mv,移动文件或者目录,或者更名
取得路径的文件名与目录名
每个文件的完整档名包含了前面的目录与最终的文件名,而每个档名的长度都可以到达 255 个字符。取得路径的文件名使用basename
,取得路径名使用dirname
文件内容查阅
文件查阅指令:
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写
- nl 显示的时候,顺道输出行号
- more 一页一页的显示文件内容
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页
- head 只看头几行
- tail 只看尾巴几行
- od 以二进制的方式读取文件内容!
cat命令
tac命令
nl命令
more命令,一页一页显示
- 空格键 (space):代表向下翻一页;
- Enter :代表向下翻『一行』;
- /字符串 :代表在这个显示的内容当中,向下搜寻『字符串』这个关键词;
- :f :立刻显示出文件名以及目前显示的行数;
- q :代表立刻离开 more ,不再显示该文件内容。
- b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
less命令,一页一页翻动
- 空格键 :向下翻动一页;
- [pagedown]:向下翻动一页;
- [pageup] :向上翻动一页;
- /字符串 :向下搜寻『字符串』的功能;
- ?字符串 :向上搜寻『字符串』的功能;
- n :重复前一个搜寻 (与 / 或 ? 有关!)
- N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
- g :前进到这个资料的第一行去;
- G :前进到这个数据的最后一行去 (注意大小写);
- q :离开 less 这个程序;
head命令,取出文件的前几行
另外那个 -n 选项后面的参数较有趣,如果接的是负数,例如上面范例的-n -100 时,代表列前的所有行数, 但不包括后面 100 行。
tail命令,取出文件的后面几行
由于/var/log/messages 随时会有数据写入,你想要让该文件有数据写入时就立刻显示到屏幕上, 就利用 -f 这个选项,他可以一直侦测/var/log/messages 这个文件,新加入的数据都会被显示到屏幕上。直到你按下[crtl]-c 才会离开 tail 的侦测喔!由于 messages 必须要 root 权限才能看,所以该范例得要使用 root 来查询喔!
od命令,读取非文档数据
我不想找 google,想要立刻找到 password 这几个字的 ASCII 对照,该如何透过 od 来判断?
答:
其实可以透过刚刚上一个小节谈到的管线命令来处理!如下所示:
echo password | od -t oCc
echo 可以在屏幕上面显示任何信息,而这个信息不由屏幕输出,而是传给 od 去继续处理!就可以得到 ASCII code
对照啰!
修改文件时间或建置新档: touch
我们在 ls 这个指令的介绍时,有稍微提到每个文件在 linux 底下都会记录许多的时间参数, 其实是有三个主要的变动时间,那么三个时间的意义是什么呢?
- modification time (mtime):当该文件的『内容数据』变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!
- status time (ctime):当该文件的『状态 (status)』改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。
- access time (atime):当『该文件的内容被取用』时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读取/etc/man_db.conf , 就会更新该文件的 atime 了。
无论如何, touch 这个指令最常被使用的情况是:
- 建立一个空的文件;
- 将某个文件日期修订为目前 (mtime 与 atime)
文件与目录的默认权限与隐藏权限
文件预设权限:umask命令
umask 就是指定 『目前用户在建立文件或目录时候的权限默认值』, 那么如何得知或设定 umask 呢?他的指定条件以底下的方式来指定:
umask 的分数指的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分如果以上面的例子来说明的话,因为 umask 为 022 ,所以 user 并没有被拿掉任何权限,不过 group与 others 的权限被拿掉了 2 (也就是 w 这个权限),那么当使用者:
- 建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
- 建立目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
umask 的利用与重要性:专题制作。当我们需要新建文件给同群组的使用者共同编辑时,那么 umask 的群组就不能拿掉 2 这个 w的权限! 所以啰, umask 就得要是 002 之类的才可以!这样新建的文件才能够是 -rw-rw-r-- 的权限模样喔! 那么如何设定 umask 呢?简单的很,直接在 umask 后面输入 002 就好了
文件的隐藏属性
隐藏的属性确实对于系统有很大的帮助的~ 尤其是在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的 chattr 指令只能在Ext2/Ext3/Ext4 的 Linux 传统文件系统上面完整生效
-
chattr(配置文件案隐藏属性)
-
lsattr(显示文件隐藏属性)
文件特殊权限:SUID,SGID,SBIT
观察文件类型:file
如果你想要知道某个文件的基本数据,例如是属于 ASCII 或者是 data 文件,或者是 binary , 且其中有没有使用到动态函式库 (share library) 等等的信息,就可以利用 file 这个指令来检阅喔
指令与文件的搜索
which (寻找『执行档』)
文件档名的搜索
Linux文件系统的管理指令
一、让用户能进入某目录成为『可工作目录』的基本权限为何:
- 可使用的指令:例如 cd 等变换工作目录的指令;
- 目录所需权限:用户对这个目录至少需要具有 x 的权限
- 额外需求:如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要 r 的权限。
二、用户在某个目录内读取一个文件的基本权限为何?
- 可使用的指令:例如本章谈到的 cat, more, less 等等
- 目录所需权限:用户对这个目录至少需要具有 x 权限;
- 文件所需权限:使用者对文件至少需要具有 r 的权限才行!
三、让使用者可以修改一个文件的基本权限为何?
- 可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等;
- 目录所需权限:用户在该文件所在的目录至少要有 x 权限;
- 文件所需权限:使用者对该文件至少要有 r, w 权限
四、让一个使用者可以建立一个文件的基本权限为何?
- 目录所需权限:用户在该目录要具有 w,x 的权限,重点在 w 啦!
五、让用户进入某目录并执行该目录下的某个指令之基本权限为何?
- 目录所需权限:用户在该目录至少要有 x 的权限;
- 文件所需权限:使用者在该文件至少需要有 x 的权限