【N25第二周作业】Linux文件管理命令以及文件名通配glob

1、Linux下的文件管理类命令使用方法和示例

Linux下的文件管理类命令有如下列举的一些:

目录管理命令:cd,pwd,ls,mkdir,rmdir,tree
文件管理命令:touch,cp,mv,rm,stat
查看:more,less,head,tail,cat,tac,lsattr,whereis,which
权限:chmod,chown,chattr,umask
其他:ln,tee,locate
编辑:vi,vim

cd:目录切换命令

[root@localhost ~]# cd /etc    #切换到/etc目录下
[root@localhost etc]#cd -      #返回切换到/etc之前所在的目录
/root

[root@localhost ~]# cd ../     #返回上一层目录
[root@localhost /]# 

[root@localhost /]# cd         #切换到用户家目录
[root@localhost ~]#
[root@localhost ~]# cd /       
[root@localhost /]# cd ~       #切换到用户家目录
[root@localhost ~]#

[root@localhost ~]# cd /etc/sysconfig/
[root@localhost sysconfig]# cd ../../   #返回上上层目录
[root@localhost /]#

pwd:显示当前目录

-L, –logical:显示当前目录
-P, –physical:显示当前目录的实际物理地址
–help 帮助
–version 版本

准备环境:将/var/spool/mail 连接到/data/mail下

[root@localhost data]# ln -sv /var/spool/mail/ /data/mail  
‘/data/mail’ -> ‘/var/spool/mail/’
[root@localhost data]# ll
total 0
lrwxrwxrwx. 1 root root 16 Dec 10 07:32 mail -> /var/spool/mail/

[root@localhost data]# cd mail/
[root@localhost mail]# pwd          #显示当前目录
/data/mail
[root@localhost mail]# pwd -P       #目录是软连接,显示实际的物理地址
/var/spool/mail
[root@localhost mail]# pwd -L       #-L显示,逻辑地址
/data/mail

ls:显示目录下的文件信息

用法:ls [选项]… [文件]…

-a, –all 不隐藏任何以. 开始的项目
-A, –almost-all 列出除. 及.. 以外的任何项目
–author 与-l 同时使用时列出每个文件的作者
-b, –escape 以八进制溢出序列表示不可打印的字符
-C 每栏由上至下列出项目
-d, –directory 当遇到目录时列出目录本身而非目录内的文件
-G, –no-group 以一个长列表的形式,不输出组名
-i, –inode 显示每个文件的inode 号
-l 使用较长格式列出信息
-h, –human-readable 与-l 一起,以易于阅读的格式输出文件大小 -r, –reverse 逆序排列
-R, –recursive 递归显示子目录
-s, –size 以块数形式显示每个文件分配的尺寸
-S 根据文件大小排序
-t 根据修改时间排序
-T, –tabsize=宽度 指定制表符(Tab)的宽度,而非8 个字符
-t sort by modification time, newest first
-T, –tabsize=COLS assume tab stops at each COLS instead of 8
-u 同-lt 一起使用:按照访问时间排序并显示
同-l一起使用:显示访问时间并按文件名排序
其他:按照访问时间排序
-U 不进行排序;按照目录顺序列出项目
-v 在文本中进行数字(版本)的自然排序
-w, –width=COLS 自行指定萤幕宽度而不使用目前的数值
-x 逐行列出项目而不是逐栏列出
-X 根据扩展名排序
-1 每行只列出一个文件
–help 显示此帮助信息并退出
–version 显示版本信息并退出

[root@localhost data]# ls
a  mail
[root@localhost data]# ls -l    #显示目录下文件和目录的详细信息
total 0
-rw-r--r--. 1 root root  0 Nov  1 06:05 a
lrwxrwxrwx. 1 root root 16 Dec 10 07:32 mail -> /var/spool/mail/
[root@localhost data]# ll
total 0
-rw-r--r--. 1 root root  0 Nov  1 06:05 a
lrwxrwxrwx. 1 root root 16 Dec 10 07:32 mail -> /var/spool/mail/

[root@localhost data]# ls -a   #显示所有文件包括隐藏文件和隐藏目录
.  ..  a  .abc  mail  .ssh
[root@localhost data]# ls -A   #除去.和..不显示的其他文件
a  .abc  mail  .ssh
[root@localhost data]# ls -A -1    #每行只显示一个文件或者目录
a
.abc
mail
.ssh
[root@localhost data]# ls -lh /etc/ssh/       #不以字节显示
total 276K
-rw-r--r--. 1 root root     237K Nov 20  2015 moduli
-rw-r--r--. 1 root root     2.2K Nov 20  2015 ssh_config
-rw-------. 1 root root     4.3K Nov 20  2015 sshd_config
-rw-r-----. 1 root ssh_keys  227 Nov  1 03:53 ssh_host_ecdsa_key
-rw-r--r--. 1 root root      162 Nov  1 03:53 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys  387 Nov  1 03:53 ssh_host_ed25519_key
-rw-r--r--. 1 root root       82 Nov  1 03:53 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys 1.7K Nov  1 03:53 ssh_host_rsa_key
-rw-r--r--. 1 root root      382 Nov  1 03:53 ssh_host_rsa_key.pub

mkdir:创建目录

用法:mkdir [选项] 目录名 (如不存在则创建)

长选项必须使用的参数对于短选项时也是必需使用的。
-m, –mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask
-p, –parents 递归创建目录,但即使这些目录已存在也不当作错误处理
-v, –verbose 每次创建新目录都显示信息
-Z, –context=CTX 将每个创建的目录的SELinux 安全环境设置为CTX
–help 显示此帮助信息并退出
–version 显示版本信息并退出

[root@localhost test]# mkdir test         #创建test目录
[root@localhost test]# ls
test
[root@localhost test]# mkdir test         #有test目录再创建时会提示失败
mkdir: cannot create directory ‘test’: File exists

[root@localhost test]# mkdir -v  test1    #显示创建过程
mkdir: created directory ‘test1’

[root@localhost test]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 10 08:25 test
drwxr-xr-x. 2 root root 6 Dec 10 08:25 test1
[root@localhost test]# mkdir -m a=rw test2    #创建指定属性的目录
[root@localhost test]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 10 08:25 test
drwxr-xr-x. 2 root root 6 Dec 10 08:25 test1
drw-rw-rw-. 2 root root 6 Dec 10 08:26 test2

[root@localhost test]# mkdir -p test3/test4  #递归创建目录
[root@localhost test]# tree test3
test3
└── test4
1 directory, 0 files

#递归创建,并且可以同时创建多个子目录
[root@localhost test]# mkdir -pv test5/{test6,test7,test8}
mkdir: created directory ‘test5’
mkdir: created directory ‘test5/test6’
mkdir: created directory ‘test5/test7’
mkdir: created directory ‘test5/test8’

rmdir:删除指定目录

-p, –parents 递归删除
-v, –verbose 输出处理的目录详情
–help 显示此帮助信息并退出
–version 显示版本信息并退出

[root@localhost test]# tree ./
./
├── test
├── test1
├── test2
├── test3
│   └── test4
└── test5
    ├── test6
    ├── test7
    └── test8
9 directories, 0 files
[root@localhost test]# rmdir test     
[root@localhost test]# rmdir test3    #不能直接删除目录下包含文件的目录
rmdir: failed to remove ‘test3’: Directory not empty
[root@localhost test]# rmdir -p test3
rmdir: failed to remove ‘test3’: Directory not empty
[root@localhost test]# rmdir -p test3/test4/

