linux 命令总结

mkdir

用法:mkdir [选项]... 目录...
若指定目录不存在则创建目录。

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

[root@localhost ~]# mkdir -m a=rw bbb   #创建指定属性的目录

[root@localhost ~]# mkdir -p 111/abc   #创建目录,父目录存在,建之
[root@localhost ~]# mkdir -p /ms/{sales,hr,web} #创建一个名为/ms的目录,其中有sales、hr、web的子目录 


man

Usage: man [OPTION...] [章节] 手册页...

  -C, --config-file=文件   使用该用户设置文件
  -d, --debug                输出调试信息
  -D, --default              将所有选项都重置为默认值
      --warnings[=警告]    开启 groff 的警告

 主要运行模式:
  -f, --whatis               等同于 whatis
  -k, --apropos              等同于 apropos
  -K, --global-apropos       search for text in all pages
  -l, --local-file
                             把“手册页”参数当成本地文件名来解读
  -w, --where, --path, --location
                             输出手册页的物理位置
  -W, --where-cat, --location-cat
                             输出 cat 文件的物理位置

  -c, --catman               由 catman 使用,用来对过时的 cat
                             页重新排版
  -R, --recode=编码        output source page encoded in ENCODING

 寻找手册页:
  -L, --locale=区域
                             定义本次手册页搜索所采用的区域设置
  -m, --systems=系统       use manual pages from other systems
  -M, --manpath=路径       设置搜索手册页的路径为“路径”

  -S, -s, --sections=列表  使用以半角冒号分隔的章节列表

  -e, --extension=扩展
                             将搜索限制在扩展类型为“扩展”的手册页之内

  -i, --ignore-case          查找手册页时不区分大小写字母
                             (默认)
  -I, --match-case           查找手册页时区分大小写字母。

      --regex                show all pages matching regex
      --wildcard             show all pages matching wildcard

      --names-only           make --regex and --wildcard match page names only,
                             not descriptions

  -a, --all                  寻找所有匹配的手册页
  -u, --update               强制进行缓存一致性的检查

      --no-subpages          don't try subpages, e.g. 'man foo bar' => 'man
                             foo-bar'

 控制格式化的输出:
  -P, --pager=PAGER          使用 PAGER 程序显示输出文本
  -r, --prompt=字符串     给 less pager 提供一个提示行

  -7, --ascii                显示某些 latin1 字符的 ASCII 翻译形式
  -E, --encoding=编码      use selected output encoding
      --no-hyphenation, --nh turn off hyphenation
      --no-justification,                              --nj   turn off justification
  -p, --preprocessor=字符串   字符串表示要运行哪些预处理器:
                             e - [n]eqn, p - pic, t - tbl,
g - grap, r - refer, v - vgrind

  -t, --troff                使用 groff 对手册页排版
  -T, --troff-device[=设备]   使用 groff 的指定设备

  -H, --html[=浏览器]     使用 www-browser 或指定浏览器显示 HTML
                             输出
  -X, --gxditview[=分辨率]   使用 groff 并通过 gxditview (X11)
                             来显示:
                             -X = -TX75, -X100 = -TX100, -X100-12 = -TX100-12
  -Z, --ditroff              使用 groff 并强制它生成 ditroff

  -?, --help                 give this help list
      --usage                give a short usage message
  -V, --version              print program version
[root@linux ~]# man ifconfig    #查看ifconfig手册

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@linux ~]# touch test.php                    #将test.php的档案时间改为,当前时间,文件不存在建之

[root@linux ~]# touch -c -t 05061803 test.php     #将档案时间改为,5月6日18点3分

[root@linux ~]# touch -r abc.php test.php         #将test.php档案改成根abc.php一样

ls

 
用法:ls [选项]... [文件]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

