命令描述
此处要介绍的相关命令共有29个
关于文件与目录管理的命令有9个,分别是cd、ls、pwd、mkdir、rmdir、cp、rm、mv、touch
- cd用于切换工作目录
- ls用于列出目录中的文件
- pwd用于显示当前工作目录
- mkdir用于创建新的目录
- rmdir用于删除空的目录
- cp用于复制文件或目录
- rm用于删除文件或目录
- mv用于移动文件或目录
- touch用于更新文件修改时间,或创建新的空文件
关于文件与目录权限的命令有6个,分别是chown、chgrp、chmod、umask、chattr、lsattr
- chown用于修改某一文件或目录的所属人,同时也可以修改文件所属组
- chgrp用于修改某一文件或目录的所属组
- chmod用于修改某一文件或者目录的权限信息。
- umask用于设置文件或目录被创建时的默认权限
- chattr用于配置文件的隐藏权限属性
- lsattr用于显示文件的隐藏权限属性
关于文件查看与寻找的命令有14个,分别是cat、tac、nl、more、less、head、tail、od、which、whereis、locate、find、file、updatedb
- cat从第一行开始显示文件内容
- tac从最后一行开始显示文件内容
- nl显示内容并且带有行号
- more一页一页的显示文件内容
- less与more类似,但是与more相比,less可以向前翻页
- head只看某文件的头几行
- tail只看某文件尾巴几行
- od以二进制位的方式读取文件内容
- which用于查询可运行文件
- whereis用于寻找特定文件或目录
- locate用于搜索文件
- updatedb用于更新locate搜索时所用的数据库
- find用于搜索硬盘中的文件
- file用于观察文件类型
常用参数
-
pwd
-P :显示出真是路径,而非link的路径 -
mkdir
-m :创建目录时同时配置目录权限,忽略umask设置
-p :递归创建目录,如果上级目录不存在则一起创建 -
rmdir
-p :递归删除目录,连通上级空目录一起删除 -
ls
-l :显示文件详情,包括文件名,大小,修改时间,文件权限等属性
-a :显示包括隐藏文件
-d :仅列出目录本身,而不是列出目录内的文件数据
-h :将文件容量以人类较易读的方式(例如 GB, KB 等)列出来
-i :列出 inode 号码,inode 的意义下一章将会介绍
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小
-R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
-S :以文件容量大小排序,而不是用档名排序
-t :依时间排序,而不是用档名
--full-time :显示文件的所有时间信息,包括atime,ctime,mtime -
cp
-a :相当於 -pdr 的意思,至於 pdr 请参考下列说明
-d :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次
-i :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行
-l :进行硬式连结(hard link)的连结档创建,而非复制文件本身
-p :连同文件的属性一起复制过去,而非使用默认属性(备份常用)
-r :递回持续复制,用於目录的复制行为
-s :复制成为符号连结档 (symbolic link),亦即『捷径』文件
-u :若 destination 比 source 旧才升级 destination -
rm
-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息
-i :互动模式,在删除前会询问使用者是否删除
-r :递归删除!最常用在目录的删除了 -
mv
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
-u :若目标文件已经存在,且 source 比较新,才会升级 (update) -
touch
-a :仅更新access time
-c :仅修改文件的时间,若该文件不存在则不创建新文件
-d :可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm] -
cat
-A :相当於 -vET 的组合选项,可列出一些特殊字符而不是空白而已
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号
-E :将结尾的断行字节 $ 显示出来
-n :列印出行号,连同空白行也会有行号,与 -b 的选项不同
-T :将 [tab] 按键以 ^I 显示出来
-v :列出一些看不出来的特殊字符 -
nl
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n)
-b t :如果有空行,空的那一行不要列出行号(默认值)
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示
-n rn :行号在自己栏位的最右方显示,且不加 0
-n rz :行号在自己栏位的最右方显示,且加 0
-w :行号栏位的占用的位数 -
head
-n :后面接数字,代表显示几行的意思 -
tail
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测 -
od
-t :后面可以接各种『类型 (TYPE)』的输出,例如:
-t a :利用默认的字节来输出
-t c :使用 ASCII 字节来输出
-t d[size] :利用十进位(decimal)来输出数据,每个整数占用 size bytes
-t f[size] :利用浮点数值(floating)来输出数据,每个数占用 size bytes
-t o[size] :利用八进位(octal)来输出数据,每个整数占用 size bytes
-t x[size] :利用十六进位(hexadecimal)来输出数据,每个整数占用 size bytes -
which
-a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称 -
whereis
-b :只找 binary 格式的文件
-m :只找在说明档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件 -
locate
-i :忽略大小写的差异
-r :后面可接正规表示法的显示方式 -
find
与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明:
-mtime n :n 为数字,意义为在 n 天之前的一天之内被更动过内容的文件
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名
-newer file :file 为一个存在的文件,列出比 file 还要新的文件档名
与使用者或群组名称有关的参数:
-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 搜寻
与文件权限及名称有关的参数:
-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.... 的属性存在
额外可进行的动作:
-exec command :command 为其他命令,-exec 后面可再接额外的命令来处理搜寻到的结果
-print :将结果列印到萤幕上,这个动作是默认动作 -
chgrp
-R :递归得改变次级目录中的文件及目录权限 -
chown
-R :递归得改变次级目录中的文件及目录权限 -
chmod
-R :递归得改变次级目录中的文件及目录权限 -
chattr
+ :添加某一个特殊参数,其他原本存在参数则不动
- :移除某一个特殊参数,其他原本存在参数则不动
= :配置一定,且仅有后面接的参数
A :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
S :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中
a :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root才能配置这个属性
c :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
d :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
i :可以让一个文件『不能被删除、改名、配置连结,也无法写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
s :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来
u :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还存在磁碟中,可以使用来救援该文件 -
lsattr
-a :将隐藏档的属性显示出来
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名
-R :连同子目录的数据也一并列出来
应用示例
[root@www ~]# cd //切换至家目录
[root@www ~]# cd - //切换到上一个工作目录
[root@www /]# cd /lib //切换到/lib目录
[root@www ~]# ls -l --time=atime a //查看a文件的access time
[root@www lib]# pwd //显示当前工作路径
[root@www ~]# mkdir -p a/b/c //连续创建a/b/c目录
[root@www ~]# mkdir -m 777 -p a/b/d //连续创建a/b/d目录并且设置目录权限为777
[root@www ~]# rmdir -p a/b/c //连续删除a/b/c目录
[root@www ~]# cp -s a as //符号连接(symbolic link)
[root@www ~]# cp -l a al //实体连接(hard link)
[root@www ~]# rm -rf a //递归强制删除a目录及其子目录所有数据
[root@www ~]# mv a b c . //将a、b、c移动到当前工作目录
[root@www ~]# cat -A sshd.conf //显示sshd.conf文件内容,包括特殊符号
[root@www ~]# tac /etc/issue //倒着显示issue文件内容
[root@www ~]# nl -b a -n rz -w 3 a //显示a文件内容,所有行带行号,行号显示在右侧且不足3位时补足0
[root@www ~]# more /etc/man.config //翻页查看man.config文件
[root@www ~]# less /etc/man.config //翻页查看man.config文件
[root@www ~]# head -n -20 file //查看file文件倒数20行以前的内容
[root@www ~]# tail -n +100 file //查看file文件100行以后的数据
[root@www ~]# od -t c passwd //以ascii方式查看passwd文件
[root@www ~]# touch -d "2 days ago" bashrc //更改修改日期到两天前
[root@www ~]# umask 052 //设置默认权限为拿掉同组读执行,其他写权限
[root@www ~]# chattr +i attrtest //为attrtest添加隐藏的i属性
[root@www ~]# lsattr attrtest //显示attrtest的隐藏属性
[root@www ~]# file /usr/bin/passwd //显示passwd的文件类型
[root@www ~]# which ifconfig //查找ifconfig的来源
[root@www ~]# whereis ifconfig //查找ifconfig文件(该命令搜索时搜索的是数据库而非直接搜索磁盘)
[root@www ~]# locate passwd //查找passwd文件
[root@www ~]# updatedb //更新/var/lib/mlocate/内的数据库
[root@www ~]# find / -mtime 0 //找出今天更改过的文件
[root@www ~]# find / -perm +7000 -exec ls -l {} \; //查找包含7000任意一个权限的文件,并且使用ll列出详情
[root@www ~]# chgrp root file //更改文件所有群组为root组
[root@www ~]# chgrp -R root dir/ //递归更改dir下所有的文件和目录的所有者为root用户
[root@www ~]# chown root file //更改文件所有者为root用户 //更改文件所有者和所属群组为root
[root@www ~]# chown -R root dir/ //递归更改dir下所有的文件和目录的所有者为root用户
[root@www ~]# chown root:root file //更改文件所有者和所属群组为root账户和root组
[root@www ~]# chown :root file //更改文件所有群组为root组
[root@www ~]# chmod 777 file //对更改文件权限为所有者可读可写可执行,所有群组可读可写可执行,其他用户可读可写可执行
[root@www ~]# chmod -R 777 dir/ //递归更改目dir下所有文件和目录权限为所有者可读可写可执行,所有群组可读可写可执行,其他用户可读可写可执行
[root@www ~]# chmod 7777 file //对更改文件权限为所有者可读可写可执行,所有群组可读可写可执行,其他用户可读可写可执行,同时增加SUID,SGID,SBIT权限。
概念简介
目录概念
在linux中,有5个特殊目录:
- .代表此目录
- ..代表上一层目录
- -代表前一个工作目录
- ~代表当前登录账户的家目录
- ~account代表account账户的家目录
权限概念
在ls -l
命令的输出内容中,显示出每一个文件或目录的一些常见属性,例如:
[root@www ~]# ls -l
total 4
drwxr-xr-x 2 root root 4096 Mar 2 07:58 dir
-rw-r--r-- 1 root root 0 Mar 2 07:58 file
权限 连接数 所属用户 所属用户组 占用空间 最后修改日期 文件/目录
在上述的属性中,第一栏drwxr-xr-x
为该文件的权限栏,该块共有10个字符组成。其中第一个字符显示该文件的类型,共有7种文件类型:
-
d
代表目录 -
-
代表文件 -
l
代表连接档 -
b
代表设备文件里可供存储的接口设备 -
c
代表设备文件里的串行端口设备。 -
s
代表数据接口文件 -
p
代表FIFO文件
其余9个字符分为三组,第一组代表文件拥有者的权限,第二组代表文件拥有组的权限,第三组代表其他用户的权限
三组中每组又有三个字符,分别代表这rwx
权限,也就是读,写,执行权限。当权限不存在时,系统会以-
填充该位。
三个特殊权限
SUID
该权限仅作用于文件,主要用途是让使用者临时拥有文件所有者的权限,仅对可执行的二进制文件有用,对脚本无效,在文件所有者的x权限上生效,存在时x权限变为小写s,当x权限本身不存在时,显示大写S
- SUID 权限仅对二进位程序(binary program)有效
- 运行者对於该程序需要具有 x 的可运行权限
- 本权限仅在运行该程序的过程中有效 (run-time)
- 运行者将具有该程序拥有者 (owner) 的权限
SGID
当该权限作用在文件上时,主要用于是让使用者拥有该文件群组的权限;如果该权限作用在目录上时,主要是让新建的文件或者目录的所属组为当前目录的所属组,在文件群组的x权限上生效,存在时x权限变为小写s,当x权限本身不存在时,显示大写S
作用于文件
- SGID 对二进位程序有用
- 程序运行者对於该程序来说,需具备 x 的权限
- 运行者在运行的过程中将会获得该程序群组的权限
作用于目录
- 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录
- 使用者在此目录下的有效群组(effective group)将会变成该目录的群组
- 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同
SBIT
该权限仅作用于目录,主要用途是让使用者在该目录创建了新文件或目录时,仅有该使用者或root才有权利删除该文件,在文件其他用户的x权限上生效,存在时x权限变为小写t,当x权限本身不存在时,显示大写T
- 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时
- 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
以上三个特殊权限的配置与一般权限配置类似,只不过在需要配置特殊权限时,chmod后跟四位权限信息即可(需要注意的是,在配置特殊权限时要保证对应的位置上有x权限,否则将会显示大写的字母来标识无效)
- 4 为 SUID
- 2 为 SGID
- 1 为 SBIT
权限总结
一、让使用者能进入某目录成为『可工作目录』的基本权限为何?
- 可使用的命令:例如 cd 等变换工作目录的命令
- 目录所需权限:使用者对这个目录至少需要具有 x 的权限
- 额外需求:如果使用者想要在这个目录内利用 ls 查阅档名,则使用者对此目录还需要 r 的权限。
二、使用者在某个目录内读取一个文件的基本权限为何?
- 可使用的命令:例如cat, more, less等等
- 目录所需权限:使用者对这个目录至少需要具有 x 权限
- 文件所需权限:使用者对文件至少需要具有 r 的权限才行
三、让使用者可以修改一个文件的基本权限为何?
- 可使用的命令:例如 nano 或 vi 编辑器等
- 目录所需权限:使用者在该文件所在的目录至少要有 x 权限
- 文件所需权限:使用者对该文件至少要有 r, w 权限
四、让一个使用者可以创建一个文件的基本权限为何?
- 目录所需权限:使用者在该目录要具有 w,x 的权限
五、让使用者进入某目录并运行该目录下的某个命令之基本权限为何?
- 目录所需权限:使用者在该目录至少要有 x 的权限
- 文件所需权限:使用者在该文件至少需要有 x 的权限