[root@localhost test]# rmdir -pv test5/*  递归删除并显示
rmdir: removing directory, ‘test5/test6’
rmdir: removing directory, ‘test5’
rmdir: failed to remove directory ‘test5’: Directory not empty
rmdir: removing directory, ‘test5/test7’
rmdir: removing directory, ‘test5’
rmdir: failed to remove directory ‘test5’: Directory not empty
rmdir: removing directory, ‘test5/test8’
rmdir: removing directory, ‘test5’

tree:列出目录的层级结构

参数:

-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-L 层级显示
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用"?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外

[root@localhost test]# tree
.
├── test1
├── test2
└── test3
    ├── test4
    │?? └── test6.sh
    └── test5

5 directories, 1 file
[root@localhost test]# tree -a         #显示所有文件和目录
.
├── test1
├── test2
├── test3
│?? ├── test4
│?? │?? └── test6.sh
│?? └── test5
└── .test6

6 directories, 1 file
[root@localhost test]# tree -d      #只显示文件
.
├── test1
├── test2
└── test3
    ├── test4
    └── test5

5 directories

touch:创建文件

用法:touch [选项]… 文件…
将每个文件的访问时间和修改时间改为当前时间。
不存在的文件将会被创建为空文件,除非使用-c 或-h 选项。
如果文件名为"-"则特殊处理,更改与标准输出相关的文件的访问时间。

长选项必须使用的参数对于短选项时也是必需使用的。

-a 只更改访问时间
-c, –no-create 不创建任何文件
-d, –date=字符串 使用指定字符串表示时间替代当前时间
-f (忽略)
-h, –no-dereference 会影响符号链接本身,替代符号链接所指示的目的地
(当系统支持更改符号链接的所有者时,此选项才有用)
-m 只更改修改时间
-r, –reference=文件 使用指定文件的时间属性替代当前时间
-t STAMP 使用[[CC]YY]MMDDhhmm[.ss] 格式的时间替代当前时间
–time=WORD 使用WORD 指定的时间:access、atime、use 都等于-a
选项的效果,而modify、mtime 等于-m 选项的效果
–help 显示此帮助信息并退出
–version 显示版本信息并退出

请注意,-d 和-t 选项可接受不同的时间/日期格式。

[root@localhost test4]# date
Sun Dec 11 22:59:52 CST 2016
[root@localhost test4]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 11 22:52 test6.sh
[root@localhost test4]# touch test6.sh      #修改最近访问时间
[root@localhost test4]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 11 22:59 test6.sh

[root@localhost test4]# touch -c -t 12011201 test6.sh    #修改到指定时间
[root@localhost test4]# ll
total 0
-rw-r--r--. 1 root root 0 Dec  1 12:01 test6.sh
[root@localhost test4]# touch -d "2 days ago" test6.sh 
[root@localhost test4]# ll
total 0
-rw-r--r--. 1 root root 0 Dec  9 23:01 test6.sh

stat:查看文件时间属性

用法:stat [选项]… 文件…
显示文件或文件系统的状态。

 -L, --dereference     跟随链接
  -f, --file-system     显示文件系统状态而非文件状态
  -c --format=格式      使用指定输出格式代替默认值,每用一次指定格式换一新行
      --printf=格式     类似 --format,但是会解释反斜杠转义符,不使用换行作
                                输出结尾。如果您仍希望使用换行,可以在格式中
                                加入"\n"
  -t, --terse           使用简洁格式输出
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

有效的文件格式序列(不使用 --file-system):

  %a    八进制权限
  %A   用可读性较好的方式输出权限
  %b   计算已分配块数(参见%B)
  %B   以字节为单位输出%b 所报告的每个块的大小
  %C   SELinux 安全环境字符串
  %d    十进制设备编号
  %D    十六进制设备编号
  %f    十六进制原始模式
  %F    文件类型
  %g    文件的属组ID
  %G    文件的属组组名
  %h    硬链接数量
  %i    Inode 编号
  %m    挂载点
  %n    文件名
  %N    如果对象是一个符号链接,显示引用到的其它文件名
  %o    I/O 块大小
  %s    总计大小,以字节为单位
  %t    十六进制主设备类型
  %T    十六进制子设备类型
  %u    文件的属主ID
  %U    文件的属主用户名
  %w    文件创建时间,若未知则显示"-"
  %W    从UNIX 元年起以秒计的文件创建时间,若未知则显示"-"
  %x    上次访问时间
  %X    从UNIX 元年起以秒计的上次访问时间
  %y    上次修改时间
  %Y    从UNIX 元年起以秒计的上次修改时间
  %z    上次更改时间
  %Z    从UNIX 元年起以秒计的上次更改时间

有效的文件系统格式序列:

  %a    非超级用户可用的剩余块数
  %b    文件系统的总数据块数
  %c    文件系统中文件节点总数
  %d    文件系统中空闲文件节点数
  %f    文件系统中空闲块数
  %i    十六进制文件系统ID
  %I    允许的文件名最大长度
  %n    文件名
  %s    块大小(用于快速传输)
  %S    基本块大小(用于块计数)
  %t    十六进制类型描述
  %T    可读性较好的类型描述
[root@localhost test4]# stat test6.sh 
  File: ‘test6.sh’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 202447740   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2016-12-09 23:01:40.693888081 +0800
Modify: 2016-12-09 23:01:40.693888081 +0800
Change: 2016-12-11 23:01:40.693032017 +0800
 Birth: -
[root@localhost test4]# touch test6.sh 
[root@localhost test4]# stat test6.sh 
  File: ‘test6.sh’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 202447740   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2016-12-11 23:05:36.807039471 +0800
Modify: 2016-12-11 23:05:36.807039471 +0800
Change: 2016-12-11 23:05:36.807039471 +0800
 Birth: -
 
 [root@localhost test4]# cat test6.sh 
sdas
[root@localhost test4]# date
Sun Dec 11 23:10:19 CST 2016
[root@localhost test4]# stat test6.sh 
  File: ‘test6.sh’
  Size: 5         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 202447743   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2016-12-11 23:10:16.635048305 +0800
Modify: 2016-12-11 23:09:05.377046056 +0800
Change: 2016-12-11 23:09:05.378046056 +0800
 Birth: -

cp:复制文件或者目录

用法:cp [选项]… [-T] 源文件 目标文件
 或:cp [选项]… 源文件… 目录
 或:cp [选项]… -t 目录 源文件…
将源文件复制至目标文件,或将多个源文件复制至目标目录。