长选项必须使用的参数对于短选项时也是必需使用的。
  -a, --all                     不隐藏任何以. 开始的项目
  -A, --almost-all              列出除. 及.. 以外的任何项目
      --author                  与-l 同时使用时列出每个文件的作者
  -b, --escape                  以八进制溢出序列表示不可打印的字符
      --block-size=SIZE      scale sizes by SIZE before printing them.  E.g.,
                               `--block-size=M' prints sizes in units of
                               1,048,576 bytes.  See SIZE format below.
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information)
                               with -l: show ctime and sort by name
                               otherwise: sort by ctime, newest first
  -C                            每栏由上至下列出项目
      --color[=WHEN]            控制是否使用色彩分辨文件。WHEN 可以是
                                "never"(默认)、"always"或"auto"其中之一
  -d, --directory               当遇到目录时列出目录本身而非目录内的文件
  -D, --dired                   产生适合Emacs 的dired 模式使用的结果
  -f                            不进行排序,-aU 选项生效,-lst 选项失效
  -F, --classify                加上文件类型的指示符号(*/=@| 其中一个)
      --format=关键字           交错-x,逗号分隔-m,水平-x,长-l,
                                单栏-1,详细-l,垂直-C
      --full-time               即-l --time-style=full-iso
  -g                            类似-l,但不列出所有者
      --group-directories-first
                        在文件前分组目录。此选项可与--sort 一起使用,
                        但是一旦使用--sort=none (-U)将禁用分组
  -G, --no-group                以一个长列表的形式,不输出组名
  -h, --human-readable          与-l 一起,以易于阅读的格式输出文件大小
                                (例如 1K 234M 2G)
      --si                      同上面类似,但是使用1000 为基底而非1024
  -H, --dereference-command-line
                                跟随命令行列出的符号链接
      --dereference-command-line-symlink-to-dir
                                跟随命令行列出的目录的符号链接
      --hide=PATTERN            隐藏符合PATTERN 模式的项目
                                (-a 或 -A 将覆盖此选项)
      --indicator-style=方式    指定在每个项目名称后加上指示符号方式:
                                none (默认),classify (-F),file-type (-p)
  -i, --inode                   显示每个文件的inode 号
  -I, --ignore=PATTERN          不显示任何符合指定shell PATTERN 的项目
  -k                            即--block-size=1K
  -l                            使用较长格式列出信息
  -L, --dereference             当显示符号链接的文件信息时,显示符号链接所指示
                                的对象而并非符号链接本身的信息
  -m                            所有项目以逗号分隔,并填满整行行宽
  -n, --numeric-uid-gid         类似 -l,但列出UID 及GID 号
  -N, --literal                 输出未经处理的项目名称 (如不特别处理控制字符)
  -o                            类似 -l,但不列出有关组的信息
  -p,  --indicator-style=slash  对目录加上表示符号"/"
  -q, --hide-control-chars      以"?"字符代替无法打印的字符
      --show-control-chars      直接显示无法打印的字符 (这是默认方式,除非调用
                                的程序名称是"ls"而且是在终端输出结果)
  -Q, --quote-name              将条目名称括上双引号
      --quoting-style=方式      使用指定的quoting 方式显示条目的名称:
                                literal、locale、shell、shell-always、c、escape
  -r, --reverse                 逆序排列
  -R, --recursive               递归显示子目录
  -s, --size                    以块数形式显示每个文件分配的尺寸
  -S                            根据文件大小排序
      --sort=WORD               以下是可选用的WORD 和它们代表的相应选项:
                                extension -X       status   -c
                                none      -U       time     -t
                                size      -S       atime    -u
                                time      -t       access   -u
                                version   -v       use      -u
      --time=WORD               和-l 同时使用时显示WORD 所代表的时间而非修改时
                                间:atime、access、use、ctime 或status;加上
                                --sort=time 选项时会以指定时间作为排序关键字
      --time-style=STYLE        和-l 同时使用时根据STYLE 代表的格式显示时间:
                                full-iso、iso、locale、posix-iso、+FORMAT。
                                FORMAT 即是"date"所用的时间格式;如果FORMAT
                                是FORMAT1<换行>FORMAT2,FORMAT1 适用于较旧
                                的文件而FORMAT2 适用于较新的文件;如果STYLE
                                以"posix-"开头,则STYLE 仅在POSIX 语系之外
                                生效。
  -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         显示版本信息并退出

SIZE 可以是一个可选的整数,后面跟着以下单位中的一个:
KB 1000,K 1024,MB 1000*1000,M 1024*1024,还有 G、T、P、E、Z、Y。

使用色彩来区分文件类型的功能已被禁用,默认设置和 --color=never 同时禁用了它。
使用 --color=auto 选项,ls 只在标准输出被连至终端时才生成颜色代码。
LS_COLORS 环境变量可改变此设置,可使用 dircolors 命令来设置。

退出状态:
 0  正常
 1  一般问题 (例如:无法访问子文件夹)
 2  严重问题 (例如:无法使用命令行参数)
[root@rudder ~]# ls
bak  tank

[root@rudder ~]# ls -l
总用量 8
drwxr-xr-x 2 root root 4096  4月 27 12:34 bak
drwxr-xr-x 4 tnak tnak 4096  4月 28 14:25 tank
 
-bash-3.2$ ls /bin       #查看bin目录下的文件
arch                  dnsdomainname  kbd_mode         pgawk    tar
awk                   doexec         keyctl           ping     taskset
basename              domainname     kill             ping6    touch
bash                  dumpkeys       link             ps       tracepath
cat                   echo           ln               pwd      tracepath6

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 显示版本信息并退出


默认情况下,源文件的稀疏性仅仅通过简单的方法判断,对应的目标文件目标文件也
被为稀疏。这是因为默认情况下使用了--sparse=auto 参数。如果明确使用
--sparse=always 参数则不论源文件是否包含足够长的0 序列也将目标文件创文
建为稀疏件。
使用--sparse=never 参数禁止创建稀疏文件。


当指定了--reflink[=always] 参数时执行轻量化的复制,即只在数据块被修改的
情况下才复制。如果复制失败或者同时指定了--reflink=auto,则返回标准复制模式。


备份文件的后缀为"~",除非以--suffix 选项或是SIMPLE_BACKUP_SUFFIX
环境变量指定。版本控制的方式可通过--backup 选项或VERSION_CONTROL 环境
变量来选择。以下是可用的变量值:


  none, off       不进行备份(即使使用了--backup 选项)
  numbered, t     备份文件加上数字进行排序
  existing, nil   若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
  simple, never   永远使用普通方式备份


有一个特别情况:如果同时指定--force 和--backup 选项,而源文件和目标文件
是同一个已存在的一般文件的话,cp 会将源文件备份。
[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后缀

 


cd

相关命令:
cd  目录切换命令
[root@localhost ~]# cd /home/    #切换到home目录
[root@localhost home]# cd -      #返回切换到home前的目录
/root
[root@localhost ~]# cd ../       #切换到上一级目录
[root@localhost /]# cd ~         #切换当前用户的home目录
[root@localhost ~]#

rm

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

  -f, --force           强制删除。忽略不存在的文件,不提示确认
  -i                    在删除前需要确认
  -I                    在删除超过三个文件或者递归删除前要求确认。此选项比-i 提
                        示内容更少,但同样可以阻止大多数错误发生
      --interactive[=WHEN]      根据指定的WHEN 进行确认提示:never,once (-I),
                                或者always (-i)。如果此参数不加WHEN 则总是提示
      --one-file-system         递归删除一个层级时,跳过所有不符合命令行参
                                数的文件系统上的文件
      --no-preserve-roo 不特殊对待"/"
      --preserve-root   不允许删除"/"(默认)
  -r, -R, --recursive   递归删除目录及其内容
  -v, --verbose         详细显示进行的步骤
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

默认时,rm 不会删除目录。使用--recursive(-r 或-R)选项可删除每个给定
的目录,以及其下所有的内容。

要删除第一个字符为"-"的文件 (例如"-foo"),请使用以下方法之一:
  rm -- -foo
  rm ./-foo

请注意,如果使用rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证
该文件的内容无法还原,请考虑使用shred。
[root@localhost ~]# rm test.php        #删除文件需要确认

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

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

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         显示版本信息并退出

备份文件的后缀为"~",除非以--suffix 选项或是SIMPLE_BACKUP_SUFFIX
环境变量指定。版本控制的方式可通过--backup 选项或VERSION_CONTROL 环境
变量来选择。以下是可用的变量值:

  none, off       不进行备份(即使使用了--backup 选项)
  numbered, t     备份文件加上数字进行排序
  existing, nil   若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
  simple, never   永远使用普通方式备份
[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目录下

echo

相关命令:
echo - 显示一行文本

允许在标准输出上显示STRING(s).
-n 不输出行尾的换行符.
-e 允许对下面列出的加反斜线转义的字符进行解释.
-E 禁止对在STRINGs中的那些序列进行解释.
--help 显示帮助并退出(须单独运行)
--version 输出版本信息并退出(须单独运行)
在没有 -E 的情况下,可承认并可以内置替换以下序列:

 \NNN
字符的ASCII代码为NNN(八进制)

 \\
反斜线

 \a
报警符(BEL)

 \b
退格符

 \c
禁止尾随的换行符

 \f
换页符

 \n
换行符

 \r
回车符

 \t
水平制表符

 \v
纵向制表符
[root@linux test]# echo "11111" #输出11111

[root@linux test]# echo -n "11111" #输出11111,不带尾部回车

 


pwd

相关命令:dirs
pwd 显示当前目录

   -L, --logical
          显示当前目录
   -P, --physical
          显示当前目录的实际物理地址
   --help  帮助
   --version  版本
[root@rudder home]# pwd  #显示当前目录
/home

[root@web mail]# pwd -P   #目录是软连接,显示实际物理地址
/var/spool/mail

[root@web mail]# pwd -L   #-L显示,逻辑地址
/var/mail

 


cat

相关命令:rev,tac
用法: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
 
[zhangy@BlackGhost awksed]$ cat x* > google_bak.tar.gz   #合并文件
 
   

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

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

alias

相关命令:unalias

alias 命令,别名设置

功能说明:删除别名。
  语  法:unalias [-a][别名]
  参  数:
  -a  删除全部的别名。

[root@Blackghost ~] alias ty=ls        #为ls设置别名
[root@Blackghost ~] ty -al             #别名
总用量 5
drwxr-xr-x 4 tnak tnak 4096  4月 27 14:20 .
drwxr-xr-x 4 root root 4096  4月 27 12:34 ..
-rw-r--r-- 1 root root  255  4月 26 12:44 abc.sh
drwxr-xr-x 2 root root 4096  4月 26 13:44 ar_test

[root@Blackghost ~] alias yy='ls -ar'  #设置别名,可以是命令带参数

unalias

相关命令:alias
unalias,删除别名
[root@Blackghost ~] alias ty=ls            #为ls设置别名
[root@Blackghost ~] unalias ty             #删除别名
 
[root@localhost database]$ unalias -a   #删除全部的别名

 


head

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

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

[root@linux ~]# head -q -n k file1 file2 file3   #显示多文件开头前k行,并且不显示文件名的文件头

[root@linux ~]# head -n -k /etc/passwd   #除最后k行外,显示剩余全部内容。

 


tail

相关命令:head
tail - 输出文件的末尾部分

在标准输出上显示每个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
    输出版本信息后退出
    
如果N(字节或者行数)的第一个字符为`+', 那么从每个文件的开头算起的第N项开始显示, 否则, 显示该文件的最后N项. N可以有一个倍数前缀: b表示512,k表示1024,m表示1048576(1兆). 第一个选项 -VALUE 或+VALUE 以-n VALUE或-n +VALUE 方式看待,除非VALUE含有[bkm]后缀倍数 中的一个,在这种情况下,它被看作 -c VALUE 或者-c +VALUE
使用--follow (-f)时,tail默认后接文件描述符, 这意味着即使tail显示的文件改名了,tail仍然可以 追踪到其末尾部分. 如果你确实希望查询文件的实际名而非文件描述符 (例如,日志轮转时), 这种默认的操作就不是你所期望的了. 在这种情况下应使用--follow=name. 这将导致tail通过周期性地重新打开所指定的文件来 追踪其是否被删除了,或者被其他程序重新创建了.
 
