Linux学习笔记

学习笔记

学习鸟哥Linux的笔记

一.文件权限

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/mail
lrwxrwxrwx 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/test4
mkdir: 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 /etc
Filesystem            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 ~]# du
8       ./test4     <==每个目录都会列出来
8       ./test2
....中间省略....
12      ./.gconfd   <==包括隐藏文件的目录
220     .           <==这个目录(.)所占用的总量
# 直接输入 du 没有加任何选项时,则 du 会分析『目前所在目录』
# 的文件与目录所占用的硬盘空间。但是,实际显示时,仅会显示目录容量(不含文件),
# 此外,输出的数值数据为 1K 大小的容量单位。

范例二:同范例一,但是将文件的容量也列出来

[root@www ~]# du -a
12      ./install.log.syslog   <==有文件的列表了
8       ./.bash_logout
8       ./test4
8       ./test2
....中间省略....
12      ./.gconfd
220     .

范例三:检查根目录底下每个目录所占用的容量

[root@www ~]# du -sm /*
7       /bin
6       /boot
.....中间省略....
0       /proc
.....中间省略....
1       /tmp
3859    /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/bashrc
cp: 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/ /tmp
cp: 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_hlink
lrwxrwxrwx 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/etc
rmdir: etc: Directory not empty  <== 删不掉啊!因为这不是空的目录!
[root@www tmp]# rm -r /tmp/etc
rm: 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 后面可再接额外的命令来处理搜寻到的结果。
-print 将结果列印到萤幕上,这个动作是默认动作!

范例五:找出档名为 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 欲解压缩的目录

vim编辑器

模式

『一般模式』、『编辑模式』、『指令列命令模式』

一般模式:

以 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

posted @ 2016-08-16 13:19  线团  阅读(257)  评论(0编辑  收藏  举报