长选项必须使用的参数对于短选项时也是必需使用的。
  -a, --archive			等于-dR --preserve=all
      --backup[=CONTROL		为每个已存在的目标文件创建备份
  -b				类似--backup 但不接受参数
      --copy-contents		在递归处理是复制特殊文件内容
  -d				等于--no-dereference --preserve=links
  -f, --force			如果目标文件无法打开则将其移除并重试(当 -n 选项
					存在时则不需再选此项)
  -i, --interactive		覆盖前询问(使前面的 -n 选项失效)
  -H				跟随源文件中的命令行符号链接
  -l, --link			链接文件而不复制
  -L, --dereference		总是跟随符号链接
  -n, --no-clobber		不要覆盖已存在的文件(使前面的 -i 选项失效)
  -P, --no-dereference		不跟随源文件中的符号链接
  -p				等于--preserve=模式,所有权,时间戳
      --preserve[=属性列表	保持指定的属性(默认:模式,所有权,时间戳),如果
					可能保持附加属性:环境、链接、xattr 等
  -c                           same as --preserve=context
      --sno-preserve=属性列表	不保留指定的文件属性
      --parents			复制前在目标目录创建来源文件路径中的所有目录
  -R, -r, --recursive		递归复制目录及其子目录内的所有内容
      --reflink[=WHEN]		控制克隆/CoW 副本。请查看下面的内如。
      --remove-destination	尝试打开目标文件前先删除已存在的目的地
					文件 (相对于 --force 选项)
      --sparse=WHEN		控制创建稀疏文件的方式
      --strip-trailing-slashes	删除参数中所有源文件/目录末端的斜杠
  -s, --symbolic-link		只创建符号链接而不复制文件
  -S, --suffix=后缀		自行指定备份文件的后缀
  -t,  --target-directory=目录	将所有参数指定的源文件/目录
                                           复制至目标目录
  -T, --no-target-directory	将目标目录视作普通文件
  -u, --update                 copy only when the SOURCE file is newer
                                 than the destination file or when the
                                 destination file is missing
  -v, --verbose                explain what is being done
  -x, --one-file-system        stay on this file system
  -Z, --context=CONTEXT        set security context of copy to CONTEXT
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出
[root@localhost www]# cp -p test.rb /home/test   #将test.rb copy到test目录,并且保留原文件的属性

[root@localhost www]# cp -r Dir/ /home/test      #将Dir目录copy到test目录下

[root@localhost www]# cp -fr Dir/* /home/test    #将Dir下面的所有文件强制copy到test目录下

[root@localhost www]# cp test.rb{,.bak}          #备份test.rb,并在尾部加上.bak后缀

mv:

用法:mv [选项]… [-T] 源文件 目标文件
 或:mv [选项]… 源文件… 目录
 或:mv [选项]… -t 目录 源文件…
将源文件重命名为目标文件,或将源文件移动至指定目录。

长选项必须使用的参数对于短选项时也是必需使用的。
      --backup[=CONTROL]       为每个已存在的目标文件创建备份
  -b                           类似--backup 但不接受参数
  -f, --force                  覆盖前不询问
  -i, --interactive            覆盖前询问
  -n, --no-clobber             不覆盖已存在文件
如果您指定了-i、-f、-n 中的多个,仅最后一个生效。
      --strip-trailing-slashes  去掉每个源文件参数尾部的斜线
  -S, --suffix=SUFFIX           替换常用的备份文件后缀
  -t, --target-directory=DIRECTORY      将所有参数指定的源文件或目录
                                        移动至 指定目录
  -T, --no-target-directory     将目标文件视作普通文件处理
  -u, --update                  只在源文件文件比目标文件新,或目标文件
                                不存在时才进行移动
  -v, --verbose         详细显示进行的步骤
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出
[root@linux ~]# mv abc abc.php  #将abc移动成abc.php

[root@linux ~]# mv test.php{,.sh}  #将test.php增加后辍

[tank@localhost ~]$ mv -t ./database 1.sql    #将1.sql移动到database目录下

[tank@localhost ~]$ mv aaa bbb  #将目录或者文件重命名,如果存在bbb目录,则是将aaa移到bbb目录下

rm:删除命令

用法:rm [选项]… 文件…
删除 (unlink) 文件。

  -f, --force   强制删除。忽略不存在的文件,不提示确认
  -i       在删除前需要确认
  -r, -R, --recursive   递归删除目录及其内容
  -v, --verbose         详细显示进行的步骤
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

默认时,rm 不会删除目录。使用--recursive(-r 或-R)选项可删除每个给定
的目录,以及其下所有的内容。
[root@localhost ~]# rm test.php        #删除文件需要确认

[root@localhost ~]# rm -f test.php     #强制删除文件不确认

[root@localhost ~]# rm -rfv ./test     #强制删除当前的test目录,并显示删除的详细过程

more:多屏显示文本命令

下面介绍命令行选项.选项可以从环境变量MORE中获取(要确保它们以短横线开头 (``-)),但是命令行选项能够覆盖它们.
-num 这个选项指定屏幕的行数(以整数表示). 
-d   让more给用户显示提示信息"[Press space to continue,'q' to quit.]",当 用户按下其他键时,显示"[Press 'h' for instructions.]",而不是扬声器鸣笛. 
-l   More在通常情况下把^L (form feed)当做特殊字符,遇到这个字符就会暂停.-l 选项可以阻止这种特性. 
-f   使 more 计数逻辑行,不是屏幕行 (就是说,长行不会断到下一行). 
-p   不卷屏,而是清除整个屏幕,然后显示文本. 
-c   不卷屏,而是从每一屏的顶部开始显示文本, 每显示完一行,就清除 这一行的 剩余部分. 
-s   把重复的空行压缩成一个空行. 
-u   防止下划线. 
+/   在显示每个文件前,搜索+/选项指定的文本串. 
+num 从行号 num  开始显示.
[[ ]] 
  命令 (COMMAND) 
-------------------------------------------------------------------------
more的交互命令基于vi(1). 有些命令以一个十进制数字开始,在下面的描述里 称之为k. 后面的描述中, ^X指control-X.
h or ? 帮助:显示这些命令的摘要.你如果忘掉所有其他的命令,请记住这个. 
SPACE 显示接下来的 k 行文本. 缺省值是当前的屏幕大小. 
z 显示接下来的 k 行文本. 缺省值是当前的屏幕大小. 参数成为新的缺省值. 
RETURN 显示接下来的 k 行文本. 缺省值是 1. 参数成为新的缺省值. 
d or ^D 卷屏 k 行. 缺省值是当前的卷屏大小, 初始化为 11. 参数成为新的缺省值. 
q 或 Q 或 INTERRUPT 退出. 
s 向前跳过 k 行文本. 缺省值是 1. 
f 向前跳过 k 屏文本. 缺省值是 1. 
b or ^B 向后跳回 k 屏文本. 缺省值是 1. 
= 显示当前行号. 
------------------------------------------------------------------------
/ pattern 搜索第 k 个符合 正则表达式的文本串. 缺省值是 1. 
n 搜索最后第 k 个符合正则表达式的文本串. 缺省值是 1. 
! or :! 在子shell中执行 . 
v 启动 /usr/bin/vi, 指向当前行. 
^L 刷新屏幕. 
:n 跳到后面第 k 个文件. 缺省值是 1. 
:p 跳到前面第 k 个文件. 缺省值是 1. 
:f 显示当前文件名 和 行号. 
. 重复上次命令.
[[ ]] 

  环境 (ENVIRONMENT)

less:

less 与more命令类似,但可以通过翻页键查看上下页的内容

-b<缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o<文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x<数字> 将“tab”键显示为规定的数字空格

命令内部操作

按键功能如下:
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行 

1) 向前搜索

    / : 使用一个模式进行搜索,并定位到下一个匹配的文本
    n : 向前查找下一个匹配的文本
    N : 向后查找前一个匹配的文本

2) 向后搜索

    ? : 使用模式进行搜索,并定位到前一个匹配的文本
    n : 向后查找下一个匹配的文本
    N : 向前查找前一个匹配的文本

2 全屏导航

    ctrl + F :向前移动一屏
    ctrl + B :向后移动一屏
    ctrl + D :向前移动半屏
    ctrl + U :向后移动半屏

3 单行导航

    j : 向前移动一行
    k : 向后移动一行