[root@linux ~]# tail /etc/passwd   #默认,显示最后10 行。
 
[root@linux ~]# tail -n 2 /etc/passwd   #显示最后2行

[root@linux ~]# tail -q -n k file1 file2 file3   #显示多文件最后k行,并且不显示文件名的文件头

[root@linux ~]# tail -n +k /etc/passwd   #从开头第k字节处开始输出。

[root@linux ~]# tail -f /var/log/messages  #参数-f使tail不停地去读最新的内容,因此有实时监视的效果,用Ctrl+c来终止
 
显示第i行信息: tail -n+i file.txt | head -1,i为行数,如下:
   

# tail -n+10 file.txt | head -1     #显示file.txt的第10行

tree

相关命令:
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 ~]# tree -L 2     #-L n 只显示 n 层目录 (n 为数字)

[root@localhost ~]# tree -t       #-t 用文件和目录的更改时间排序

[root@localhost ~]# tree -r       #-r 以相反次序排列

[root@localhost ~]# tree -F       #-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号

[root@localhost ~]# tree -f       #在每个文件或目录之前,显示完整的相对路径名称

[root@localhost ~]# tree -d       #只显示目录

[root@localhost ~]# tree -a       #显示所有文件和目录

rmdir

相关命令:rm
用法:rmdir [选项]... 目录...
删除指定的空目录。

      --ignore-fail-on-non-empty
                        忽略仅由目录非空产生的所有错误
  -p, --parents         删除指定目录及其上级文件夹,例如"rmdir -p a/b/c'"
                        与"rmdir a/b/c a/b a'" 基本相同
  -v, --verbose         输出处理的目录详情
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出
[root@localhost ~]# rmdir test            #删除test目录,注意必须是空目录

[root@localhost ~]# rmdir -p a/b/c        #删除指定目录及其上级文件夹

 


xargs

相关命令:
xargs 又称管道命令,构造参数等。是给命令传递参数的一个过滤器,也是组合多个命令的一个工具 它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理 。简单的说 就是把 其他命令的给它的数据 传递给它后面的命令作为参数

主要参数

-i 用 {} 代替 传递的数据
-I string 用string来代替传递的数据-n[数字] 设置每次传递几行数据
-n 选项限制单个命令行的参数个数
-t 显示执行详情
-p 交互模式
-P n 允许的最大线程数量为n
-s[大小] 设置传递参数的最大字节数(小于131072字节)
-x 大于 -s 设置的最大长度结束 xargs命令执行
[root@localhost ~]# ls |grep .php |xargs -i mv {} {}.bak     #将当前目录下php文件,改名字

[root@localhost ~]# ls |grep .php |xargs -I {} mv {} {}.bak   #与上例相同

[root@localhost ~]# find ./ -name "*.tmp" | xargs -i rm -rf {}  #删除当前文件夹下的,tmp文件
 
# find ./ -type f -print0 |xargs -0 rm   #删除该目录的所有普通文件

# find ./ -type f -exec rm '{}' \;   #同上

# find ./ -type f -exec rm '{}' +   #同上

find

相关命令:which,whereis,locate
find 查找目录和文件

find 路径 -命令参数 [输出形式]

参数说明:
路径:告诉find在哪儿去找你要的东西,
命令参数:参数很多下面会说到
输出形式:输出形式很多,-print,-printf,-print0,-exec,-ok,-ls反正很多自己看手册吧。

说一下exec,
-exec find命令对匹配的文件执行该参数所给出的其他linux命令。相应命令的形式为' 命令 - and' {} \;,注意{ }和\;之间的空格。
-ok 和- exec的作用相同,只不过和会人交互而已,OK执行前会向你确认是不是要执行。
find命令主要参数:
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了- depth选项,那么-prune选项将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime选项,但它们都和-mtime选项
相似,所以我们在这里只介绍-mtime选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

a,通过名字来查找

[zhangy@BlackGhost ~]$ find ~ -name memcached.pid -print   #查找home目录下文件名为memcache.pid的文件
/home/zhangy/memcached/memcached.pid

[zhangy@BlackGhost ~]$ find . -name "*.pid" -print      #.代表当前目录,查找所有以pid结尾的文件
./memcached/memcached.pid
./.tencent/qq/95219454.pid

[zhangy@BlackGhost ~]$ find ~ -name "[0-9]*.pid" -print   #查找以数字开头的所有pid文件,在这里要说[0-9]*不能匹配23,它跟一般的语言类正则不太一样,shell里面的*可以代表一切字符(单个,多个都行),如果想匹配2345只能这样写[0-9][0-9][0-9][0-9]
/home/zhangy/.tencent/qq/95219454.pid

[zhangy@BlackGhost ~]$ find /home/zhangy/.tencent/ -name "[0-9]*.pid" -print  #在.tencent文件夹下面找pid文件
/home/zhangy/.tencent/qq/95219454.pid

b,通过文件权限来查找

[zhangy@BlackGhost css]$ find ~ -perm 755 -print |more   #~代表的是$home目录,查找权限为755的文件
/home/zhangy/www/css2/c_textshadow.html
/home/zhangy/www/css2/c_textautospace.html


[zhangy@BlackGhost css]$ find . -perm 700 -name "u_*" -print |more  #查找所有以产u_开头的,并且权限为700的文件
./css2/u_length_cm.html
./css2/u_length_px.html

c,prune来忽略目录来查找

[zhangy@BlackGhost download]$ find . -name "*.gz"  -prune -o \( \! -name aaa \)  -print  #查找在前目录中,不在以aaa结尾的目录中的,不以gz结尾的文件
.
./eaccelerator-0.9.5.3.tar
./fix-crash-in-excerpts.patch
./AddFeed_Widget_WordPress_Plugin.zip
./jQuery china-addthis plugin 1.07.rar

d,根据文件类型来查找文件

[zhangy@BlackGhost download]$ find . -type d -print   #查找当前目录下面的目录
.
./ddd

[zhangy@BlackGhost download]$ find . ! -type d -print  #找当前目录下面的非目录文件
./eaccelerator-0.9.5.3.tar
./haproxy-1.3.15.7.tar.gz
./fix-crash-in-excerpts.patch

e,根据文件所属用户和用户组来找文件

[zhangy@BlackGhost download]$ find . -nouser -print  #查找当前目录中,没有归属的文件

[zhangy@BlackGhost download]$ find /home/zhangy/download -user zhangy -group users -print  #查找用户组为users,所属用户为zhangy的文件
/home/zhangy/download
/home/zhangy/download/eaccelerator-0.9.5.3.tar
/home/zhangy/download/haproxy-1.3.15.7.tar.gz

f,根文件大小来查找

[zhangy@BlackGhost download]$ find /home/zhangy/download -size +1000000c -print  #查找文件大小大于1000000字符的文件,注意+号表示大于
/home/zhangy/download/eaccelerator-0.9.5.3.tar
/home/zhangy/download/mmseg-0.7.3.tar.gz

[zhangy@BlackGhost download]$ find /home/zhangy/download -size -10 -print  #查找文件大小小于10块的文件,注意-号表示小于,一块等于512b
/home/zhangy/download
/home/zhangy/download/fix-crash-in-excerpts.patch
/home/zhangy/download/test.sql.zip

g,根文件的修改时间来查找

[zhangy@BlackGhost download]$ find /home/zhangy -mtime -5 -print  #5天修改过的文件,- 表示以内
/home/zhangy/www/css2/c_textshadow.html
/home/zhangy/www/css2/c_textautospace.html

[zhangy@BlackGhost download]$ find /home/zhangy -mtime +5 -print   #查找5天前修改过的文件,+表示以前
/home/zhangy/www/test.php

