# 目录与路径
* 相对路径与绝对路径 (略)
* 目录的相关操作
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
~account 代表 account 这个使用者的家目录
** cd∶变换目录
** pwd∶显示目前的目录 -p
** mkdir∶建立一个新的目录 -m -p
** rmdir∶删除一个空的目录 -p
* 关于执行文件路径的变量(环境变量)∶ $PATH
# 文件与目录管理
* 查看文件与目录∶ ls
参数∶
-a ∶全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来~
-A ∶全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~
-d ∶仅列出目录本身,而不是列出目录内的文件数据
-f ∶直接列出结果,而不进行排序 (ls 预设会以档名排序!)
-F ∶根据文件、目录等资讯,给予附加数据结构,例如∶
*∶代表可执行档; /∶代表目录; =∶代表 socket 文件; |∶代表 FIFO 文件;
-h ∶将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i ∶列出 inode 位置,而非列出文件属性;
-l ∶长数据串列出,包含文件的属性等等数据;
-n ∶列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
-r ∶将排序结果反向输出,例如∶原本档名由小到大,反向则为由大到小;
-R ∶连同子目录内容一起列出来;
-S ∶以文件容量大小排序!
-t ∶依时间排序
--color=never ∶不要依据文件特性给予颜色显示;
--color=always ∶显示颜色
--color=auto ∶让系统自行依据设定来判断是否给予颜色
--full-time ∶以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} ∶输出 access 时间或 改变权限属性时间 (ctime)
而非内容变更时间 (modification time)
* 复制、移动与删除∶ cp, rm, mv
** cp (复制文件或目录)
$ cp [-adfilprsu] 源文件(source) 目标文件(destination)
如果源文件有两个以上,则最后一个目标文件一定要是『目录』才行,即
$ cp [options] source1 source2 source3 .... directory
-p ∶连同文件的属性一起复制过去,而非使用默认属性;
-d ∶若来源文件为链接文件(link file),则复制链接文件属性而非文件本身;
-r ∶递归连续复制,用于目录的复制行为;
-a ∶相当于 -pdr 的意思;
-u ∶若 destination 比 source 旧才更新 destination !
-i ∶若目标文件(destination)已经存在时,在覆盖时会先询问是否真的动作!
-f ∶为强制 (force) 的意思,若有重复或其他疑问时,不会询问用户,而强制复制;
-l ∶创建硬链接 (hard link) 的链接文件,而非复制文件本身;
-s ∶复制成为符号链接文件(symbolic link),亦即『快捷方式』文件;
** rm (移除文件或目录)
$ rm [-fir] 文件或目录
-f ∶就是 force 的意思,强制删除;
-i ∶互动模式,在删除前会询问用户是否动作
-r ∶递归删除,最常用在目录的删除了
** mv (移动文件与目录,或更名)
$ mv [-fiu] 源文件 目标文件
$ mv [options] source1 source2 source3 .... directory
-f ∶force 强制的意思,强制直接移动而不询问;
-i ∶若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u ∶若目标文件已经存在,且 source 比较新,才会更新 (update)
* 取得路径的文件名称与目录名称
$ basename /etc/sysconfig/network
$ dirname /etc/sysconfig/network
# 查看文件内容
* cat 由第一行开始显示文件内容
$ cat [-AEnTv] 文件
参数∶
-A ∶相当于 -vET 的整合参数,可列出一些特殊字符~
-E ∶将结尾的断行字元 $ 显示出来;
-n ∶列印出行号;
-T ∶将 [tab] 按键以 ^I 显示出来;
-v ∶列出一些看不出来的特殊字符
* tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
$ tac 文件
* nl 显示的时候,顺道输出行号!
$ nl [-bnw] 文件
参数∶
-b ∶指定行号指定的方式,主要有两种∶
-b a ∶表示不论是否为空行,也同样列出行号;
-b t ∶如果有空行,空的那一行不要列出行号;
-n ∶列出行号表示的方法,主要有三种∶
-n ln ∶行号在屏幕的最左方显示;
-n rn ∶行号在自己栏位的最右方显示,且不加 0 ;
-n rz ∶行号在自己栏位的最右方显示,且加 0 ;
-w ∶行号栏位的占用的位元数。
* more 一页一页的显示文件内容
$ more 文件
* 空格键 (space)∶代表向下翻一页;
* Enter ∶代表向下翻『一行』;
* /字符串 ∶代表在这个显示的内容当中,向下搜寻『字符串』;
* :f ∶立刻显示出文件名以及目前显示的行数;
* q ∶代表立刻离开 more ,不再显示该文件内容。
* (常用) less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
$ less 文件
* 空格键 ∶向下翻动一页;
* [pagedown]∶向下翻动一页;
* [pageup] ∶向上翻动一页;
* /字串 ∶向下搜寻『字串』的功能;
* ?字串 ∶向上搜寻『字串』的功能;
* n ∶重复前一个搜寻 (与 / 或 ? 有关!)
* N ∶反向的重复前一个搜寻 (与 / 或 ? 有关!)
* q ∶离开 less 这个程序;
* head 只看头几行
$ head [-n number] 文件
参数∶
-n ∶后面接数字,代表显示几行的意思
* (常用) tail 只看尾巴几行
$ tail [-n number] 文件
参数∶
-n ∶后面接数字,代表显示几行的意思
* 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 ;
# 修改文件时间与建立新文件∶ touch
* 建立一个空的文件;
$ touch 新文件
* 将某个文件日期修订为目前 (mtime 与 atime)
$ touch [-acdmt] 文件
# 文件与目录的默认权限与隐藏属性
## 文件默认权限
* 查看当前默认权限
$ umask [-S]
* 修改当前默认权限
$ umask 002
## 文件隐藏属性
* chattr (设定文件隐藏属性)
$ chattr [+-=][ASacdistu] 文件或目录名称
参数∶
+ ∶增加某一个特殊参数,其他原本存在参数则不动。
- ∶移除某一个特殊参数,其他原本存在参数则不动。
= ∶设定一定,且仅有后面接的参数
A ∶当设定了 A 这个属性时,这个文件(或目录)的存取时间 atime (access)
将不可被修改,可避免例如手提式电脑容易有磁碟 I/O 错误的情况发生!
S ∶这个功能有点类似 sync 的功能!就是会将数据同步写入磁碟当中!
可以有效的避免数据流失!
a ∶当设定 a 之后,这个文件将只能增加数据,而不能删除,只有 root
才能设定这个属性。
c ∶这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
d ∶当dump(备份)程序被执行的时候,设定 d 属性将可使该文件(或目录)不具有dump功能
i ∶这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、设定连结也无法写入
或新增数据!』对于系统安全性有相当大的助益!
j ∶当使用 ext3 这个文件系统格式时,设定 j 属性将会使文件在写入时先记录在
journal 中!但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了
日了,所以这个属性无效!
s ∶当文件设定了 s 参数时,他将会被完全的移除出这个硬碟空间。
u ∶与 s 相反的,当使用 u 来设定文件时,则数据内容其实还存在磁碟中,
可以使用来 undeletion.
注意∶这个属性设定上面,比较常见的是 a 与 i 的设定值,而且很多设定值必须要身为
root 才能够设定的喔!
* lsattr (显示文件隐藏属性)
$ lsattr [-aR] 文件或目录
参数∶
-a ∶将隐藏档的属性也秀出来;
-R ∶连同子目录的数据也一并列出来!
## 文件特殊权限∶ SUID/SGID/Sticky Bit
* Set UID
会制作出 s 与 t 的权限,是为了让一般使用者在执行某些程序的时候, 能够暂时的具有该程序拥有者的权限。
SUID 仅可用在『二进位制文件(binary file)』上
* Set GID
** 文件∶如果 SGID 是设定在 binary file 上面,则不论使用者是谁,在执行该程序的时候, 他的有效群组 (effective group) 将会变成该程序的群组所有人 (group id)。
** 目录∶如果 SGID 是设定在 A 目录上面,则在该 A 目录内所建立的文件或目录的 group ,将会是 此 A 目录的 group !
* Sticky Bit
这个 Sticky Bit 目前只针对目录有效,对于文件已经没有效果了。
SBit 对于目录的作用是∶『在具有 SBit 的目录下,使用者若在该目录下具有 w 及 x 的权限, 则当使用者在该目录下建立文件或目录时,只有文件拥有者与 root 才有权力删除』。
* SUID/SGID/SBIT 权限设定
4 为 SUID
2 为 SGID
1 为 Sticky bit
假设要将一个文件属性改为『-rwsr-xr-x』时,由于 s 在使用者权限中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是∶『 chmod 4755 filename 』来设定。
## 查看文件类型∶file
$ file 文件
# 文件的搜寻
* (常用 & 重点) which (寻找『可执行文件』)
$ which [-a] command
参数∶
-a ∶将所有可以找到的指令均列出,而不止第一个被找到的指令名称
* (常用 & 重点) whereis (寻找特定文件)
$ whereis [-bmsu] 文件或目录名
参数∶
-b :只找 binary 的文件
-m :只找在说明档 manual 路径下的文件
-s :只找 source 来源文件
-u :没有说明档的文件!
* locate
$ locate 文件
* (常用 & 重点) find
$ find [PATH] [option] [action]
参数∶
1. 与时间有关的参数∶
-atime n ∶n 为数字,意义为在 n 天之前的『一天之内』被 access 过的文件;
-ctime n ∶n 为数字,意义为在 n 天之前的『一天之内』被 change 过状态的文件;
-mtime n ∶n 为数字,意义为在 n 天之前的『一天之内』被 modification 过的文件;
-newer file ∶file 为一个存在的文件,意思是说,只要文件比 file 还要新,
就会被列出来~
2. 与使用者或群组名称有关的参数∶
-uid n ∶n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在
/etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
-gid n ∶n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
/etc/group,相关的介绍我们会第四篇说明~
-user name ∶name 为使用者帐号名称喔!例如 dmtsai
-group name∶name 为群组名称喔,例如 users ;
-nouser ∶寻找文件的拥有者不存在 /etc/passwd 的人!
-nogroup ∶寻找文件的拥有群组不存在于 /etc/group 的文件!
当您自行安装软体时,很可能该软体的属性当中并没有文件拥有者,
这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。
3. 与文件权限及名称有关的参数∶
-name filename∶搜寻文件名称为 filename 的文件;
-size [+-]SIZE∶搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有∶
c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
还要大的文件,就是『 -size +50k 』
-type TYPE ∶搜寻文件的类型为 TYPE 的,类型主要有∶一般正规文件 (f),
装置文件 (b, c), 目录 (d), 连结档 (l), socket (s),
及 FIFO (p) 等属性。
-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 ∶将结果列印到萤幕上,这个动作是预设动作!