4 其它导航

    G : 移动到最后一行
    g : 移动到第一行
    q / ZZ : 退出 less 命令

5 编辑文件

    v : 进入编辑模式,使用配置的编辑器编辑当前文件

6 标记导航

    当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置。

    ma : 使用 a 标记文本的当前位置
    'a : 导航到标记 a 处

7 浏览多个文件

    方式一,传递多个参数给 less,就能浏览多个文件。

    less file1 file2

    方式二,正在浏览一个文件时,使用 :e 打开另一个文件。

    less file1
    :e file2

     
    当打开多个文件时,使用如下命令在多个文件之间切换

    :n - 浏览下一个文件
    :p - 浏览前一个文件

head:输出文件的前N(默认是10)行

用法:head [选项]... [文件]...
将每个指定文件的头10 行显示到标准输出。
如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头。
如果不指定文件,或者文件为"-",则从标准输入读取数据。

长选项必须使用的参数对于短选项时也是必需使用的。
  -c,  --bytes=[-]K     显示每个文件的前K 字节内容;
                        如果附加"-"参数,则除了每个文件的最后K字节数据外
                        显示剩余全部内容
  -n, --lines=[-]K      显示每个文件的前K 行内容;
                        如果附加"-"参数,则除了每个文件的最后K 行外显示
                        剩余全部内容
  -q, --quiet, --silent 不显示包含给定文件名的文件头
  -v, --verbose         总是显示包含给定文件名的文件头
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

tail:输出文件的末尾N(默认是10)行

在标准输出上显示每个FILE的最后10行. 如果多于一个FILE,会一个接一个地显示, 并在每个文件显示的首部给出文件名. 如果没有FILE,或者FILE是-,那么就从标准输入上读取.

--retry
    即使tail开始时就不能访问 或者在tail运行后不能访问,也仍然不停地尝试打开文件. -- 只与-f合用时有用.
-c, --bytes=N
    输出最后N个字节
-f, --follow[={name|descriptor}]
    当文件增长时,输出后续添加的数据; -f, --follow以及 --follow=descriptor 都是相同的意思
-n, --lines=N
    输出最后N行,而非默认的最后10行
--max-unchanged-stats=N
    参看texinfo文档(默认为5)
--max-consecutive-size-changes=N
    参看texinfo文档(默认为200)
--pid=PID
    与-f合用,表示在进程ID,PID死掉之后结束.
-q, --quiet, --silent
    从不输出给出文件名的首部
-s, --sleep-interval=S
    与-f合用,表示在每次反复的间隔休眠S秒
-v, --verbose
    总是输出给出文件名的首部
--help
    显示帮助信息后退出
--version
    输出版本信息后退出

cat:

用法:cat [选项] [文件]…
将[文件]或标准输入组合输出到标准输出。

-A, --show-all           等价于 -vET
  -b, --number-nonblank    对非空输出行编号
  -e                       等价于 -vE
  -E, --show-ends          在每行结束处显示 $
  -n, --number             对输出的所有行编号
  -s, --squeeze-blank      不输出多行空行
  -t                       与 -vT 等价
  -T, --show-tabs          将跳格字符显示为 ^I
  -u                       (被忽略)
  -v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
      --help     显示此帮助信息并退出
      --version  输出版本信息并退出

如果[文件]缺省,或者[文件]为 - ,则读取标准输入。
[root@localhost ~]# cat test        #普通输出
1111111111


2222222222

3333333333

[root@localhost ~]# cat -n test     #开头显示行号
     1  1111111111
     2
     3
     4  2222222222
     5
     6  3333333333
	 
[root@localhost ~]# cat -E test     #以$结束
1111111111$
$
$
2222222222$
$
3333333333$

[root@localhost ~]# cat -s test     #超过二个空行,合并成一个
1111111111

2222222222

3333333333

[root@localhost ~]# cat -ns test   #去空行,加行号
     1  1111111111
     2
     3  2222222222
     4
     5  3333333333
# cat > aa  #从键盘录入内容到文件,回车是保存,退出Ctrl+z
4234234
234234
^Z
[4]+  Stopped                 cat > aa

# cat file1 file2 > file  #合并二个文件为一个

# cat > aa  #从键盘录入内容到文件,回车是保存,退出Ctrl+z
4234234
234234
^Z
[4]+  Stopped                 cat > aa

# cat file1 file2 > file  #合并二个文件为一个

脚本做目录时经常用到:

cat << EOF
......
EOF
示例:
cat  << EOF 
please choice your option:
cpu) show cpu info
mem) show mem info
disk) show disk info
quit) quit
EOF

tac:

用法:tac [选项]... [文件]...
将每个指定文件按行倒置并写到标准输出。
如果不指定文件,或文件为"-",则从标准输入读取数据。

长选项必须使用的参数对于短选项时也是必需使用的。
  -b, --before                  在行前而非行尾添加分隔标志
  -r, --regex                   将分隔标志视作正则表达式来解析
  -s, --separator=字符串        使用指定字符串代替换行作为分隔标志
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出
[root@localhost www]# cat test
1234
abcd

[root@localhost www]# rev test
4321
dcba

[root@localhost www]# tac test
abcd
1234

chattr:修改特殊权限

chattr 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性
符号模式有+-=[ASacdisu]几种格式.
操作符`+'用来在文件已有属性的基础上增加选定的属性; `-'用来去掉文件上的选定的属性;而`='用来指定该文件的唯一属性.
字符`ASacdisu'用作文件新属性的选项: 不更新atime(A),同步更新(S),只能添加(a), 压缩(c),不可变(i),不可转移(d),删除保护(s)以及不可删除(u).

-R
    递归地修改目录以及其下内容的属性. 如果在递归目录时遇到了符号链接,遍历将跳过.
-V
    详尽地给出chattr的输出信息并打印出程序的版本.
-vversion
    设置文件系统的版本.

当修改设置了'A'属性的文件时,它的atime记录不会改变. 这可以在笔记本电脑系统中避免某些磁盘I/O处理.
设置了`a'属性的文件只能在添加模式下打开用于写入. 只有超级用户可以设置或清除该属性.
设置了`c'属性的文件在磁盘上由内核自动进行压缩处理. 从该文件读取时返回的是未压缩的数据. 对该文件的一次写入会在保存它们到磁盘之前进行数据压缩.
设置了`d'属性的文件不能对其运行 dump(8) 程序进行备份.
设置了`i'属性的文件不能进行修改:你既不能删除它, 也不能给它重新命名,你不能对该文件创建链接, 而且也不能对该文件写入任何数据. 只有超级用户可以设置或清除该属性.
当删除设置了`s'属性的文件时,将对其数据块清零 并写回到磁盘上.
当修改设置了`S'属性的文件时, 修改会同步写入到磁盘上;这与应用 到文件子系统上的`sync'挂载选项有相同的效果.
当删除设置了`u'属性的文件时, 将会保存其内容. 这使得用户可以请求恢复被删除的文件.

lsattr:查看特殊权限

lsattr 显示文件在Linux第二扩展文件系统上的特有属性

-R
    递归地列出目录以及其下内容的属性.
-V
    显示程序版本.
-a
    列出目录中的所有文件,包括以`.'开头的文件的属性.
-d
    以列出其它文件的方式那样列出目录的属性, 而不列出其下的内容.
-v
    显示文件版本.