[root@vmx14420 www]# find ./ -mmin -5 -print  #查找5分钟以内修改过的文件
./cache/index.html

h,exec解释

[zhangy@BlackGhost download]$ find . -type f -size +1000000c -exec ls -al {} \;  #显示当前目录下面所有大于1000000的文件,exec后面执行了一个命令,{}这个代表文件名
-rw-r--r-- 1 zhangy users 3624960 2009-03-08 ./eaccelerator-0.9.5.3.tar
-rw-r--r-- 1 zhangy users 3091711 12-18 13:48 ./mmseg-0.7.3.tar.gz
-rw-r--r-- 1 zhangy users 1191330 2009-06-26 ./pcre-7.9.tar.gz

i,匹配

[tank@localhost workspace]$ find ./database/ -name '*.sql' -print    #查找以sql结尾的文件
./database/28toplearning.sql

[tank@localhost workspace]$ find ./database/ -name '*.sql*' -print   #查找文件名包括sql文件
./database/28toplearning.sql

[tank@localhost workspace]$ find ./database/ -name '28*' -print      #查找以28开头的文件
./database/28toplearning.sql

 
andy@ubuntu:~$ find ./ -name "null_*" -exec basename {} \; | sort   #搜索文件,并只显示文件名,以升序排列。

null_0
null_1
null_2
null_3
null_4
null_5
null_6
null_7
null_8
null_9
 
# find ./ -type f -name "*.log" | xargs grep -r "error"    #查找当前目录.log文件,并找出包含“error”的行 

 


awk

相关命令:sed

awk是linux下的一个命令,他对其他命令的输出,对文件的处理都十分强大,其实他更像一门编程语言,他可以自定义变量,有条件语句,有循环,有数组,有正则,有函数等。他读取输出,或者文件的方式是一行,一行的读,根据你给出的条件进行查找,并在找出来的行中进行操作,感觉他的设计思想,真的很简单,但是结合实际情况,具体操作起来就没有那么简单了。他有三种形势,awk,gawk,nawk,平时所说的awk其实就是gawk。

 

1,变量

变 量描述
$n 当前记录的第n个字段,字段间由 FS分隔。
$0 完整的输入记录。
ARGC 命 令行参数的数目。
ARGIND 命令行中当前文件的位置(从0开始算)。
ARGV 包 含命令行参数的数组。
CONVFMT 数字转换格式(默认值为%.6g)
ENVIRON 环 境变量关联数组。
ERRNO 最后一个系统错误的描述。
FIELDWIDTHS 字 段宽度列表(用空格键分隔)。
FILENAME 当前文件名。
FNR 同 NR,但相对于当前文件。
FS 字段分隔符(默认是任何空格)。
IGNORECASE 如 果为真,则进行忽略大小写的匹配。
NF 当前记录中的字段数。
NR 当 前记录数。
OFMT 数字的输出格式(默认值是%.6g)。
OFS 输 出字段分隔符(默认值是一个空格)。
ORS 输出记录分隔符(默认值是一个换行符)。
RLENGTH 由 match函数所匹配的字符串的长度。
RS 记录分隔符(默认是一个换行符)。
RSTART 由 match函数所匹配的字符串的第一个位置。
SUBSEP 数组下标分隔符(默认值是\034)。

2,运算符

运算符描述
= += -= *= /= %= ^= **= 赋值
?: C条件表达式
|| 逻 辑或
&& 逻辑与
~ ~! 匹 配正则表达式和不匹配正则表达式
< <= > >= != == 关 系运算符
空格 连接
+ - 加,减
* / & 乘,除与求余
+ - ! 一元加,减和逻辑非
^ *** 求幂
++ -- 增加或减少,作为前缀或后缀
$ 字 段引用
in 数组成员

3,awk的正则

匹配符描述
\Y 匹配一个单词开头或者末尾的空字符串
\B 匹配单词内的空字符串
\< 匹配一个单词的开头的空字符串,锚定开始
\> 匹配一个单词的末尾的空字符串,锚定末尾
\W 匹配一个非字母数字组成的单词
\w 匹配一个字母数字组成的单词
\' 匹配字符串末尾的一个空字符串
\‘ 匹配字符串开头的一个空字符串

4,字符串函数

函数名描述
sub 匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的 时候
gsub 整个文档中进行匹配
index 返回子字符串第一次被匹配的位置,偏移量从位置1开始
substr 返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串
split 可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割
length 返回记录的字符数
match 返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量RSTART为字符串中子字符串的开始位 置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串
toupper和tolower 可用于字符串大小间的转换,该功能只在gawk中有效

5,数学函数

函数名返回值
atan2(x,y) y,x 范围内的余切
cos(x) 余弦函数
exp(x) 求 幂
int(x) 取整
log(x) 自然对 数
rand() 随机数
sin(x) 正弦
sqrt(x) 平 方根
srand(x) x是rand()函数的种子
int(x) 取 整,过程没有舍入
rand() 产生一个大于等于0而小于1的随机数

测试文件test

 

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po

 

例a

 

cat test | awk -F: '{\
 if ($1 == "root"){\
 print $1;\
 }else if($1 == "bin"){\
 print $2;\
 }else{\
 print $3;\
 } \
}'

 

例b

 

awk '{\
 for(i=0;i<NF;i++){\
 if ($i ~/^root/){\
 print $i;\
 }else if($i ~/zhangy/){\
 print $i;continue;\
 }else if($i ~/mysql/){\
 print $i;next;\
 }else if($i ~/^test/){\
 print $i;break;\
 } \
 }\
}' test

 

例c

 

tail test | awk 'BEGIN{while(getline d){ split(d,test);for(i in test){\
 print test[i]\
}}}'

 

例d

 

ls -al /home/zhangy/mytest | awk 'BEGIN{while(getline d){ split(d,test);\
 print test[9] ;}
}'

 

例e

 

echo "32:34" |awk -F: '{print "max = ",max($1,$2)}\
function max(one,two){
if(one > two){
 return one;
}else{
 return two;
}
}'

 

例f

 

awk -F: '{mat=match($1,/^[a-zA-Z]+$/);print mat,RSTART,RLENGTH}' test

 

例g

 

cat test |awk -F: '\
 NF != 7{\
printf("line %d,does not have 7 fields:%s\n",NR,$0)}\
$1 !~ /^[A-Za-z0-9]/{printf("line %d,non alpha and numeric user id:%s: %s\n",NR,$1,$0)}\
$2 == "*" {printf("lind %d,no password:%s\n",NR,$0)}'
 

测试文件

 

[root@Blackghost test2]# cat aaa //测试文件aaa
1111:23434:zhang
hoadsf:asdf:ccc
[root@Blackghost test2]# cat ccc  //测试文件ccc
1111:23434:zhang
hoadsf:asdf:ccc
tank:zhang:x20342
ying:zhasdf:72342
hosa:asdfa:2345sdf

 

例a

 

[root@Blackghost test2]# awk '{print NR;print FNR;print $0;}' aaa
1   //NR
1   //FNR
1111:23434:zhang
2
2
hoadsf:asdf:ccc

 

例b

 

[root@Blackghost test2]# awk '{print NR;print FNR;print $0;}' aaa ccc
1
1
1111:23434:zhang
2    //NR
2    //FNR
hoadsf:asdf:ccc
3    //NR
1    //FNR   下面的数据是来自ccc,所以NFR重置为1
1111:23434:zhang
4
2
hoadsf:asdf:ccc
5
3
tank:zhang:x20342
6
4
ying:zhasdf:72342
7
5
hosa:asdfa:2345sdf
 

只显示出现过一次的记录

# cat aaa

59314
46791
59992
60311
60134
59992
60311
97343

# cat aaa | awk '!a[$1]++'


59314
46791
59992
60311
60134
97343
 
   

#输出/etc/passwd中关于root的第二个位置的内容
# cat /etc/passwd |grep root |awk '{print $2}'

 


sed

相关命令:awk

sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像。sed按顺序逐行读取文件。然后,它执行为该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可以存放到文件中。完成了一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。在这里要注意一点,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。说白了就是一行一行的操作。我用sed主要就是用里面的替换功能,真的很强大。下面以实例,详细的说一下,先从替换开始,最常用的。

sed -h
 -n, --quiet, --silent    取消自动打印模式空间
 -e 脚本, --expression=脚本   添加“脚本”到程序的运行列表
 -f 脚本文件, --file=脚本文件  添加“脚本文件”到程序的运行列表
 --follow-symlinks    直接修改文件时跟随软链接
 -i[扩展名], --in-place[=扩展名]    直接修改文件(如果指定扩展名就备份文件)
 -l N, --line-length=N   指定“l”命令的换行期望长度
 --posix  关闭所有 GNU 扩展
 -r, --regexp-extended  在脚本中使用扩展正则表达式
 -s, --separate  将输入文件视为各个独立的文件而不是一个长的连续输入
 -u, --unbuffered  从输入文件读取最少的数据,更频繁的刷新输出
 --help     打印帮助并退出
 --version  输出版本信息并退出

测试文件

 

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po

 

例a,这个例子,把test文件中的root替换成tankzhang,只不过只替换一次及终止在这一行的操作,转到下一行

 

