学习笔记
学习的笔记
一.文件权限
1.文件属性
[root@www ~]# ls -al total 156 drwxr-x--- 4 root root 4096 Sep 8 14:06 . drwxr-xr-x 23 root root 4096 Sep 8 14:21 .. -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg -rw------- 1 root root 199 Sep 8 17:14 .bash_history -rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout -rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile -rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc -rw-r--r-- 1 root root 100 Jan 6 2007 .cshrc drwx------ 3 root root 4096 Sep 5 10:37 .gconf <=范例说明处 drwx------ 2 root root 4096 Sep 5 14:09 .gconfd -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log <=范例说明处 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 权限 ] [连结] [拥有者][群组] [文件容量][ 修改日期 ][ 檔名 ]
- 第一栏:权限
第一个字符代表这个文件是『目录、文件或链接文件等等』:
意义 |
---|
当为[ d ]则是目录,例如上表档名为『.gconf』的那一行; |
当为[ - ]则是文件,例如上表档名为『install.log』那一行; |
若是[ l ]则表示为连结档(link file); |
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置); |
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。 |
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。
意义 |
---|
[ r ]代表可读(read) |
[ w ]代表可写(write) |
[ x ]代表可执行(execute) |
要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]。
意义 |
---|
第一组为『文件拥有者的权限』,以『install.log』那个文件为例, 该文件的拥有者可以读写,但不可执行; |
第二组为『同群组的权限』; |
第三组为『其他非本群组的权限』。 |
- 第二栏:连结节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node。这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码。
第三栏表:拥有者账号
第四栏:所属群组
在Linux系统下,你的账号会附属于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如所示(-rwxrwx—), 则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。 但如果是不属于projecta的其他账号,对于此文件就不具有任何权限了。
第五栏:容量大小,默认单位为bytes;
第六栏:建档日期或最近修改日期.
第七栏:文件的档名
这个字段就是档名。比较特殊的是:如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』。
2.权限表示
drwxr-xr-x
- 各字母的意义
符号 | 含义 | 数值 |
---|---|---|
[ r ] | 代表可读(read) | 4 |
[ w ] | 代表可写(write) | 2 |
[ x ] | 代表可执行(execute) | 1 |
- 每组的意义
意义 |
---|
第一组为『文件拥有者的权限』,以『install.log』那个文件为例, 该文件的拥有者可以读写,但不可执行; |
第二组为『同群组的权限』; |
第三组为『其他非本群组的权限』。 |
3.权限操作
chgrp 改变所属群组
[root@www ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
chown 改变文件拥有者
[root@www ~]# chown [-R] 账号名称 文件或目录[root@www ~]# chown [-R] 账号名称:组名 文件或目录
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
chmod 改变权限
第一种:
[root@www ~]# chmod [-R] xyz 文件或目录
选项与参数:
符号 | 意义 |
---|---|
xyz | 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。 |
-R | 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更 |
第二种:
[root@www ~]# chmod [augo][operator][permission] 文件或目录
选项与参数:
augo | 用户组 |
---|---|
a | 所有用户 |
u | 文件拥有者 |
g | 同群组用户 |
0 | 其他非本群组用户 |
operator | 符号 |
---|---|
+ | 增加权限。 |
- | 取消权限。 |
= | 设定权限。 |
permission | 权限. |
---|---|
r | 读权限。 |
w | 写权限。 |
x | 执行权限。 |
s | 文件属主和组s e t - I D。 |
t | 粘性位*。 |
l | 给文件加锁,使其他用户无法访问。 |
[root@www ~]# chmod u=rwx,go=rx .bashrc# u=rwx,go=rx 是连在一起的[root@www ~]# ls -al .bashrc-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
二.目录操作
cd 变换目录
cd是Change Directory的缩写,这是用来变换工作目录的命令。
[root@www ~]# cd [相对路径或绝对路径]# 最重要的就是目录的绝对路径与相对路径[root@www ~]# cd ~vbird# 代表去到 vbird 这个使用者的home目录,亦即 /home/vbird[root@www vbird]# cd ~# 表示回到自己的home目录,亦即是 /root 这个目录[root@www ~]# cd# 没有加上任何路径,也还是代表回到自己home目录[root@www ~]# cd ..# 表示去到目前的上一级目录[root@www /]# cd -# 表示回到刚刚的那个目录[root@www ~]# cd /var/spool/mail# 这个就是绝对路径的写法[root@www mail]# cd ../mqueue# 这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/mqueue
pwd 显示目前所在的目录
[root@www ~]# pwd [-P]
选项与参数:
-P :显示出确实的路径,而非使用连结 (link) 路径。
范例:显示出实际的工作目录,而非连结档本身的目录名而已
[root@www mail]# pwd /var/mail <==列出目前的工作目录[root@www mail]# pwd -P /var/spool/mail <==有没有加 -P 差很多~[root@www mail]# ls -ld /var/maillrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail# 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail # 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径
mdkir 创建目录
–>make directory
[root@www ~]# mkdir [-mp] 目录名称
选项与参数:
符号 | 意义 |
---|---|
-m | 配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~ |
-p | 帮助你直接将所需要的目录(包含上一级目录)递回创建起来! |
范例:
[root@www ~]# mkdir test <==创建一名为 test 的新目录[root@www ~]# mkdir test1/test2/test3/test4mkdir: cannot create directory `test1/test2/test3/test4': No such file or directory <== 没办法直接创建此目录[root@www ~]# mkdir -p test1/test2/test3/test4# 加了这个 -p 的选项,可以自行帮你创建多层目录
rmdir 删除『空』的目录
[root@www ~]# rmdir [-p] 目录名称
选项与参数:
-p :连同上一级『空的』目录也一起删除
范例:将范例中创建的目录删除掉!
[root@www tmp]# rmdir test <==可直接删除掉,没问题[root@www tmp]# rmdir test1 <==因为尚有内容,所以无法删除!rmdir: 'test1': Directory not empty[root@www tmp]# rmdir -p test1/test2/test3/test4# 利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除~# rmdir 仅能『删除空的目录』
ls 文件与目录检视
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称[root@www ~]# ls [--color={never,auto,always}] 目录名称[root@www ~]# ls [--full-time] 目录名称
选项与参数:
符号 | 意义 |
---|---|
-a | 全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来 –>(常用) |
-d | 仅列出目录本身,而不是列出目录内的文件数据 –>(常用) |
-l | 长数据串列出,包含文件的属性与权限等等数据; –>(常用) |
-A | 全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录 |
-f | 直接列出结果,而不进行排序 (ls 默认会以档名排序!) |
-F | 根据文件、目录等资讯,给予附加数据结构,例如:*:代表可运行档; /:代表目录; =:代表 socket 文件; |
-h | 将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来; |
-i | 列出 inode 号码,inode 的意义下一章将会介绍; |
-n | 列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!) |
-r | 将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小; |
-R | 连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来; |
-S | 以文件容量大小排序,而不是用档名排序; |
-t | 依时间排序,而不是用档名。 |
–color=never | 不要依据文件特性给予颜色显示; |
–color=always | 显示颜色 |
–color=auto | 让系统自行依据配置来判断是否给予颜色 |
–full-time | 以完整时间模式 (包含年、月、日、时、分) 输出 |
–time={atime,ctime} | 输出 access 时间或改变权限属性时间 (ctime) 而非内容变更时间 (modification time) |
df
列出文件系统的整体磁盘使
[root@www ~]# df [-ahikHTm] [目录或文件名]
参数:
命令 | 意义 |
---|---|
-a | 列出所有的文件系统,包括系统特有的 /proc 等文件系统; |
-k | 以 KBytes 的容量显示各文件系统; |
-m | 以 MBytes 的容量显示各文件系统; |
-h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; |
-H | 以 M=1000K 取代 M=1024K 的进位方式; |
-T | 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出; |
-i | 不用硬盘容量,而以 inode 的数量来显示 |
范例一:将系统内所有的 filesystem 列出来!
[root@www ~]# df
范例二:将容量结果以易读的容量格式显示出来
[root@www ~]# df -h# 不同于范例一,这里会以 G/M 等容量格式显示出来,比较容易看
范例四:将 /etc 底下的可用的磁盘容量以易读的容量格式显示
[root@www ~]# df -h /etcFilesystem Size Used Avail Use% Mounted on/dev/hdc2 9.5G 3.7G 5.4G 41% /# 在 df 后面加上目录或者是文件时, df# 会自动的分析该目录或文件所在的 partition ,并将该 #partition 的容量显示出来
du
评估文件系统的磁盘使用量(常用在推估目录所占容量)
[root@www ~]# du [-ahskm] 文件或目录名称
选项与参数:
命令 | 意义 |
---|---|
-a | 列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。 |
-h | 以人们较易读的容量格式 (G/M) 显示; |
-s | 列出总量而已,而不列出每个各别的目录占用容量; |
-S | 不包括子目录下的总计,与 -s 有点差别。 |
-k | 以 KBytes 列出容量显示; |
-m | 以 MBytes 列出容量显示; |
范例一:列出目前目录下的所有文件容量
[root@www ~]# du8 ./test4 <==每个目录都会列出来8 ./test2....中间省略....12 ./.gconfd <==包括隐藏文件的目录220 . <==这个目录(.)所占用的总量# 直接输入 du 没有加任何选项时,则 du 会分析『目前所在目录』# 的文件与目录所占用的硬盘空间。但是,实际显示时,仅会显示目录容量(不含文件),# 此外,输出的数值数据为 1K 大小的容量单位。
范例二:同范例一,但是将文件的容量也列出来
[root@www ~]# du -a12 ./install.log.syslog <==有文件的列表了8 ./.bash_logout8 ./test48 ./test2....中间省略....12 ./.gconfd220 .
范例三:检查根目录底下每个目录所占用的容量
[root@www ~]# du -sm /*7 /bin6 /boot.....中间省略....0 /proc.....中间省略....1 /tmp3859 /usr <==系统初期最大就是他77 /var# 这是个很常被使用的功能~利用通配符 * 来代表每个目录,# 如果想要检查某个目录下,哪个次目录占用最大的容量,可以用这个方法找出来# 值得注意的是,如果刚刚安装好 Linux 时,那么整个系统容量最大的应该是 /usr # 而 /proc 虽然有列出容量,但是那个容量是在内存中,不占硬盘空间。
文件操作
vi 创建文件
[root@www ~]# vi [+n /pattern -r] filename
选项与参数:
语句 | 意义 |
---|---|
vi filename | 打开或新建文件,并将光标置于第一行首 |
vi +n filename | 打开文件,并将光标置于第n行首 |
vi + filename | 打开文件,并将光标置于最后一行首 |
vi +/pattern filename | 打开文件,并将光标置于第一个与pattern匹配的串处 |
vi -r filename | 在上次正用vi编辑时发生系统崩溃,恢复filename |
vi filename….filename | 打开多个文件,依次进行编辑 |
touch
修改文件时间戳,或者新建一个不存在的文件。
[root@www ~]# touch [选项] filename
选项与参数:
符号 | 意义 |
---|---|
-a 或–time=atime或–time=access或–time=use | 只更改存取时间。 |
-c 或–no-create | 不建立任何文档。 |
-d | 使用指定的日期时间,而非现在的时间。 |
-f | 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。 |
-m 或–time=mtime或–time=modify | 只更改变动时间。 |
-r | 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。 |
-t | 使用指定的日期时间,而非现在的时间。 |
cp 复制文件或目录
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)[root@www ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
符号 | 意义 |
---|---|
-a | 相当於 -pdr 的意思,(常用) |
-i | 若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用) |
-r | 递回持续复制,用於目录的复制行为;(常用) |
-p | 连同文件的属性一起复制过去,而非使用默认属性(备份常用) |
-d | 若来源档为连结档的属性(link file),则复制连结档属性而非文件本身; |
-f | 为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次; |
-l | 进行硬式连结(hard link)的连结档创建,而非复制文件本身; |
-s | 复制成为符号连结档 (symbolic link),亦即『捷径』文件; |
-u | 若 destination 比 source 旧才升级 destination ! |
最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行
范例一:用root身份,将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
[root@www ~]# cp ~/.bashrc /tmp/bashrc[root@www ~]# cp -i ~/.bashrc /tmp/bashrccp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖# 重复作两次动作,由於 /tmp 底下已经存在 bashrc 了,加上 -i 选项后,# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 来二次确认呢!
范例二:变换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:
[root@www ~]# cd /tmp[root@www tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 . 不要忘[root@www tmp]# ls -l /var/log/wtmp wtmp-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp-rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp
注意上面的特殊字体,在不加任何选项的情况下,文件的某些属性/权限会改变;
那如果你想要将文件的所有特性都一起复制可以加上 -a如下所示:
[root@www tmp]# cp -a /var/log/wtmp wtmp_2[root@www tmp]# ls -l /var/log/wtmp wtmp_2-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2# 这就是 -a 的特性!
范例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下
[root@www tmp]# cp /etc/ /tmpcp: omitting directory `/etc' <== 如果是目录则不能直接复制,要加上 -r 的选项[root@www tmp]# cp -r /etc/ /tmp# -r 是可以复制目录,但是,文件与目录的权限可能会被改变# 所以,也可以利用『 cp -a /etc /tmp 』尤其是在备份的情况下
范例四:将范例一复制的 bashrc 创建一个连结档 (symbolic link)
[root@www tmp]# ls -l bashrc-rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc <==先观察一下文件情况[root@www tmp]# cp -s bashrc bashrc_slink[root@www tmp]# cp -l bashrc bashrc_hlink[root@www tmp]# ls -l bashrc*-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc <==与原始文件不太一样-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlinklrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc
rm 删除文件或目录
[root@www ~]# rm [-fir] 文件或目录
选项与参数:
符号 | 意义 |
---|---|
–time | 就是 force 的意思,忽略不存在的文件,不会出现警告信息; |
-i | 互动模式,在删除前会询问使用者是否动作 |
-r | 递回删除!最常用在目录的删除!这是非常危险的选项!!! 该目录或文件『肯定』会被 root 杀掉 |
[root@www tmp]# rm -i bashrc*# 注意那个星号,代表的是 0 到无穷多个任意字节!
范例二:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉
[root@www tmp]# rmdir /tmp/etcrmdir: etc: Directory not empty <== 删不掉啊!因为这不是空的目录![root@www tmp]# rm -r /tmp/etcrm: descend into directory `/tmp/etc'? y....(中间省略)....# 因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除!# 如果不想要继续按 y ,可以按下『 [ctrl]-c 』来结束 rm 的工作。# 这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:[root@www tmp]# \rm -r /tmp/etc
mv 移动文件与目录,或更名
[root@www ~]# mv [-fiu] source(源文件) destination(目标档)[root@www ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
符号 | 意义 |
---|---|
-f | force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖; |
-i | 若目标文件 (destination) 已经存在时,就会询问是否覆盖! |
-u | 若目标文件已经存在,且 source 比较新,才会升级 (update) |
范例一:复制一文件,创建一目录,将文件移动到目录中
[root@www ~]# cd /tmp[root@www tmp]# cp ~/.bashrc bashrc[root@www tmp]# mkdir mvtest[root@www tmp]# mv bashrc mvtest# 将某个文件移动到某个目录去
范例二:将刚刚的目录名称更名为 mvtest2
[root@www tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~# 其实在 Linux 底下还有命令,名称为 rename ,# 该命令专职进行多个档名的同时更名,并非针对单一档名变更,与mv不同。请man rename。
范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中
[root@www tmp]# cp ~/.bashrc bashrc1[root@www tmp]# cp ~/.bashrc bashrc2[root@www tmp]# mv bashrc1 bashrc2 mvtest2# 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录』# 意思是说,将所有的数据移动到该目录的意思
whereis
–>寻找特定文件
[root@www ~]# whereis [-bmsu] 文件或目录名
选项与参数:
符号 | 意义 |
---|---|
-b | 只找 binary 格式的文件 |
-m | 只找在说明档 manual 路径下的文件 |
-s | 只找 source 来源文件 |
-u | 搜寻不在上述三个项目当中的其他特殊文件 |
locate
–>可以部分名称搜索
[root@www ~]# locate [-ir] keyword
选项与参数:
符号 | 意义 |
---|---|
-i | 忽略大小写的差异; |
-r | 后面可接正规表示法的显示方式 |
find
[root@www ~]# find [PATH] [option] [action]
选项与参数:
- 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
符号 | 意义 |
---|---|
-mtime n | n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件; |
-mtime +n | 列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名; |
-mtime -n | 列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。 |
-newer file | file 为一个存在的文件,列出比 file 还要新的文件档名 |
范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
[root@www ~]# find / -mtime 0# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?# find / -mtime 3 有变动过的文件都被列出的意思!
范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
[root@www ~]# find /etc -newer /etc/passwd# -newer 用在分辨两个文件之间的新旧关系是很有用的!
- 与使用者或群组名称有关的参数:
符号 | 意义 |
---|---|
-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 的文件! |
范例三:搜寻 /home 底下属於 vbird 的文件
[root@www ~]# find /home -user vbird# 当我们要找出任何一个使用者在系统当中的所有文件时,就可以利用这 #命令将属於某个使用者的所有文件都找出来
范例四:搜寻系统中不属於任何人的文件
[root@www ~]# find / -nouser# 透过这个命令,可以轻易的就找出那些不太正常的文件。# 如果有找到不属於系统任何人的文件时,不要太紧张, # 那有时候是正常的~尤其是你曾经以原始码自行编译软件时。
- 与文件权限及名称有关的参数:
符号 | 意义 |
---|---|
-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 后面可再接额外的命令来处理搜寻到的结果。 |
将结果列印到萤幕上,这个动作是默认动作! |
范例五:找出档名为 passwd 这个文件
[root@www ~]# find / -name passwd# 利用这个 -name 可以搜寻档名!
范例六:找出 /var 目录下,文件类型为 Socket 的档名有哪些
[root@www ~]# find /var -type s# 这个 -type 的属性也很有帮助!尤其是要找出那些怪异的文件,# 例如 socket 与 FIFO 文件,可以用 find /var -type p 或 -type s 来找!
范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
[root@www ~]# find / -perm +7000 # 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,# 所以当然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,# 因此,就是 +7000
范例八:将上个范例找到的文件使用 ls -l 列出来~
[root@www ~]# find / -perm +7000 -exec ls -l {} \;# 注意到,那个 -exec 后面的 ls -l 就是额外的命令,命令不支持命令别名,# 所以仅能使用 ls -l 不可以使用 ll !
文件内容操作
cat 直接查阅一个文件
[root@www ~]# cat [-AbEnTv]
选项与参数:
符号 | 意义 |
---|---|
-A | 相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已; |
-b | 列出行号,仅针对非空白行做行号显示,空白行不标行号! |
-E | 将结尾的断行字节 $ 显示出来; |
-n | 列印出行号,连同空白行也会有行号,与 -b 的选项不同; |
-T | 将 [tab] 按键以 ^I 显示出来; |
-v | 列出一些看不出来的特殊字符 |
tac反向列示
与cat功能相同,但是是反向打印,最后一行–》第一行。
more 按页查阅文件
(一页一页翻动)
符号 | 意义 |
---|---|
空白键 (space) | 代表向下翻一页; |
Enter | 代表向下翻『一行』; |
/字串 | 代表在这个显示的内容当中,向下搜寻『字串』这个关键字; |
:f | 立刻显示出档名以及目前显示的行数; |
q | 代表立刻离开 more ,不再显示该文件内容。 |
b 或 [ctrl]-b | 代表往回翻页,不过这动作只对文件有用,对管线无用。 |
less 按页查阅文件
(一页一页翻动)
在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件符号 | 意义 |
---|---|
空白键 | 向下翻动一页; |
[pagedown] | 向下翻动一页; |
[pageup] | 向上翻动一页; |
/字串 | 向下搜寻『字串』的功能; |
?字串 | 向上搜寻『字串』的功能; |
n | 重复前一个搜寻 (与 / 或 ? 有关!) |
N | 反向的重复前一个搜寻 (与 / 或 ? 有关!) |
q | 离开 less 这个程序; |
head 取出前面几行
默认10行
[root@www ~]# head [-n number] 文件
选项与参数:
- | - |
---|---|
-n | 后面接数字,代表显示几行的意思 |
[root@www ~]# head /etc/man.config# 默认的情况中,显示前面十行!若要显示前 20 行,就得要这样:[root@www ~]# head -n 20 /etc/man.config
tail 取出后面几行
默认10行
[root@www ~]# tail [-n number] 文件
选项与参数:
- | - |
---|---|
-n | 后面接数字,代表显示几行的意思 |
-f | 表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测 |
[root@www ~]# tail /etc/man.config# 默认的情况中,显示最后的十行若要显示最后的 20 行,就得要这样:[root@www ~]# tail -n 20 /etc/man.config
几种压缩方式
后缀名 | 压缩方式 |
---|---|
*.Z | compress 程序压缩的文件; |
*.gz | gzip 程序压缩的文件; |
*.bz2 | bzip2 程序压缩的文件; |
*.tar | tar 程序打包的数据,并没有压缩过; |
*.tar.gz | tar 程序打包的文件,其中并且经过 gzip 的压缩 |
*.tar.bz2 | tar 程序打包的文件,其中并且经过 bzip2 的压缩 |
gzip
[root@www ~]# gzip [-cdtv#] 档名[root@www ~]# zcat 档名.gz
选项与参数:
符号 | 意义 |
---|---|
-c | 将压缩的数据输出到萤幕上,可透过数据流重导向来处理; |
-d | 解压缩的参数; |
-t | 可以用来检验一个压缩档的一致性~看看文件有无错误; |
-v | 可以显示出原文件/压缩文件的压缩比等资讯; |
-# | 压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6 |
gzip 压缩文件默认不保留原文件
范例:若保留原本的文件
[root@www tmp]# gzip man.config > man.config.gz
zcat为 显示压缩中的文档。
bzip2
用法同gzip
[root@www ~]# bzip2 [-cdkzv#] 档名[root@www ~]# bzcat 档名.bz2
选项与参数:
符号 | 意义 |
---|---|
-c | 将压缩的过程产生的数据输出到萤幕上! |
-d | 解压缩的参数 |
-k | 保留原始文件,而不会删除原始的文件喔! |
-z | 压缩的参数 |
-v | 可以显示出原文件/压缩文件的压缩比等资讯; |
-# | 与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快! |
tar 打包命令
[root@www ~]# tar [-j|-z] [cv] [-f 创建的档名] filename... 打包与压缩[root@www ~]# tar [-j|-z] [tv] [-f 创建的档名] 察看档名[root@www ~]# tar [-j|-z] [xv] [-f 创建的档名] [-C 目录] 解压缩
选项与参数:
符号 | 意义 |
---|---|
-c | 创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename) |
-t | 察看打包文件的内容含有哪些档名,重点在察看『档名』就是了; |
-x | 解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开 特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。 |
-j | 透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2 |
-z | 透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz |
-v | 在压缩/解压缩的过程中,将正在处理的档名显示出来! |
-f filename | -f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项罗! |
-C 目录 | 这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。 |
其他后续练习会使用到的选项介绍:
符号 | 意义 |
---|---|
-p | 保留备份数据的原本权限与属性,常用於备份(-c)重要的配置档 |
-P | 保留绝对路径,亦即允许备份数据中含有根目录存在之意; |
–exclude=FILE | 在压缩的过程中,不要将 FILE 打包! |
简单形式
– | – |
---|---|
压 缩 | tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 |
查 询 | tar -jtv -f filename.tar.bz2 |
解压缩 | tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录 |
模式
『一般模式』、『编辑模式』、『指令列命令模式』
一般模式:
以 vi 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
编辑模式:
在一般模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现『 INSERT 或 REPLACE 』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
指令列命令模式:
在一般模式当中,输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一行。在这个模式当中,可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等等的动作则是在此模式中达成的!
按键说明
第一部份:一般模式可用的按钮说明,光标移动、复制贴上、搜寻取代等
- 移动光标的方法
命令 | 意义 |
---|---|
h 或 向左箭头键(←) | 光标向左移动一个字符 |
j 或 向下箭头键(↓) | 光标向下移动一个字符 |
k 或 向上箭头键(↑) | 光标向上移动一个字符 |
l 或 向右箭头键(→) | 光标向右移动一个字符 |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] | 屏幕『向下』移动半页 |
[Ctrl] + [u] | 屏幕『向上』移动半页 |
+ | 光标移动到非空格符的下一列 |
+ | 光标移动到非空格符的上一列 |
n | 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n个字符。例如20 则光标会向后面移动 20 个字符距离。 |
0 或功能键[Home] | 这是数字『 0 』:移动到这一行的最前面字符处 (常用) $ 或功能键[End] |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个档案的最后一行(常用) |
nG | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) |
gg | 移动到这个档案的第一行,相当于 1G 啊! (常用) |
n<Enter> | n 为数字。光标向下移动 n 行(常用) |
- 搜寻与取代
命令 | 意义 |
---|---|
/word | 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用) |
?word | 向光标之上寻找一个字符串名称为 word 的字符串。 |
n | 这个 n 是英文按键。代表『重复前一个搜寻的动作』。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! |
N | 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 / vbird后,按下 N 则表示『向上』搜寻 vbird 。 |
使用 /word 配合 n 及 N 可以让你重复的找到一些你搜寻的关键词
命令 | 意义 |
---|---|
:n1,n2s/word1/word2/g | n1 与 n2 为数字。在第n1与n2行之间寻找word1这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』。(常用) |
:1,$s/word1/word2/g | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) |
:1,$s/word1/word2/gc | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
- 删除、复制与粘贴
命令 | 意义 |
---|---|
x, X | 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
nx | n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
dd | 删除游标所在的那一整列(常用) |
ndd | n为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用) |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d$ | 删除游标所在处,到该行的最后一个字符 |
d0 | 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用) |
y1G | 复制游标所在列到第一列的所有数据 |
yG | 复制游标所在列到最后一列的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p, p | p为将已复制的数据在光标下一行贴上,P则为贴在游标上一行(常用) |
J | 将光标所在列与下一列的数据结合成同一列 |
c | 重复删除多个数据,例如向下删除 10 行,[ 10cj ] |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
. | 意思是重复前一个动作的意思。(常用) |
第二部份:一般模式切换到编辑模式的可用的按钮说明
- 进入插入或取代的编辑模式
命令 | 意义 |
---|---|
i ,I | 进入插入模式(Insert mode):i 为『从目前光标所在处插入』, I 为『在目前所在行的第一个非空格符处开始插入』。 (常用) |
a, A | 进入插入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始插入』, A 为『从光标所在行的最后一个字符处开始插入』。(常用) |
o, O | 进入插入模式(Insert mode):o 为『在目前光标所在的下一行处插入新的一行』; O 为在目前光标所在处的上一行插入新的一行!(常用) |
r, R | 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用) |
[Esc] | 退出编辑模式,回到一般模式中(常用) |
上面这些按键中,在 vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。 特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入.
第三部份:一般模式切换到指令列模式的可用的按钮说明
- 指令列的储存、离开等指令
命令 | 意义 |
---|---|
:w | 将编辑的数据写入硬盘档案中(常用) |
:w! | 若文件属性为『只读』时,强制写入该档案。 |
:q | 离开 vi (常用) |
:q! | 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ | 这是大写的 Z 储存后离开! |
:w [filename] | 将编辑的数据储存成另一个档案(类似另存新档) |
:r [filename] | 在编辑的数据中,读入另一个档案的数据。 |
:n1,n2 w [filename] | 将 n1 到 n2 的内容储存成 filename 这个档案。 |
:! command | 暂时离开 vi 到指令列模式下执行 command 的显示结果!例如 |
『:! ls /home』 | 即可在 vi 当中察看 /home 底下以 ls 输出的档案信息! |
第四部份:多窗口功能
命令 | 意义 |
---|---|
:sp [filename] | 开启一个新窗口,如果有加 filename,表示在新窗口开启一个新档案,否则表示两个窗口为同一个档案内容(同步显示)。 |
[ctrl]+w+ j | 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 |
[ctrl]+w+↓ | j (或向下箭头键),则光标可移动到下方的窗口。 |
[ctrl]+w+ k | 同上,不过光标移动到上面的窗口。 |
[ctrl]+w+↑ | 同上 |
[ctrl]+w+ q | 就是 :q 结束 |
举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q