[root@localhost test]# lsattr nginx.conf       #查看特殊权限
---------------- nginx.conf
[root@localhost test]# chattr +i nginx.conf    #设置文件不能被修改
[root@localhost test]# lsattr nginx.conf 
----i----------- nginx.conf
[root@localhost test]# echo "abc" >nginx.conf 
-bash: nginx.conf: Permission denied

[root@localhost test]# chattr -i nginx.conf    #去掉-i权限
[root@localhost test]# lsattr nginx.conf 
---------------- nginx.conf
[root@localhost test]# echo "abc" >nginx.conf 
[root@localhost test]# cat nginx.conf 
abc

chacl:

chacl是用来更改文件或目录的访问控制列表的命令。其和chmod有异曲同工之妙。但是比chmod更为强大,更为精细。

chmod只能把权限分为三种:用户,组,其它人。通过chmod你可以指定文件属主的权限,文件所在组的用户的权限,其它人的权限。

如果有这样的需求,通过chmod能搞定吗??如果A用户的文件只想给B看。通过chmod能不能搞定。当然你可能讲把A,B放到一个组里面就可以了。但是你这样就会限制了别的用户不能加入这个组。通过chacl可以轻松的搞定这个问题。

chacl命令的格式是: chacl acl filename1 filename2

acl的英文是 the access control list,我就直译为存取控制列表吧。chacl就是一个改变文件存取控制列表的一个命令。

acl是一个可以被acl_from_text程序分析出各用户权限的字符串。该字符串用逗号分隔成多个片段

每个片段的形式都如:tag:name:perm

tag可以是下面形式的一种:
    "user" (or "u")
        表示这是一个用户的ACL条目。
    "group" (or "g")
        表示这是一个用户组的ACL条目。
    "other" (or "o")
        表示这是其它的ACL条目。即没有在ACL指定的用户和组的ACL条目。
    "mask" (or "m")
        表示这是一个掩码的ACL条目。在指定其它非用户属主的ACL权限时,这个掩码条目必须被指定,否则执行chacl命令会出错。
    
name可以是用户名或组名。如果不指定,那么默认是给文件或目录的属主或用户组指定acl权限。当然name也可以是用户的uid或者组的gid。

perm是指该用户或组所具有的权限,它是由"rwx"组成的一个字符串,什么意思当然大家都明白了。如果要使该用户或组不具有某种权限,简单的以"-"代替指定的字母就可以了。例如"r-x"是只具有读,执行权限。

该命令具有的选项不多,就具体的介绍下每个选项的含义吧。
-b   表明这里有两个acl需要修改,前一个acl是文件的acl,后一个是目录的默认acl。
-d   设定目录的默认acl,这个选项是比较有用的。如果指定了目录的默认acl,在这个目录下新建的文件或目录都会继承目录的acl。
-R   只删除文件的acl
-D   只删除目录的默认acl,是-d的反向操作。
-B   删除文件和目录默认的acl。是-b的反向操作。
-r   递归地修改文件和目录的acl权限。
-l   列出文件和目录的acl权限。

whereis:查找命令可执行文件和man文档位置

whereis命令的语法:whereis [-bmsu] [BMS 目录名 -f ] 文件名

whereis命令的各选项含义如下:

-b   定位可执行文件。
-m   定位帮助文件。
-s   定位源代码文件。
-u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B   指定搜索可执行文件的路径。
-M   指定搜索帮助文件的路径。
-S   指定搜索源代码文件的路径。
[root@localhost test]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@localhost test]# whereis -b ls
ls: /usr/bin/ls
[root@localhost test]# whereis -m ls
ls: /usr/share/man/man1/ls.1.gz
[root@localhost test]# whereis -s ls
ls:

which:查找命令环境变量中的文件

-a   查找全部内容,而非第一个文件-n   <文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。 
-p   <文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。 
-w  指定输出时栏位的宽度。 
-V  显示版本信息。
[root@localhost test]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls
[root@localhost test]# which find
/usr/bin/find

locate:超找文件

用法: locate [OPTION]… [PATTERN]… 在mlocate数据库中搜索条目.

-i, --ignore-case 匹配模式时忽略大小写区别
-b, --basename 匹配唯一的路径名称的基本文件名
-c, --count 只显示找到条目的号码
-d, --database DBPATH 用 DBPATH 替代默认的数据库(/var/lib/mlocate/mlocate.db)
-e, --existing 只显示当前存在的文件条目
-L, --follow 当文件存在时跟随蔓延的符号链接 (默认)
-h, --help 显示本帮助
-l, --limit, -n LIMIT 限制为 LIMIT项目的输出 (或 计数) 
-m, --mmap 忽略向后兼容性
-P, --nofollow, -H 当检查文件时不跟随蔓延的符号链接
-0, --null 输出时以 NUL 分隔项目
-S, --statistics 不搜索项目,显示有关每个已用数据库的统计信息
-q, --quiet 不报告关于读取数据库的错误消息
-r, --regexp REGEXP 搜索基本正则表达式 REGEXP 来代替模式
--regex 模式是扩展正则表达式
-s, --stdio 忽略向后兼容性
-V, --version 显示版本信息
-w, --wholename 匹配完整路径名 (默认)另外:locate不是内置命令,需要自己安装mlocate,yum -y install mlocate
安装后需要更新一下查找的数据库updatedb,不然会报下面错误

[root@localhost test]# locate -i /etc/fuc 
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
[root@localhost test]# locate -i /data/te
/data/test
/data/test/.test6
/data/test/nginx.conf
/data/test/test1
/data/test/test2
/data/test/test3
/data/test/test3/test4
/data/test/test3/test5
/data/test/test3/test4/test6.sh

chmod:修改目录权限

用法:chmod [选项]… 模式[,模式]… 文件…
 或:chmod [选项]… 八进制模式 文件…
 或:chmod [选项]… –reference=参考文件 文件…
将每个文件的模式更改为指定值。

 -c, --changes         类似 --verbose,但只在有更改时才显示结果
      --no-preserve-root        不特殊对待根目录(默认)
      --preserve-root           禁止对根目录进行递归操作
  -f, --silent, --quiet 去除大部份的错误信息
  -v, --verbose         为处理的所有文件显示诊断信息
      --reference=参考文件      使用指定参考文件的模式,而非自行指定权限模式
  -R, --recursive               以递归方式更改所有的文件及子目录
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

每种 MODE 都应属于这类形式"[ugoa]*([-+=]([rwxXst]*|[ugo]))+"。

操作对像

   u 文件属主权限
   g 同组用户权限
   o 其它用户权限
   a 所有用户(包括以上三种)

权限设定

   + 增加权限
   - 取消权限
   =  唯一设定权限

权限类别

   r 读权限
   w 写权限
   x 执行权限
   X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
   s 文件属主和组id
   l 给文件加锁,使其它用户无法访问

   r-->4
   w-->2
   x-->1
[root@localhost ~]# chmod ugo+r nginx_bak.conf #所有人皆可读取
[root@localhost ~]# chmod a+r nginx_bak.conf #所有人皆可读取
[root@localhost ~]# chmod ug+w,o-w nginx_bak.conf #设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
[root@localhost ~]# chmod u+x nginx_bak.conf #创建者拥有执行权限 
[root@localhost ~]# chmod -R a+r ./www/ #将www下的所有档案与子目录皆设为任何人可读取
[root@localhost ~]# chmod a-x nginx_bak.conf #收回所有用户的对nginx_bak.conf的执行权限
[root@localhost ~]# chmod 777 nginx_bak.conf #所有人可读,写,执行
# chmod a+s test.ppt    #chmod g+s ,为某个文件设置替代组标识