[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/' test |grep tank
 tankzhang:x:0:0:root:/root:/bin/bash

 

例b,这个例子,用tankzhang把文件test中的root全部替换掉,请注意g这个字母,global的缩写

 

[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/g' test |grep zhang
 tankzhang:x:0:0:tankzhang:/tankzhang:/bin/bash
 zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
 ba:x:1002:1002::/home/zhangy:/bin/bash
 @zhangying:*:1004:1004::/home/test:/bin/bash

 

例c,加了-n p后表示只打印那些发生替换的行(部分替换),上面的例子,我并没有加上grep

 

[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/p' test
 tankzhang:x:0:0:root:/root:/bin/bash

 

例d,加了-n pg后表示只打印那些发生替换的行(全部替换),上面的例子,我并没有加上grep

 

[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/pg' test
 tankzhang:x:0:0:tankzhang:/tankzhang:/bin/bash

 

例e,在第二行,到第八行之间,替换以zhang开头的行,用ying来替换,并显示替换的行

 

[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/^zhang/ying/gp'
 yingy:x:1000:100:,,,:/home/zhangy:/bin/bash

 

例f,当有多个命令要执行时,可以用分号来分开,并且分隔符可以自定义,默认是/。上面的例子意思是在第二行,到第八行之间,替换以zhang开头的行,用ying来替换,在5,到10间,用goodbay来替换dbus,并显示替换的行

 

[zhangy@BlackGhost mytest]# cat test | sed -n  '2,8s/^zhang/ying/gp;5,10s#dbus#goodbay#gp'
 yingy:x:1000:100:,,,:/home/zhangy:/bin/bash
 goodbay:x:81:81:System message bus:/:/bin/false

 

例g,这个例子根上面的那个例子一样,只不过有一点不同,那就是-e来充当了分号的作用,-e也能分割多个命令。

 

[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/zhang/ying/gp' -ne  '5,10s#dbus#goodbay#gp'
 yingy:x:1000:100:,,,:/home/yingy:/bin/bash
 goodbay:x:81:81:System message bus:/:/bin/false

 

例h,正则的用法,在sed里面用括号的话要加上\的,不然会报错的。

 

[zhangy@BlackGhost mytest]# sed -ne '2,8s/^\(zhangy\)/\1ing/gp' test
 zhangying:x:1000:100:,,,:/home/zhangy:/bin/bash

[root@masters ~]# sed -ne '2,8s/^\(zhangy\)/&ing/gp' test
zhangying:x:1000:100:,,,:/home/zhangy:/bin/bash

 

例i,&的用处是,在找到的字符串后加上&后面的字符串,zhang后都加上了ying

 

[zhangy@BlackGhost mytest]# sed -ne '2,15s/zhang/&ying/gp' test
 zhangyingy:x:1000:100:,,,:/home/zhangyingy:/bin/bash
 ba:x:1002:1002::/home/zhangyingy:/bin/bash
 @zhangyingying:*:1004:1004::/home/test:/bin/bash

 

例j,这个例子是说,在以zhang开头的行开始,到匹配Po的行结束,在他们之间进行替换

 

[zhangy@BlackGhost mytest]# sed -ne '/^zhang/,/Po/s/zhang/ying/gp' test
 yingy:x:1000:100:,,,:/home/yingy:/bin/bash
 ba:x:1002:1002::/home/yingy:/bin/bash
 @yingying:*:1004:1004::/home/test:/bin/bash

 

例k,n;这里的n是next的缩写,找到root的行后,将其下一行的中的bin换成tank

 

[zhangy@BlackGhost mytest]$ sed  '/root/{n;s/bin/tank/}' test
 root:x:0:0:root:/root:/bin/bash
 tank:x:1:1:bin:/bin:/bin/false

 

例m,y的作用是将匹配的字符换成大写,不过替换字符和被替换字符长度要一样

 

[zhangy@BlackGhost mytest]$ sed -e '1,2y/root/ROOT/' test
 ROOT:x:0:0:ROOT:/ROOT:/bin/bash
 bin:x:1:1:bin:/bin:/bin/false

 

例n,h的作用是将找到的行,放到一个缓存区,G的作用是将缓存区中的内容放到最后一行

 

[zhangy@BlackGhost mytest]$ sed -e '/root/h' -e '$G' test
................................
.............................
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
root:x:0:0:root:/root:/bin/bash

 

例o,行替换,用匹配root的行,来替换匹配zhangy的行

 

[zhangy@BlackGhost mytest]$ sed -e '/root/h' -e '/zhangy/g' test
 root:x:0:0:root:/root:/bin/bash
 bin:x:1:1:bin:/bin:/bin/false
 daemon:x:2:2:daemon:/sbin:/bin/false
 mail:x:8:12:mail:/var/spool/mail:/bin/false
 ftp:x:14:11:ftp:/home/ftp:/bin/false
 &nobody:$:99:99:nobody:/:/bin/false
 root:x:0:0:root:/root:/bin/bash
 http:x:33:33::/srv/http:/bin/false
 dbus:x:81:81:System message bus:/:/bin/false
 hal:x:82:82:HAL daemon:/:/bin/false
 mysql:x:89:89::/var/lib/mysql:/bin/false
 aaa:x:1001:1001::/home/aaa:/bin/bash
 root:x:0:0:root:/root:/bin/bash
 test:x:1003:1003::/home/test:/bin/bash
 root:x:0:0:root:/root:/bin/bash

 

例p,这个例子是说,在以zhang开头的行开始,到匹配Po的行结束,在他们之间进行替换

 

[zhangy@BlackGhost mytest]# sed -ne '/^zhang/,/Po/s/zhang/ying/gp' test
 yingy:x:1000:100:,,,:/home/yingy:/bin/bash
 ba:x:1002:1002::/home/yingy:/bin/bash
 @yingying:*:1004:1004::/home/test:/bin/bash

 

例q,3q的意思是到第三行的时候,退出

 

[zhangy@BlackGhost mytest]$ sed -e 's/bin/tank/g;3q' test
 root:x:0:0:root:/root:/tank/bash
 tank:x:1:1:tank:/tank:/tank/false
 daemon:x:2:2:daemon:/stank:/tank/false

 

例r,特殊匹配

 

匹配数字别忘了中括号外面还有一个中括号。
[:alnum:] 字母数字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字 [0-9]
[:graph:] 任何可视字符(无空格)
[:lower:] 小写 [a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写 [A-Z]
[:xdigit:] 十六进制数字 [0-9 a-f A-F]

[zhangy@BlackGhost mytest]# sed -ne '2,15s/zhangy.*[[:digit:]]/=======/gp'  test
 =======:,,,:/home/zhangy:/bin/bash
 @=======::/home/test:/bin/bash
 

例a,删除1,14行

 

[zhangy@BlackGhost test]$ sed -e '1,14d' test
 @zhangying:*:1004:1004::/home/test:/bin/bash
 policykit:x:102:1005:Po

 

例b,删除4以后的行,包括第4行,把$当成最大行数就行了。

 

[zhangy@BlackGhost mytest]$ sed -e '4,$d' test
 root:x:0:0:root:/root:/bin/bash
 bin:x:1:1:bin:/bin:/bin/false
 daemon:x:2:2:daemon:/sbin:/bin/false

 

例c,删除包括false的行,或者包括bash的行,别忘了加\

 

[zhangy@BlackGhost mytest]$ sed -e '/\(false\|bash\)$/d' test
 policykit:x:102:1005:Po

 

例d,删除从匹配root的行,到匹配以test开头的行,中间的行

 

[zhangy@BlackGhost mytest]$ sed -e '/root/,/^test/d' test
 @zhangying:*:1004:1004::/home/test:/bin/bash
 policykit:x:102:1005:Po
 

例a,读取test2的内容,并将其写入到匹配行的下面

 

[zhangy@BlackGhost mytest]$ sed -e '/^root/r test2' test
 root:x:0:0:root:/root:/bin/bash
 =============
 -------------
 +++++++++++++
 bin:x:1:1:bin:/bin:/bin/false
 daemon:x:2:2:daemon:/sbin:/bin/false

 

例b,将匹配数字的行,写入test2中

 

[zhangy@BlackGhost mytest]$ sed '/[[:digit:]]/w test2' test

 

例c,将要插入的东西,插入匹配行的下面

 

[zhangy@BlackGhost mytest]$ sed  '/root/a\\ ===aaaa====' test
 root:x:0:0:root:/root:/bin/bash
 ===aaaa====
 bin:x:1:1:bin:/bin:/bin/false

 

例d,正好根a相反,将要插入的东西,插入到匹配行的上面

 

[zhangy@BlackGhost mytest]$ sed '/^daemon/i\\=================' test
 root:x:0:0:root:/root:/bin/bash
 bin:x:1:1:bin:/bin:/bin/false
 =================
 daemon:x:2:2:daemon:/sbin:/bin/false
 mail:x:8:12:mail:/var/spool/mail:/bin/false


grep

相关命令:fgrep
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。Linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

grep --help
匹配模式选择:
 -E, --extended-regexp     扩展正则表达式egrep
 -F, --fixed-strings       一个换行符分隔的字符串的集合fgrep
 -G, --basic-regexp        基本正则
 -P, --perl-regexp         调用的perl正则
 -e, --regexp=PATTERN      后面根正则模式,默认无
 -f, --file=FILE           从文件中获得匹配模式
 -i, --ignore-case         不区分大小写
 -w, --word-regexp         匹配整个单词
 -x, --line-regexp         匹配整行
 -z, --null-data           一个 0 字节的数据行,但不是空行

杂项:
 -s, --no-messages         不显示错误信息
 -v, --invert-match        显示不匹配的行
 -V, --version             显示版本号
 --help                    显示帮助信息
 --mmap                use memory-mapped input if possible

输入控制:
 -m, --max-count=NUM       匹配的最大数
 -b, --byte-offset         打印匹配行前面打印该行所在的块号码。
 -n, --line-number         显示的加上匹配所在的行号
 --line-buffered           刷新输出每一行
 -H, --with-filename       当搜索多个文件时,显示匹配文件名前缀
 -h, --no-filename         当搜索多个文件时,不显示匹配文件名前缀
 --label=LABEL            print LABEL as filename for standard input
 -o, --only-matching       只显示一行中匹配PATTERN 的部分
 -q, --quiet, --silent      不显示任何东西
 --binary-files=TYPE   假定二进制文件的TYPE 类型;
                                      TYPE 可以是`binary', `text', 或`without-match'
 -a, --text                匹配二进制的东西
 -I                        不匹配二进制的东西
 -d, --directories=ACTION  目录操作,读取,递归,跳过
 -D, --devices=ACTION      设置对设备,FIFO,管道的操作,读取,跳过
 -R, -r, --recursive       递归调用
 --include=PATTERN     只查找匹配FILE_PATTERN 的文件
 --exclude=PATTERN     跳过匹配FILE_PATTERN 的文件和目录
 --exclude-from=FILE   跳过所有除FILE 以外的文件
 -L, --files-without-match 匹配多个文件时,显示不匹配的文件名
 -l, --files-with-matches  匹配多个文件时,显示匹配的文件名
 -c, --count               显示匹配了多少次
 -Z, --null                在FILE 文件最后打印空字符

文件控制:
 -B, --before-context=NUM  打印匹配本身以及前面的几个行由NUM控制
 -A, --after-context=NUM   打印匹配本身以及随后的几个行由NUM控制
 -C, --context=NUM         打印匹配本身以及随后,前面的几个行由NUM控制
 -NUM                      根-C的用法一样的
 --color[=WHEN],
 --colour[=WHEN]       使用标志高亮匹配字串;
 
 -U, --binary               使用标志高亮匹配字串;
 -u, --unix-byte-offsets   当CR 字符不存在,报告字节偏移(MSDOS 模式)

测试文件

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po

a,匹配含有root的行

[root@krlcgcms01 test]# grep root test  
root:x:0:0:root:/root:/bin/bash  

b,匹配以root开头或者以zhang开头的行,注意反斜杠

[root@krlcgcms01 test]# cat test |grep '^\(root\|zhang\)'  
root:x:0:0:root:/root:/bin/bash  
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  

c,匹配以root开头或者以zhang开头的行,注意反斜杠,根上面一个例子一样,-e默认是省去的

[root@krlcgcms01 test]# cat test |grep -e '^\(root\|zhang\)'  
root:x:0:0:root:/root:/bin/bash  
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  

d,匹配以zhang开头,只含有字母

[root@krlcgcms01 test]# echo 'zhangying' |grep '^zhang[a-z]*$'  
zhangying  

e,匹配以bin开头的行,用的egrep,在这里可以换成-F,-G

[root@krlcgcms01 test]# cat test |grep -E '^bin'  
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa  

f,在匹配的行前面加上该行在文件中,或者输出中所在的行号

[root@krlcgcms01 test]# cat test|grep -n zhangy  
7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  
13:ba:x:1002:1002::/home/zhangy:/bin/bash  
15:@zhangying:*:1004:1004::/home/test:/bin/bash  

g,不匹配以bin开头的行,并显示行号

[root@krlcgcms01 test]# cat test|grep -nv '^bin'  
root:x:0:0:root:/root:/bin/bash
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po

h,显示匹配的个数,不显示内容

[root@krlcgcms01 test]#  cat test|grep -c zhang  
3  

i,匹配system,没有加-i没有匹配到东西。

[root@krlcgcms01 test]# grep  system test  
[root@krlcgcms01 test]# grep -ni  system test  
9:dbus:x:81:81:System message bus:/:/bin/false  

j,匹配zhan没有匹配到东西,匹配zhangy能匹配到,因为在test文件中,有zhangy这个单词

[root@krlcgcms01 test]#  cat test|grep -w zhan  
[root@krlcgcms01 test]#  cat test|grep -w zhangy  
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  
ba:x:1002:1002::/home/zhangy:/bin/bash  

k,在这里-x后面东西,和输出中的整行相同时,才会输出

[root@krlcgcms01 test]# echo "aaaaaa" |grep -x aaa  
[root@krlcgcms01 test]# echo "aaaa" |grep -x aaaa  
aaaa  

l,最多只匹配一次,如果把-m 1去掉的话,会有三个

[root@krlcgcms01 test]# cat test |grep -m 1 zhang  
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  

m,匹配行的前面显示块号,这个块号是干什么的,不知道,有谁知道可否告诉我一下

[apacheuser@krlcgcms01 test]$ cat test |grep -b zha  
241:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  
480:ba:x:1002:1002::/home/zhangy:/bin/bash  
558:@zhangying:*:1004:1004::/home/test:/bin/bash  

n,多文件匹配时,在匹配的行前面加上文件名

[apacheuser@krlcgcms01 test]$ grep -H 'root' test test2 testbak  
test:root:x:0:0:root:/root:/bin/bash  
test2:root  
testbak:root:x:0:0:root:/root:/bin/bash  

o,多文件匹配时,在匹配的行前面不加上文件名

[apacheuser@krlcgcms01 test]$ grep -h 'root' test test2 testbak  
root:x:0:0:root:/root:/bin/bash  
root  
root:x:0:0:root:/root:/bin/bash  

p,多文件匹配时,显示匹配文件的文件名

[apacheuser@krlcgcms01 test]$ grep -l 'root' test test2 testbak DAta  
test  
test2  
testbak  

q,没有-o时,有一行匹配,这一行里面有3个root,加上-o后,这个3个root就出来了

[apacheuser@krlcgcms01 test]$ grep  'root' test  
root:x:0:0:root:/root:/bin/bash  
[apacheuser@krlcgcms01 test]$ grep -o 'root' test  
root  
root  
root  

r,递归显示匹配的内容,在test目录下面建个mytest目录,copy test目录下面的test文件到mytest下面,能看到上面的结果

[root@krlcgcms01 test]# grep test -R /tmp/test/mytest  
/tmp/test/mytest/test:test:x:1003:1003::/home/test:/bin/bash  
/tmp/test/mytest/test:@zhangying:*:1004:1004::/home/test:/bin/bash  

s,显示匹配root后面的3行

[root@krlcgcms01 test]# cat test |grep -A 3 root  
root:x:0:0:root:/root:/bin/bash  
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa  
daemon:x:2:2:daemon:/sbin:/bin/false  
mail:x:8:12:mail:/var/spool/mail:/bin/false  

vim

相关命令:ed,nano
用法: vim [参数] [文件 ..]       编辑指定的文件
  或: vim [参数] -               从标准输入(stdin)读取文本
  或: vim [参数] -t tag          编辑 tag 定义处的文件
  或: vim [参数] -q [errorfile]  编辑第一个出错处的文件

参数:
   --                   在这以后只有文件名
   -v                   Vi 模式 (同 "vi")
   -e                   Ex 模式 (同 "ex")
   -s                   安静(批处理)模式 (只能与 "ex" 一起使用)
   -d                   Diff 模式 (同 "vimdiff")
   -y                   容易模式 (同 "evim",无模式)
   -R                   只读模式 (同 "view")
   -Z                   限制模式 (同 "rvim")
   -m                   不可修改(写入文件)
   -M                   文本不可修改
   -b                   二进制模式
   -l                   Lisp 模式
   -C                   兼容传统的 Vi: 'compatible'
   -N                   不完全兼容传统的 Vi: 'nocompatible'
   -V[N]                Verbose 等级
   -D                   调试模式
   -n                   不使用交换文件,只使用内存
   -r                   列出交换文件并退出
   -r (跟文件名)                恢复崩溃的会话
   -L                   同 -r
   -A                   以 Arabic 模式启动
   -H                   以 Hebrew 模式启动
   -F                   以 Farsi 模式启动
   -T <terminal>        设定终端类型为 <terminal>
   -u <vimrc>           使用 <vimrc> 替代任何 .vimrc
   --noplugin           不加载 plugin 脚本
   -P[N]                打开 N 个标签页 (默认值: 每个文件一个)
   -o[N]                打开 N 个窗口 (默认值: 每个文件一个)
   -O[N]                同 -o 但垂直分割
   +                    启动后跳到文件末尾
   +<lnum>              启动后跳到第 <lnum> 行
   --cmd <command>      加载任何 vimrc 文件前执行 <command>
   -c <command>         加载第一个文件后执行 <command>
   -S <session>         加载第一个文件后执行文件 <session>
   -s <scriptin>        从文件 <scriptin> 读入正常模式的命令
   -w <scriptout>       将所有输入的命令追加到文件 <scriptout>
   -W <scriptout>       将所有输入的命令写入到文件 <scriptout>
   -x                   编辑加密的文件
   -i <viminfo>         使用 <viminfo> 取代 .viminfo
   -h  或  --help       打印帮助(本信息)并退出

   --version            打印版本信息并退出


1. 查找

  /xxx(?xxx)      表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示
                  向上查找.其中xxx可以是正规表达式,关于正规式就不多说了.
                  一般来说是区分大小写的, 要想不区分大小写, 那得先输入
                  :set ignorecase
                  查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.

  *(#)            当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的
                  下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方
                  向查找.

  g*(g#)          此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而
                  是匹配包含该单词的所有字符串.

  gd              本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非
                  注释段中第一次出现这个单词的地方.

  %               本命令查找与光标所在处相匹配的反括号, 包括 () [] {}

  f(F)x           本命令表示在光标所在行进行查找, 查找光标右(左)方第一个x字符.
                  找到后:
                  输入 ; 表示继续往下找
                  输入 , 表示反方向查找
 
 
2. 快速移动光标
   在 vi 中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定
位和编辑. 因此能更快一点移动光标是很有用的.

  w(e)            移动光标到下一个单词.
  b               移动光标到上一个单词.

  0               移动光标到本行最开头.
  ^               移动光标到本行最开头的字符处.
  $               移动光标到本行结尾处.

  H               移动光标到屏幕的首行.
  M               移动光标到屏幕的中间一行.
  L               移动光标到屏幕的尾行.
  gg              移动光标到文档首行.
  G               移动光标到文档尾行.
  c-f             (即 ctrl 键与 f 键一同按下) 本命令即 page down.
  c-b             (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up.

  ''              此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查
                  找到某个单词后, 再输入此命令则回到上次停留的位置.

  '.              此命令相当好使, 它移动光标到上一次的修改行.

  `.              此命令相当强大, 它移动光标到上一次的修改点.
 
 
 
3. 拷贝, 删除与粘贴
   在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令
结合的, 看几个例子就能够明白了.

  yw              表示拷贝从当前光标到光标所在单词结尾的内容.
  dw              表示删除从当前光标到光标所在单词结尾的内容.
  y0              表示拷贝从当前光标到光标所在行首的内容.
  d0              表示删除从当前光标到光标所在行首的内容.
  y$              表示拷贝从当前光标到光标所在行尾的内容.
  d$              表示删除从当前光标到光标所在行尾的内容.
  yfa             表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
  dfa             表示删除从当前光标到光标后面的第一个a字符之间的内容.

  特殊地:
  yy              表示拷贝光标所在行.
  dd              表示删除光标所在行.
  D               表示删除从当前光标到光标所在行尾的内容.

  关于拷贝, 删除和粘贴的复杂用法与寄存器有关, 可以自行查询.
 
 
 
4. 数字与命令
   在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行
号定位. 如:

  5fx             表示查找光标后第 5 个 x 字符.

  5w(e)           移动光标到下五个单词.

  5yy             表示拷贝光标以下 5 行.
  5dd             表示删除光标以下 5 行.

  y2fa            表示拷贝从当前光标到光标后面的第二个a字符之间的内容.

  :12,24y         表示拷贝第12行到第24行之间的内容.
  :12,y           表示拷贝第12行到光标所在行之间的内容.
  :,24y           表示拷贝光标所在行到第24行之间的内容. 删除类似.
 
 
 
5. 快速输入字符
   在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符.
   使用 linux/unix 的同学一定有一个经验, 在命令行下输入命令时敲入头几个字符再按
TAB 系统就会自动将剩下的字符补齐, 假如有多个匹配则会打印出来. 这就是著名的命令
补齐(其实windows中也有文件名补齐功能). vi 中有许多的字符串补齐命令, 非常方便.

  c-p(c-n)        在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜
                  索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令
                  会在所有在这个 vim 程序中打开的文件中进行匹配.

  c-x-l           在编辑模式中, 此命令快速补齐整行内容, 但是仅在本窗口中出现的
                  文档中进行匹配.

  c-x-f           在编辑模式中, 这个命令表示补齐文件名. 如输入:
                  /usr/local/tom 后再输入此命令则它会自动匹配出:
                  /usr/local/tomcat/

  abbr            即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个
                  字符串. 比如编写java文件的常常输入 System.out.println, 这很
                  是麻烦, 所以应该用缩写来减少敲字. 可以这么做:
                  :abbr sprt System.out.println
                  以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System.
                  out.println
 
 
 
6. 替换
   替换是 vi 的强项, 因为可以用正规表达式来匹配字符串.以下提供几个例子.

  :s/aa/bb/g      将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
  :s/\<aa\>/bb/g  将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
  :%s/aa/bb/g     将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
  :12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
  :12,23s/^/#/    将从12行到23行的行首加入 # 字符
  :%s= *$==       将所有行尾多余的空格删除
  :g/^\s*$/d       将所有不包含字符(空格也不包含)的空行删除.
 
 
 
7. 多文件编辑
   在一个 vim 程序中打开很多文件进行编辑是挺方便的.

  :sp(:vsp) 文件名    vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.
                      从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会
                      把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打
                      开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看
                      到帮助信息.

  :e 文件名           vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.

  c-w-w               vim 分割了好几个窗口怎么办? 输入此命令可以将光标循环定位
                      到各个窗口之中.

  :ls                 此命令查看本 vim 程序已经打开了多少个文件, 在屏幕的最下方
                      会显示出如下数据:
                      1   %a      "usevim.html"         行 162
                      2   #       "xxxxxx.html"         行 0

                      其中:
                      1               表示打开的文件序号, 这个序号很有用处.
                      %a              表示文件代号, % 表示当前编辑的文件,
                                      # 表示上次编辑的文件
                      "usevim.html"   表示文件名.
                      行 162          表示光标位置.

  :b 序号(代号)       此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)
                      就是用 :ls 命令看到的.

  :set diff           此命令用于比较两个文件, 可以用
                      :vsp filename
                      命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看
                      到效果了.
 
 
 
8. 宏替换
   vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,
因此我把它们定义到 <F1>-<F12> 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc
(windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.

  :nmap <F2> :nohls<cr>              取消被搜索字串的高亮
  :nmap <F9> <C-W>w                  命令模式下转移光标到不同窗口
  :imap <F9> <ESC><F9>               输入模式下运行<F9>
  :nmap <F12> :%s= *$==<cr>          删除所有行尾多余的空格.
  :imap <F12> <ESC><F12>             同上

  :java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文
            会说到如何实现这一点)
  :nmap <F3> :comp javac<CR>:mak -d . %<CR>
       此命令用 javac 编译 java 文件, 它会自动将光标定位到出错点. 不过这需要定
义一个 javac.vim 文件在 $VIM/compiler 下, 在 javac.vim 里面只有两行字:
          setlocal makeprg=javac
          setlocal errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#

  :nmap <F4> :comp ant<CR>:mak<CR>
       此命令用 ant 编译 java 文件, 它会自动将光标定位到出错点. 一般来说, 安装
       vim 后已经有了compiler/ant.vim文件, 因此这个命令可以直接使用. 但是需要
       在当前目录下有 build.xml 文件, 当然还必须安装 ant 才行.

  :nmap <F5> :cl<CR>                 此命令用于查看所有的编译错误.
  :imap <F5> <ESC><F5>

  :nmap <F6> :cc<CR>                 此命令用于查看当前的编译错误.
  :imap <F6> <ESC><F6>

  :nmap <F7> :cn<CR>                 此命令用于跳到下一个出错位置.
  :imap <F7> <ESC><F7>

  :nmap <F8> :cp<CR>                 此命令用于跳到上一个出错位置.
  :imap <F8> <ESC><F8>

  :nmap <F11> :JavaBrowser<cr>
       此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括
       本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 表现的那样.
       在这个窗口中输入 ? 会看到帮助. 嘿嘿, 很好用, 不过需要 ctags 支持.
  :imap <F11> <ESC><F11>
 
 
 
9. TAB
   TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.

   <<                  输入此命令则光标所在行向左移动一个 tab.
   >>                  输入此命令则光标所在行向右移动一个 tab.
   5>>                 输入此命令则光标后 5 行向右移动一个 tab.
   :12,24>             此命令将12行到14行的数据都向右移动一个 tab.
   :12,24>>            此命令将12行到14行的数据都向右移动两个 tab.

   那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.
   有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能
   帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.

   :set shiftwidth=4   设置自动缩进 4 个空格, 当然要设自动缩进先.
   :set sts=4          即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
   :set tabstop=4      实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
   :set expandtab      在输入 tab 后, vim 用恰当的空格来填充这个 tab.
 
 
 
10. autocmd
    这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以
在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件
里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.

  :autocmd!               删除所有之前的自动命令.
  autocmd FileType        java  source ~/.vim/files/java.vim
  autocmd FileType        java  source ~/.vim/files/jcommenter.vim
    以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.
  autocmd BufNewFile      *.java  0r ~/.vim/files/skeletons/java.skel
    以上这条命令让我在新建 java 文件时自动加入 java.skel 文件的内容.
  autocmd BufNewFile      *.java  normal gnp
    以上这条命令让我在新建 java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化
    处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.
 
 
 
11. 常用脚本
    在 vim.sf.net 你可以发现很多脚本(script), 这些脚本常常有让你意想不到的作用.
我常用的有:

    jcommenter.vim        自动加入 javadoc 风格的注释.
    JBrowser.vim          类资源浏览. C, C++ 等可以用 Tlist

    还有许多有用的, 比如 checkstyle.vim 可以检验你的编程风格, jad.vim 可以直接
    反编译 .class 文件等等.
 
 
 
12. 常用配置
    在~/.vimrc 配置文件中你常常需要一些个性化配置. 比如上面写的一些宏定义, 一些
autocmd 定义等等. 比如:

    set suffixes=.bak,~,.o,.h,.info,.swp,.aux,.bbl,.blg,.dvi,.lof,.log,.lot,.ps,.toc
        这样在vim中打开文件时, 按 tab 键补齐文件名时它会忽略上述文件.

    set nu          显示行号
    set ai          设置自动缩进
    map Y y$        让 Y 和 D 一样, 要不然 Y 的本意和 yy 一样.
 
 
 
13. 其他
    还有许多有意思的命令, 记录在这里免得忘记.

    .                                                                     重复上次编辑命令.
    :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)     在行首插入行号。
    :runtime! syntax/2html.vim                            转换 txt 成 html, 会按照你的颜色配置来转换

[root@linux test]# vim test.php   #编辑文件

seq

相关命令:
用法:seq [选项]... 尾数
 或:seq [选项]... 首数 尾数
 或:seq [选项]... 首数 增量 尾数
以指定增量从首数开始打印数字到尾数。

  -f, --format=格式     使用printf 样式的浮点格式
  -s, --separator=字符串        使用指定字符串分隔数字(默认使用:\n)
  -w, --equal-width     在列前添加0 使得宽度相同
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

如果省略了首数或者增量,则默认其值为1,即使这样尾数仍小于首数。
首数、增量和尾数均以浮点数形式解释。当首数小于尾数时增量一般为正值,
相反在首数大于尾数时增量一般为负数。
指定的格式必须适用于显示"double"类型的参数;当首数、增量和尾数均为指定
精确度的定点十进制数时默认为"%.精确度f",否则默认为"%g"。
[root@localhost ~]# seq 1 5      #打印1到5
1
2
3
4
5

[root@localhost ~]# seq 3 5      #打印3到5
3
4
5

[root@localhost ~]# seq 1 3 8    #打印1到8,跨度3
1
4
7
 
posted @ 2015-10-26 14:02  519752831  阅读(436)  评论(0编辑  收藏  举报