# ls -al |grep test.ppt
-rwSr-Sr--.  1 tank tank    2320384 11月 18 19:29 test.ppt

第一个S指示用户替代标识(suid)已经被设置。
第二个S指示替代组标识(sgid)已经被设置。

这样,每一个运行该程序的用户将给予和程序拥有者同样有效的用户标识,和用户所属组同样有效的组标识。

chown:修改文件和目录的属主和属组

用法:chown [选项]… [所有者][:[组]] 文件…
 或:chown [选项]… –reference=参考文件 文件…
更改每个文件的所有者和/或所属组。
当使用 –referebce 参数时,将文件的所有者和所属组更改为与指定参考文件相同。

  -c, --changes      类似 verbose,但只在有更改时才显示结果
      --dereference             受影响的是符号链接所指示的对象,而非符号链接本身
  -h, --no-dereference          会影响符号链接本身,而非符号链接所指示的目的地
                                (当系统支持更改符号链接的所有者时,此选项才有用)
      --from=当前所有者:当前所属组
                                只当每个文件的所有者和组符合选项所指定时才更改所
                                有者和组。其中一个可以省略,这时已省略的属性就不
                                需要符合原有的属性。
      --no-preserve-root        不特殊对待"/"(默认值)
      --preserve-root           不允许在"/"上递归操作
  -f, --silent, --quiet 去除大部份的错误信息
      --reference=参考文件      使用参考文件的所属组,而非指定值
  -R, --recursive               递归处理所有的文件及子目录
  -v, --verbose                 为处理的所有文件显示诊断信息

以下选项是在指定了 -R 选项时被用于设置如何穿越目录结构体系。
如果您指定了多于一个选项,那么只有最后一个会生效。

  -H         如果命令行参数是一个通到目录的符号链接,则遍历符号链接
  -L         遍历每一个遇到的通到目录的符号链接
  -P         不遍历任何符号链接(默认)

      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

如果没有指定所有者,则不会更改。 所属组若没有指定也不会更改,但当加上
":"时 GROUP 会更改为指定所有者的主要组。所有者和所属组可以是数字或名称。
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root root  4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 root root  6 Dec 10 08:25 test1
drw-rw-rw-. 2 root root  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root root 30 Dec 11 22:49 test3
[root@localhost test]# chown huangh:huangh test1
[root@localhost test]# chown .huangh test3
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root   root    4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 huangh huangh  6 Dec 10 08:25 test1
drw-rw-rw-. 2 huangh huangh  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root   huangh 30 Dec 11 22:49 test3

[root@localhost test]# mkdir test4
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root   root    4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 huangh huangh  6 Dec 10 08:25 test1
drw-rw-rw-. 2 huangh huangh  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root   huangh 30 Dec 11 22:49 test3
drwxr-xr-x. 2 root   root    6 Dec 12 07:25 test4
[root@localhost test]# chown huangh. test4
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root   root    4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 huangh huangh  6 Dec 10 08:25 test1
drw-rw-rw-. 2 huangh huangh  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root   huangh 30 Dec 11 22:49 test3
drwxr-xr-x. 2 huangh huangh  6 Dec 12 07:25 test4
[root@localhost test]# chown huangh.root test4
[root@localhost test]# ll
total 4
-rw-r--r--. 1 root   root    4 Dec 12 00:26 nginx.conf
drwxr-xr-x. 2 huangh huangh  6 Dec 10 08:25 test1
drw-rw-rw-. 2 huangh huangh  6 Dec 10 08:26 test2
drwxr-xr-x. 4 root   huangh 30 Dec 11 22:49 test3
drwxr-xr-x. 2 huangh root    6 Dec 12 07:25 test4

umask:

umask 命令用来设置限制新文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。

参数:
-S:以字符的形势显示当前的掩码。
-p:带umask开头以数字的形势显示当前掩码
umask是从权限中“拿走”相应的位,且文件创建时不能赋予执行权限
[root@localhost test]# umask
0022
[root@localhost test]# umask -S
u=rwx,g=rx,o=rx
[root@localhost test]# umask -p
umask 0022
[root@localhost test]# umask 755
[root@localhost test]# umask
0755
[root@localhost test]# touch test
[root@localhost test]# ll test
-----w--w-. 1 root root 0 Dec 12 07:33 test

ln:连接

ln -在文件之间建立连接

在Unix世界里有两个'link'(连接)概念,一般称之为硬连接和软连接。一个硬连 接仅仅是一个文件名。(一个文件可以有好几个文件名,只有将最后一个文件名从 磁盘上删除,才能把这个文件删掉。文件名的个数是由ls(1)来确定的。所有的文件 名都处于同一个状态,也就没有什么lq源名字rq 之说。通常文件系统里的一个 文件的所有名字包含着一样的数据信息,不过这样也不是必需的。)一个软连接 (或符号连接)是完全不同的:它是一个包含了路径信息的小小的指定文件。因此, 软连接可以指向不同文件系统里的文件(比如由NFS装载的不同机器文件系统上的文 件),甚至可以指向一个不一定确实存在的文件。在软连接文件被访问(系统调用 open(2) 或stat(2))的时候,操作系统用该文件所包含的路径替换该文件的访问介 入点,从而实现对所指文件的访问。(用命令rm(1)和unlink(2)可以删除连接,但 不是删除该文件所指向的文件。系统指定调用lstat(2)和readlink(2) 来读取连接 文件与其所指文件的状态。到底是对软连接文件操作,还是对被指向文件操作,由 于不同操作系统件存在不同的系统调用,而存在着差异。)

ln 在文件间产生连接。缺省时,产生硬连接,有-s选项,则产生符号(软)连接。

如果仅仅只给出一个文件名,那么ln将在当前目录里产生这个文件的连接, 也就是说,以该文件(的最后一个)名称等同的名字在当前目录里产生一个连接 (GNU范围内); 如果最后一个参数是一个已存在的目录名, ln 将在那个目录里给每一个源文件用以与源文件相同的文件名产生连接, (不同情况见以下--no-dereference的描述); 如果只给出两个文件名,ln将产生源文件的连接; 如果最后一个参数不是一个目录名或多于两个文件名,则报错。

缺省时,ln不删除已存在的文件或符号连接。 (因此,它可以被用来锁定目标文件,即当dest已经不存在时) 但选项-f可以强制执行。

在已存在的实现中,只有超级用户才能建立目录的硬连接。 POSIX 禁止系统调用link(2)和ln建立目录的硬连接 (但是允许在不同的文件系统间建立硬连接)。 

使用方式 : ln [options] source dist,其中 option 的格式为 :
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}][--help] [--version] [--]

说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。
ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。
不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
-V METHOD : 指定备份的方式
--help : 显示辅助说明
--version : 显示版本
[root@localhost test]# ll /etc/ssh/ssh_config 
-rw-r--r--. 1 root root 2208 Nov 20  2015 /etc/ssh/ssh_config
[root@localhost test1]# ln /etc/ssh/ssh_config ./   #创建硬连接当当前目录
[root@localhost test1]# ll
total 4
-rw-r--r--. 3 root root 2208 Nov 20  2015 ssh_config
[root@localhost test1]# ln -s /etc/ssh/sshd_config ./ #创建软连接当当前目录
[root@localhost test1]# ll
total 4
-rw-r--r--. 3 root root 2208 Nov 20  2015 ssh_config
lrwxrwxrwx. 1 root root   20 Dec 12 07:40 sshd_config -> /etc/ssh/sshd_config
[root@localhost test1]# ll /etc/ssh/sshd_config 
-rw-------. 1 root root 4361 Nov 20  2015 /etc/ssh/sshd_config

tee:

tee 命令:用来将标准输入的内容输出到标准输出并可以保存为文件

参数
-a 附加到文件
-i 无视中断
--help 显示帮助信息
--version 显示版本信息
[root@localhost test1]# tee test.sh
sad
sad
asd
asd
asda
asda
^C
[root@localhost test1]# cat test.sh 
sad
asd
asda

COMMAND | tee /PATH/TO/SOMEFILE
例如:将issue保存到a.txt,然后又输出一份
cat /etc/issue |tee /tmp/a.txt |tr 'a-z' 'A-Z'

vi/vim:

VIM:编辑模式,命令模式,输入模式,末行模式
编辑模式 快捷方式:
i:insert, 在光标所在处输入;
a: append,在光标在处后方输入;
o:在光标所在处的下方打开一个新行;
I:在光标所在行的行首输入;
A:在光标所在行的行尾输入;
O:在光标所在处的上方打开一个新行;
行首行尾跳转:
	^:跳转至行首的第一个非空白字符;
	0:跳转至行首;
	$:跳转至行尾;
行间跳转:
	#G:跳转至由#指定的行;
	1G, gg:第一行;
	G:最后一行;
翻屏:
	Ctrl+f:向文件尾翻一屏
	Ctrl+b:向文件首部翻一屏
	Ctrl+d:向文件尾部翻半屏
	Ctrl+u:向文件首部翻半屏
	Enter:按行向后翻
编辑操作:
yy:复制整行
#yy:复制#行
p:粘贴
撤销操作:u
撤销此前的撤销:Ctrl+r

vim末行模式:内建的命令行接口		
(1) 地址定界
:start_pos[,end_pos]
#:特定的第#行,例如5即第5行;
.:当前行;
$:最后一行;
#,#:指定行范围,左侧为起始行,右侧为结束行;
#,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;例如:3,+7
.,$-1:当前行到倒数第一行
1,$:全文
%:全文 
/pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行;
/first/,$
/pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行;
可同编辑命令一同使用,实现编辑操作:
	d
	y
	c				
	w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;
	r  /PATH/FROM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置;
(2) 查找
	/PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;
	?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;
	n:下一个,与命令方向相同;
	N:上一个,与命令方向相反;
(3) 查找并替换
	s:末行模式的命令;使用格式:
	s/要查找的内容/替换为的内容/修饰符
	要查找的内容:可使用正则表达式;
	替换为的内容:不能使用下则表达式,但可以引用;
	如果“要查找的内容”部分在模式中使用分组符号:在“替换为的内容”中使用后向引用;
	直接引用查找模式匹配到的全部文本,要使用&符号;
	修饰符:
		i:忽略大小写;
		g:全局替换,意味着一行中如果匹配到多次,则均替换;						
		可把分隔符替换为其它非常用字符:
			s@@@
			s###
末行模式示例:
	查找全文中以t开头的单词开头换成T:%s@\<t\([[:alpha:]]\+\)\>@T\1@g
	查找全文中以t开头的单词在单词后面加er:%s@\<t[[:alpha:]]\+\>@&er@g
加在字符前就是er&,加在后面&er
练习:
1、复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符;
%s@^[[:space:]]\+@@
2、复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#;
%s@^[[:space:]]\+[^[:space:]]@#&@g
3、为/tmp/grub2.cfg文件的前三行的行首加上#号;
1,3s/^/#/g
4、将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1;
%s@\(enabled\|gpgcheck\)=0@\1=1@g
多文件:
	vim FILE1 FILE2 ...				
在文件间切换:
	:next  下一个
	:prev  上一个
	:first   第一个 
	:last   最后一个 					
退出所有文件:
	:wqall 保存所有文件并退出;
	:wall
	:qall					
多窗口:
	-o:水平分割窗口
	-O:垂直分割窗口			
	在窗口间切换:Ctrl+w, ARROW			
	注意:单个文件也可以分割为多个窗口进行查看:
		Ctrl+w, s:水平分割

定制vim的工作特性:	
		注意:在末行模式下的设定,仅对当前vim进程有效;
		永久有效:
			全局:/etc/vimrc
			用户个人:~/.vimrc			
		1、行号
			显示:set number, 简写为set nu
			取消显示:set nomber, set nonu
		2、括号匹配高亮
			匹配:set showmatch, set sm
			取消:set nosm
		3、自动缩进
			启用:set ai
			禁用:set noai
		4、高亮搜索
			启用:set  hlsearch
			禁用:set nohlsearch
		5、语法高亮
			启用:syntax on
			禁用:syntax off 
		6、忽略字符大小写
			启用:set ic
			禁用:set noic窗口
				Ctrl+w, v:垂直分割窗口
				
课外作业:如何设置tab键缩进4个字符;
在全局/etc/vimrc加入以下配置即可:
set smartindent  
set tabstop=4  
set shiftwidth=4  
set expandtab  
set softtabstop=4

2、bash的工作特性之命令返回值和命令行展开

  • 命令执行状态返回值
    bash中一条命令的执行,会产生两种返回结果:命令结果及命令执行状态结果。一条命令成功执行,其执行状态返回值为0。如果未能成功执行,其返回值为1-255。

[root@localhost test1]# ls
ssh_config  sshd_config  test.sh
[root@localhost test1]# echo $?
0
[root@localhost test1]# nidaye
-bash: nidaye: command not found
[root@localhost test1]# echo $?
127
  • 命令行展开: {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径; 例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b

3、练习:

  • 3.1、创建/tmp目录下的a_c,a_d,b_c,b_d

mkdir -pv /tmp/{a,b}_{c,d}
  • 3.2、创建/tmp/mylinux目录下的:

  • 1.jpg

mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

[root@localhost test1]# tree /tmp
/tmp
└── mylinux
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │       └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │       ├── bin
    │       └── sbin
    └── var
        ├── lock
        ├── log
        └── run

4、文件元素信息详解和修改文件时间戳信息详解

上面touch命令和stat命令已经讲解过

5、定义命令的别名,如何在命令中引用另一个命令的执行结果

功能说明:设置命令的别名。
语  法:alias[别名]=[指令名称]
参  数 :若不加任何参数,则列出目前所有的别名设置。


说明:用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。 alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在/etc/profile或自己的~/.bashrc中设定指令的别名。

[root@localhost test1]# alias 
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[root@localhost test1]# alias  ss='ss -tnl'
[root@localhost test1]# alias|grep ss 
alias ss='ss -tnl'
[root@localhost test1]# ss
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN      0      128                   *:22                                *:*                  
LISTEN      0      100           127.0.0.1:25                                *:*                  
LISTEN      0      128                  :::22                               :::*                  
LISTEN      0      100                 ::1:25                               :::*

6、显示/var下以所有以l开头,以一个小写字母结尾,且中间至少出现一位数字或者字符的目录或者文件

[root@localhost tmp]# ls -d /var/l*[0-9]*[[:lower:]]
/var/l123a  /var/ls123a  /var/ls123ca

7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录

globbing:文件名通配(整体文件名匹配,而非部分),通配符
		匹配模式:元字符
			*:匹配任意长度的任意字符
				pa*, *pa*, *pa, *p*a*
					pa, paa, passwd
			?:匹配任意单个字符
				pa?, ??pa, p?a, p?a?
					pa, paa, passwd
			[]:匹配指定范围内的任意单个字符
				有几种特殊格式:
					[a-z], [A-Z], [0-9], [a-z0-9]
					[[:upper:]]:所有大写字母
					[[:lower:]]:所有小写字母
					[[:alpha:]]:所有字母
					[[:digit:]]:所有数字
					[[:alnum:]]:所有的字母和数字
					[[:space:]]:所有空白字符
					[[:punct:]]:所有标点符号					
			[^]:匹配指定范围外的任意单个字符
                	非大写字母:[^[:upper:]]
                	非数字:[^0-9]
                	非数字和非字母[^[:alnum:]]
[root@localhost test1]# touch /etc/1aaa1
[root@localhost test1]# touch /etc/1aaa
[root@localhost test1]# mkdir /etc/1aaab
[root@localhost test1]# ls -d /etc/[0-9]*[^0-9]
/etc/1aaa  /etc/1aaab

8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或者目录

[root@localhost test1]# ls -d /etc/[^[:alpha:]][[:alpha:]]*
/etc/1aaa  /etc/1aaa1  /etc/1aaab

9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名如:tfile-2016-05-27-09-32-22

[root@localhost tmp]# ls
[root@localhost tmp]# date
2016年 12月 06日 星期二 04:04:33 CST
[root@localhost tmp]# mkdir tfile-`date +%F-%H-%M-%S`
[root@localhost tmp]# ls
tfile-2016-12-06-04-04-34

一般此用法用在日志切割上,做定时任务在每天晚上0点0分把前一天的日志和今天的日志分开,方便查看
[root@localhost tmp]# date
2016年 12月 06日 星期二 04:21:50 CST
[root@localhost tmp]# ls
[root@localhost tmp]# touch tomcat8080-$(date -d "yesterday" +%Y%m%d).log
[root@localhost tmp]# ls
tomcat8080-20161205.log

时间同步,一般服务器在上架后就需要对系统时间做同步,做定时任务
0 0 * * * /usr/sbin/ntpdate cn.pool.ntp.org >/dev/null

10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录

[root@localhost test1]# ls -d  /etc/p*[^0-9]
/etc/pam.d    /etc/pki       /etc/popt.d   /etc/prelink.conf.d  /etc/profile.d
/etc/passwd   /etc/plymouth  /etc/postfix  /etc/printcap        /etc/protocols
/etc/passwd-  /etc/pm        /etc/ppp      /etc/profile         /etc/python
[root@localhost test1]# cp -r /etc/p*[^0-9] /tmp/mytest1
[root@localhost test1]# ls /tmp/mytest1
pam.d   passwd-  plymouth  popt.d   ppp             printcap  profile.d  python
passwd  pki      pm        postfix  prelink.conf.d  profile   protocols

11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中

[root@localhost test1]# ls -d  /etc/*.d
/etc/bash_completion.d  /etc/grub.d          /etc/pam.d           /etc/rc3.d      /etc/statetab.d
/etc/binfmt.d           /etc/init.d          /etc/popt.d          /etc/rc4.d      /etc/sudoers.d
/etc/chkconfig.d        /etc/ld.so.conf.d    /etc/prelink.conf.d  /etc/rc5.d      /etc/sysctl.d
/etc/cron.d             /etc/logrotate.d     /etc/profile.d       /etc/rc6.d      /etc/tmpfiles.d
/etc/depmod.d           /etc/modprobe.d      /etc/rc0.d           /etc/rc.d       /etc/xinetd.d
/etc/dnsmasq.d          /etc/modules-load.d  /etc/rc1.d           /etc/rsyslog.d  /etc/yum.repos.d
/etc/dracut.conf.d      /etc/my.cnf.d        /etc/rc2.d           /etc/rwtab.d

[root@localhost test1]# cp -r  /etc/*.d /tmp/mytest2
[root@localhost test1]# ls /tmp/mytest2
bash_completion.d  dnsmasq.d      logrotate.d     popt.d          rc2.d  rc.d        sysctl.d
binfmt.d           dracut.conf.d  modprobe.d      prelink.conf.d  rc3.d  rsyslog.d   tmpfiles.d
chkconfig.d        grub.d         modules-load.d  profile.d       rc4.d  rwtab.d     xinetd.d
cron.d             init.d         my.cnf.d        rc0.d           rc5.d  statetab.d  yum.repos.d
depmod.d           ld.so.conf.d   pam.d           rc1.d           rc6.d  sudoers.d

12、复制/etc目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录

[root@localhost test1]# ls -d /etc/[lmn]*.conf
/etc/ld.so.conf     /etc/libuser.conf  /etc/logrotate.conf  /etc/mke2fs.conf
/etc/libaudit.conf  /etc/locale.conf   /etc/man_db.conf     /etc/nsswitch.conf
[root@localhost test1]# mkdir /etc/mytest3
[root@localhost test1]# cp -r /etc/[lmn]*.conf /etc/mytest3

原创文章,作者:sheng,如若转载,请注明出处:http://www.178linux.com/63313

(0)
shengsheng
上一篇 2016-12-11
下一篇 2016-12-12

相关推荐

  • linux中的管道符

    管道符 less只能看文件 但是这样做会产生一个垃圾文件ls.txt,所以下面我们就会需要用到管道符 |只将传递正确结果传递给 而使用这两种方法可以传递正确和错误的结果[root@localhost ~]# ls /etc/passwd /cpp/passwd 2>&1|less   ,  (2>&1…

    2017-07-22
  • N25第三周作业

    一、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@centos01 ~]# who | cut -d " " -f1 | uniq -u root qufudcj 二、取出最后…

    Linux干货 2016-12-26
  • 8 文本查看、处理与统计分析

    文本查看 cat cat [OPTION]… [FILE]… 该命令用于正向查看文本文件,但不可分页,一次性显示完成 参数说明 参数 说明 -E 显示行结束符$ -n 对显示出的每一行进行编号 -A 显示所有控制符 -b 非空行编号 -s 压缩连续的空行成一行 -T 显示tab为^I 示例  tac tac […

    Linux干货 2016-08-10
  • iptables实验3 关于内网外网的地址转换及端口转换

    地址属于内核,而不属于网卡!!!!     网络防火墙的实现(主要是forward链) 172.16.100.68(A)和172.16.100.67(B) 192.168.12.10(B)和192.168.12.77(C)(VNET2) B作为C的网关   配置B主机的网卡一个为192.168.1.72,另一个为172.16.2…

    Linux干货 2016-10-30
  • 利用varnish构建httpd缓存服务器

    varnish如何存储缓存对象:     file: 单个文件;不支持持久机制;     malloc: 缓存在内存中;     persistent:基于文件的持久存储;(此方式不建议使用) vcl:配置缓存系统的缓存机制;【线程中缓存功…

    Linux干货 2016-06-20
  • Linux磁盘与文件系统管理

    对于一块磁盘,如果我们想要使用的话,需要对磁盘进行分区并建立文件系统。下面,我们就了解一下Linux中的磁盘与文件系统管理 一、MBR 硬盘的0扇区为MBR扇区,其由以下几部分组成: l  主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序。 l  出错信息数据区,偏移地址0089H&#8…

    Linux干货 2016-08-28

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-16 23:11

    赞~总结的很详细~继续加油~