文件匹配常用Linux命令小结

最近研究文件匹配,稍微总结一下,当前继续补充:

    经常使用Linux命令小结

    Linux下有很多经常使用的很有用的命令,这种命令用的多了就熟了,对于我来说,如果长时间没有用的话,就容易忘却。当然,可以到时候用man命令查看帮助,但是,到时候查找的话不免有些临时抱佛脚的感觉,挺浪费时间的,不如闲暇时间先把经常使用命令看看,有个初始印象,然后查阅的时候就有目的性了,自然也就用的快了。

    对于我来说,经过练习期间的锤炼,积累了不少linux经常使用命令,存在evernote上,由于是在各种网页中,有些凌乱,再加上evernote是个一直增加的容器,到前面可能查阅就很难了。将这些经常使用命令总结出来,一者是再看一遍,加深印象;二者是加上总结索引,以便当前查阅;三者对evernote瘦身,以免尾大不掉。

    有须要的同学可以下载pdf,毕竟csdn博客上的排版确实难搞,下载请猛击这里

    

1.   grep命令[1]

    

1.1.       简介

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

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

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

    

1.2.       grep正则表达式元字符集(基本集)

    ^    锚定行的开始如:'^grep'匹配全部以grep开头的行。

    $     锚定行的结束如:'grep$'匹配全部以grep结尾的行。

    .     匹配一个非换行符的字符如:'gr.p'匹配gr后接一个任意字符,然后是p。

    *     匹配零个或多个先前字符如:'*grep'匹配全部一个或多个空格后紧跟grep的行。 .*一升引代表任意字符。

    []    匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

    [^]  匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

    \(..\)    标记匹配字符,如'\(love\)',love被标记为1。

    \<        锚定单词的开始。

    \>        锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。

    x\{m\}      重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。

    x\{m,\}     重复字符x,最少m次,如:'o\{5,\}'匹配最少有5个o的行。

    x\{m,n\}   重复字符x,最少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。

    \w   匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

    \W  \w的反置形式,匹配一个或多个非单词字符,如点号句号等。

    \b   单词锁定符,如: '\bgrepb\'只匹配grep。

    

1.3.       用于egrep和 grep -E的元字符扩展集

    +    匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

    ?         匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。

    a|b|c    匹配a或b或c。

    ()         分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

    x{m},x{m,},x{m,n}      作用同x\{m\},x\{m,\},x\{m,n\}

    

1.4.       Grep命令选项

    -?      同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

    -b,--byte-offset         打印匹配行前面打印该行地点的块号码。

    -c,--count              只打印匹配的行数,不显示匹配的内容。

    -f File,--file=File    从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。

    -h,--no-filename   当搜索多个文件时,不显示匹配文件名前缀。

    -i,--ignore-case         忽略大小写差别。

    -q,--quiet             取消显示,只返回退出状态。0则表现找到了匹配的行。

    -l,--files-with-matches     打印匹配模板的文件清单。

    -L,--files-without-match   打印不匹配模板的文件清单。

    -n,--line-number             在匹配的行前面打印行号。

    -s,--silent                      不显示关于不存在或者无法读取文件的错误信息。

    -v,--revert-match           反检索,只显示不匹配的行。

    -w,--word-regexp           如果被\<和\>引用,就把表达式做为一个单词搜索。

    -V,--version                        显示软件版本信息。

    

2.         gcc

    基本参数[2]

    -E,只执行到预编译。直接输出预编译结果,如gcc -E source_file.c     。

    -S,只执行到源代码到汇编代码的转换,输出汇编代码。如gcc -S source_file.c 。

    -c,只执行到编译,输出目标文件,如gcc -c source_file.c。

    -g,生成供调试用的可执行文件,可以在gdb中运行。由于文件中包含了调试信息因此运行效率很低,且文件也大不少。如gcc -gsource_file.c。这里可以用strip命令重新将文件中debug信息删除。这是会发明生成的文件甚至比畸形编译的输出更小了,这是因为strip把原先畸形编译中的一些额外信息(如函数名之类)也删除了。用法为 strip a.out

    -s, 直接生成与应用strip一样效果的可执行文件(删除了全部符号信息)。如gcc -s source_file.c。

    -O(大写的字母O),编译器对代码进行主动优化编译,输出效率更高的可执行文件。如gcc -Osource_file.c。-O 前面还可以跟上数字指定优化级别,如:gcc -O2 source_file.c。数字越大,越加优化。但是通常情况下,主动的东西都不是太聪明,太大的优化级别可能会使生成的文件发生一系列的bug。一般可选择2;3会有一定风险。

    -W,在编译中开启一些额外的正告(warning)信息。-Wall,将全部的正告信息全开。如:gcc -Wall source_file.c。

    例子:gccsource_file.c -L/path/to/lib -lxxx -I/path/to/include

    -l, 指定所使用到的函数库,本例中链接器会尝试链接名为libxxx.a的函数库。

    -L,指定函数库地点的文件夹,本例中链接器会尝试搜索/path/to/lib文件夹。

    -I, 指定头文件地点的文件夹,本例中预编译器会尝试搜索/path/to/include文件夹。

    -o, 指定输出文件名,可以配合以上三种标签使用。-o 参数可以被省略。这种情况下编译器将使用以下默认名称a.out输出。如:gcc (-E/S/c/) source_file.c -o output_filename

    -shared参数,编译动态库时要用到,比如gcc -shared test.c -o libtest.so。

    

3.         tar[3]

    

3.1.       tar基本命令选项

    tar命令的选项有很多(用man tar可以查看到),但经常使用的就那么几个选项,上面来举例说明一下:

    # tar -cfall.tar *.jpg

    这条命令是将全部.jpg的文件打成一个名为all.tar的包。-c是表现发生新的包,-f指定包的文件名。

    # tar -rfall.tar *.gif

    这条命令是将全部.gif的文件增加到all.tar的包里头去。-r是表现增加文件的意思。

    # tar -ufall.tar logo.gif

    这条命令是更新本来tar包all.tar中logo.gif文件,-u是表现更新文件的意思。

    # tar -tfall.tar

    这条命令是列出all.tar包中全部文件,-t是列出文件的意思

    # tar -xfall.tar

    这条命令是解出all.tar包中全部文件,-x是解开的意思

    还有-v是输出压缩或者解压后的文件的名字。

    

3.2.       压缩文件命令

    为了方便用户在打包解包的同时可以压缩或解压文件,tar供给了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序,比如调用gzip、bzip2等。

    

3.2.1.       tar调用gzip

    gzip是GNU组织开辟的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip绝对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。上面来举例说明一下:

    # tar -czf all.tar.gz *.jpg

    这条命令是将全部.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz

    # tar -xzfall.tar.gz

    这条命令是将上面发生的包解开。

    

3.2.2.       tar调用bzip2

    bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。与bzip2绝对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。上面来举例说明一下:

    # tar -cjfall.tar.bz2 *.jpg

    这条命令是将全部.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个bzip2压缩过的包,包名为all.tar.bz2

    # tar -xjfall.tar.bz2

    这条命令是将上面发生的包解开。

    

3.2.3.       tar调用compress

    compress也是一个压缩程序,但是好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与compress绝对的解压程序是uncompress。tar中使用-Z这个参数来调用gzip。上面来举例说明一下:

    # tar -cZf all.tar.Z *.jpg

    这条命令是将全部.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z

    # tar -xZf all.tar.Z

    这条命令是将上面发生的包解开。

    

3.3.       Rar与zip

    

3.3.1.       Zip

    linux下供给了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,这里只做简略分析,依旧举例说明一下其用法:

    # zip all.zip*.jpg

    这条命令是将全部.jpg的文件压缩成一个zip包

    # unzip all.zip

    这条命令是将all.zip中的全部文件解压出来。

    

3.3.2.       Rar

    它们的参数选项很多,这里只做简略分析,依旧举例说明一下其用法:

    # rar a all*.jpg

    这条命令是将全部.jpg的文件压缩成一个rar包,名为all.rar,该程序会将.rar扩展名将主动附加到包名后。

    # unrar eall.rar

    这条命令是将all.rar中的全部文件解压出来

    

4.         经常使用文本操作小命令

    

4.1.       cat

    查看文件中的内容,-n查看时为每一行加编号;-b 和-n相似,只不过对于空白行不编号;

    

4.2.       head|tail

    head file 显示文件头的内容,默认显示10行,加 -n 可以显示指定的行数;tailfile 显示文件尾的内容,默认显示10行,加 -n 可以显示指定的行数;如:tail -n 20 file 显示文件后20行。

    

4.3.       more|less

    more file 分屏显示文件的内容;less file 分屏显示文件的内容,在more的基础上可以上下翻页;

    

4.4.       diff

    diff 比较两个文件内容的不同,呈文文件的差异;

    -b 忽略文件中空格形成的不同 -B 忽略文件中空行形成的不同;

    -l 忽略文件中的大小写形成的不同;

    例如:difffile1 file2 ; diff -B file1 file2 ;

    

4.5.       uniq

    uniq 出除文件中重复的行; uniq file 可以将文件file中相临的重复行去除;

    

4.6.       wc

    wc 用来统计文本中的行数,词数,字数;

    参数:-c,--bytes

    打印字节数(printthe byte counts)

    参数:-m,--chars

    打印字符数(printthe character counts)

    参数:-l,--lines

    打印行数(printthe newline counts)

    参数:-L, --max-line-length

    打印最长行的长度(printthe length of the longest line)

    参数:-w,--words

    打印单词数(printthe word counts)

    

4.7.       split[4]

    在Linux下用split进行文件分割:

    1)   SYNOPSIS

    split [OPTION]... [INPUT [PREFIX]]

    INPUT :Filename

    PREFIX:分割生成文件前缀

    2)   OPTIONs:

    -a,--suffix-length=N    use suffixes oflength N (default 2) 后缀长度默认2,可以设置

    -b, --bytes=SIZE         put SIZE bytes per output file  按大小分割时分割块大小

    -C,--line-bytes=SIZE   put at most SIZE bytesof lines per output file

    -d,--numeric-suffixes  use numeric suffixesinstead of alphabetic 后缀采用数字编号,而非字典字母 ,默认采用字典顺序

    -l,--lines=NUMBER      put NUMBER lines peroutput file 按行分割,分割行数

    --verbose                        print a diagnostic justbefore each output file is opened

    --help          display this help and exit

    --version      output version information and exit

    3)   样例

    模式一:指定分割后文件行数

    对与txt文本文件,可以通过指定分割后文件的行数来进行文件分割。

    如:split -l300 large_file.txt new_file_prefix

    模式二:指定分割后文件大小

    对于可执行文件等二进制文件,则不能通过文件行数来进行文件分割,此时我们可以指定分割大小来分隔文件。

    如:split -b10m large_file.bin new_file_prefix对二进制文件我们一样也可以按文件大小来分隔。

    

5.         sed[5]

    sed是一个非交互性文本流编辑器,它编辑文件或标准输入导出的文件拷贝。可以在命令行输入sed命令,也可以在一个文件中写入命令,在使用sed时,sed并不于初始化文件打交道,它操作的只是一个拷贝,然后全部的改动 如果没有重定向到一个文件,将输出到屏幕。因为sed是一个非交互性编辑器,必须通过行号或正规表达式指定要改变 的文本行。

    

5.1.       sed怎么读取数据

    sed从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一命令,并使用这些命令查找模式或定位行号编辑它,重复此过程命令结束。

    

5.2.       调用sed

    调用sed有三种方式在命令行键入命令;将sed命令插入脚本文件,然后调用sed;将sed命令插入脚本文件,并使sed脚本可执行。

    

5.2.1.       sed命令格式:

    sed [选项] sed命令输入文件      【命令行在使用sed时,实际命令要加单引号。sed也允许加双引号】

    sed [选项] -f  sed脚本文件输入文件

    sed选项如下:

    1)   n 不打印  【sed不编辑行到标准输出,缺省为打印全部的行】

    2)   p 命令可以用来打印编辑行

    3)   c 下一命令是编辑命令,使用多项编辑时加入此选项,如果只用到一条sed命令,此选项无用,但指定它也没有关系

    4)   f 如果正在sed脚本文件,使用此选项,此选项通知sed一个脚本文件支撑全部的sed命令 。如:sed -f myscript.sed  input_file   【myscript.sed即为支撑sed命令的文件】

    

5.2.2.       保存sed输出

    由于不接触初始化文件,如果想要保存改动内容,简略地将全部输出重定向到一个文件即可,例如:

    #sed’some-sed-commands‘ input-file >myoutfile

    

5.2.3.        使用sed在文件中查询文本的方式

    sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本

    1)   使用行号,可以是一个简略数字或一个行号范围

    2)   使用正规表达式

    使用sed定位文本的一些方式:

    x       行号,如1

    x,y 表现行号范围从x到y行,如2,5表现从第2行到第5行

    /pattern/               查询包含模式的行。如/disk/或/[a-z]/

  /pattern/pattern/     查询包含两个模式的行,例如/disk/disks/

    /pattern/ ,x              在给定行号上查询包含模式的行。例如/ribbon/,3

    x,/pattern/           通过行号或模式查询匹配行。例如3,/vcd/

    x,y!                    查询不包含指定行号x和y的行。例如1,2!

    

5.2.4.       基本sed编辑命令

    p       打印匹配行

    =       显示文件行号

    a\      在定位行号后附加新文本信息

    i\       在定位行号后插入新文本信息

    d       删除定位行

    c\       用新文本替换定位文本

    s        使用替换模式替换相应模式

    r       冲另一个文件中读取文件

    w      写文本到一个文件

    q       第一个模式匹配完成后推出或立即推出

    |       显示与八进制ASCII代码等价的控制字符

    {}     在定位执行的命令组

    n       从另一个文件中读文本下一行,并附加在下一行

    g       将模式2粘贴/pattern n/

    y       传送字符

    n       延续到下一输入行;允许跨行的模式匹配语句。

    sed识别任何基本正规表达式和模式及其匹配规则,如果要定位一特殊字符,必须使用(\)屏蔽其特殊含义

    

5.2.5.       命令样例

    1)   打印第2行

    #sed -n ‘2p’ temp.txt

    2)   打印指定范围,打印1到3行,用逗号分割符号

    #sed -n ‘1,3p’ temp.txt

    3)   使用行号和模式结合使用,显示temp.txt最后一行中的单词the,

    # sed -n ‘/the/p’ temp.txt

    4)   使用模式与行号的混合方式剔除第一行,和格式为line_number,/pattern/。都好用来分隔行号与模式开始部分,为了达到预期结果,使用4,/the/。意思只在第四行查询模式the。

    #sed -n ‘4,/the/p’ temp.txt

    5)   匹配元字符$前,必须使用反斜杠\屏蔽特殊含义。模式为/\$/p

    #sed -n ‘/\$/p’ temp.txt

    6)   显示整个文件,只需将行号范围设为第一行到最后一行1,$。$意为最后一行。

    #sed -n ‘1,$P’ temp.txt

    7)   显示任意字符,匹配任意字符,后跟任意字符的0次或多次重复,并以ing结尾

    #sed -n ‘/.*ing/p’ temp.txt

    8)   打印匹配的的字符并显示该行行号

    #sed -e ‘/music/=’  temp.txt

    9)   在匹配的字符串后插入新的字符串,使用附加操作即使位置,a\,a\通知sed这是一个附加操作

    #sed  “/abcd/a\ABCD” temp.txt

    10) 替换文本替换命令用替换模式指定模式,格式为

    grep s/pattern-to-find/replacerment-pattern/[gpwn]

    s选项通知sed这是一个替换操作,并查询pattern-to-find,胜利后replacement-pattern替换它。

    g:缺省情况下只替换第一次出现模式,使用g选项替换全局全部出现模式。

    p:缺省sed将全部被替换写入标准输出,加p选项将使-n选项无效;

    n:不打印输出结果;

    w:文件名使用此选项将输出定向到一个文件

    例如:替换night为NIGHT,首先查询night,然后用文本NIGHT替换它

    #sed‘s/night/NIGHT/’ temp.txt

    

6.         find[6]

    

6.1.       命令格式:

    find pathname-options 【-print -exec -ok】

    

6.1.1.       普通参数

    pathname    find命令所查找的目录路径;

    -print          将匹配的文件输出到标准输出;

    -exec          对匹配的文件执行该参数所给的shell命令,命令格式给‘command’ {} \;{}和\;之间有空格;

    -ok和-exec的作用相同,只是以更安全的模式来执行参数,但执行每个命令前都会给用户提示是否执行;

    

6.1.2.       -options 命令参数

    -name    按照文件名查找文件;

    -perm     按照文件权限查找文件;

    -prune    使用该命令使find命令不在当前指定目录中查找,如果同时使用-depth选项,它将被find忽略;

    -user      按照文件属主查找;

    -group    按文件属组查找;

    -mtime -n +n    按照文件的更改时间查找,-n表现文件更改时间距现在n天以内,+n表现文件更改时间距现在n天以前;

    -nogroup 查找无有效所属组的文件,即该文件所属的组不在/etc/group

    -nouser  查找无有效属主的文件,即该文件地点的主不在/etc/passwd;

    -newer file1 !file2  查找更改时间比文件file1新但比文件file2旧的文件;

    -type 查找某一类型的文件

    b  块设备文件

    d  目录

    c 字符设备文件

    p 管道文教案

    l  符号链接文件

    f 普通文件

    -maxdepth[7]|-mindepth[8]     限定find命令查找的目录深度使用-mindepth(最小深度包含边界)-maxdepth(最大深度)

    

6.1.3.       实例

    1)   使用ls -l命令列出所匹配到的文件

    #find filename-type f -exec ls -l {} \;

    2)   删除/logs目录中更改时间在5日以前的文件

    #find logs -typef -mtime +5 -exec rm {} \;

    该命令在执行的时候直接删除匹配的文件,安全性不高;

    #find logs -typef -mtime +5 -exec -ok rm {} \;

    该命令在执行的时候会提示用户是否要删除该文件,按Y删除文件,N不删除该文件。

    3)   使用find命令查找passed文件中是否包含user1用户;

    #find /etc -name“passwd*” -exec grep “user1” {} \;

    4)   查找当前目录中文件属主有读写权限,并且属组和其他用户有读权限;

    #find . -type f-perm 644 -exec ls -l {} \;

    5)   查找系统中全部文件长度为0的不同文件,并列出它的路径;

    每日一道理
如果只看到太阳的黑点,那你的生活将缺少温暖;如果你只看到月亮的阴影,那么你的生命历程将难以找到光明;如果你总是发明朋友的缺点,你么你的人生旅程将难以找到知音;一样,如果你总希望自己完美无缺,假设你的这一愿望真的能如愿以偿,那么你最大的缺点就是没有缺点。

    #find / -type f-size 0 -exec ls -l {} \;

    6)   查找当前文件系统中全部目录并排序;

    # find . -type d|sort

    7)   删除当前目录中访问时间在7天以前的文件,并且含有三个数字后缀的log文件

    #find . -name“admin.log[0-9][0-9][0-9]” -atime -7 -ok rm {} \;

    

6.2.       xargs命令详解

    

6.2.1.       简介

    在使用find的命令时-exec选项处理匹配文件的信息,但是有些系统文件对exec的命令长度有限制,在运行命令几分钟后,可能出现溢出错误信息,通常的错误信息为“参数列太长”或“参数列溢出”,这时候用sargs 就可以解决该问题。

    find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,这样就可以处理最先获取的一部分文件,然后是剩余的并继续下去。

    

6.2.2.       实例

    1)   查找系统中的每个普通文件,然后用xargs命令测试它们分别属于那类文件;

    #find . -type f-print | xargs file

    2)   把内存信息转储问(core dump),然后把结果保存到/tmp/core.log文件中;

    #find / -name“core” -print | xargs echo “” >/tmp/core.log

    3)   查找当前目录下全部用户具有读、写和执行权限的文件,并收回其他用户的写权限;

    #find . -perm -7-print | xargs chmod o-w;

    4)   搜索当前目录下全部普通文件中包含hostname的字符;

    #find . -type f-print | xargs grep “hostname”或

    #find . -name \*-type f -print | xargs grep “hostname”

    5)   查找/apps目录下的文件,但不查找/apps/bin目录下查找;

    #find /apps-path “/apps/bin” -prune -o –print

    

6.3.       一个实际应用[9]

    svn ci 时出现 xx is already under version control,然后无法提交,出现这个问题的原因是你所提交的文件或目录是其他SVN的东西,即上面有.svn的目录,须要先把它们删除才能提交,具体操作如下:

    打开terminal,cd到你新增加的那个目录,然后用上面的命令

    #find .-mindepth 2 -name '.svn' -exec rm -rf '{}' \;

    这个命令会递归的删除目录下全部.svn的文件夹,现在,再提交一次试试?

    

7.         Screen[10]

    Screen被称之为一个全屏窗口管理器,用他可以轻松在一个物理终端上获得多个虚拟终端的效果。

    Screen功能说明:

    简略来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,这意味着你能够使用一个单一的终端窗口运行多终端的应用。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。

    

7.1.       Screen命令语法

    screen [-AmRvx-ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

    Screen命令参数:

    -A -[r|R]      将全部的视窗都调整为目前终端机的大小。

    -c filename   用指定的filename文件替代screen的配置文件’.screenrc’.

    -d [pid.tty.host]      断开screen进程(使用该命令时,screen的状态一定要是Attached,也就是说有用户连在screen里)。一般进程的名字是以pid.tty.host这种形式表现(用screen -list命令可以看出状态)。

    -D[pid.tty.host]      与-d命令实现一样的功能,区别就是如果执行胜利,会踢掉本来在screen里的用户并让他logout。

    -h <行数>              指定视窗的缓冲区行数。

    -ls或–list               显示目前全部的screen作业。

    -m          即使目前已在作业中的screen作业,仍强制建立新的screen作业。

    -p number orname     预先选择一个窗口。

    -r[pid.tty.host]           恢复离线的screen进程,如果有多个断开的进程,须要指定[pid.tty.host]

    -R                    先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。

    -s shell             指定建立新视窗时,所要执行的shell。

    -S <作业名称>    指定screen作业的名称。(用来替代[pid.tty.host]的命名方式,可以简化操作).

    -v                    显示版本信息。

    -wipe               检查目前全部的screen作业,并删除已经无法使用的screen作业。

    -x                    恢复之前离线的screen作业。

    

7.2.       Screen命令的常规用法

    screen -d -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户再连接。

    screen -D -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户并让他logout再连接

    screen -ls或者-list:显示存在的screen进程,经常使用命令

    screen -m:如果在一个Screen进程里,用快捷键crtl+a c或者直接打screen可以创建一个新窗口,screen -m可以新建一个screen进程。

    screen -dm:新建一个screen,并默认是detached模式,也就是建好之后不会连上去。

    screen -p numberor name:预先选择一个窗口。

    

7.3.       Screen实现后台运行程序的简略步骤:

    1> 要进行某项操作时,先使用命令创建一个Screen:

    [linux@user~]$screen -S test1

    2>接着就可以在里头进行操作了,如果你的任务还没完成就要走开的话,使用命令保留Screen:

    [linux@user~]$Ctrl+a+d #按Ctrl+a,然后再按d即可保留Screen

    [detached]        #这时会显示出这个提示,说明已经保留好Screen了

    如果你工作完成的话,就直接输入:

    [linux@user~]$exit     #这样就表现胜利退出了

    [screen isterminating]

    3> 如果你上一次保留了Screen,可以使用命令查看:

    [linux@user~]$screen -ls

    There is ascreen on:

    9649.test1   (Detached)

    恢复Screen,使用命令:

    [linux@user~]$screen -r test1 (or 9649)

    

7.4.       Screen命令中用到的快捷键[11]

    Ctrl+a c :创建窗口

    Ctrl+a w :窗口列表

    Ctrl+a n :下一个窗口

    Ctrl+a p :上一个窗口

    Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换

    Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端主动终止,并且退回到原始shell状态)

    exit :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端主动终止,并且退回到原始shell状态)

    Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态

    

8.         nohup[12]

    

8.1.       nohup命令语法

    nohup Command [Arg…] [&]

    nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略全部挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。这之间的差别是带&的命令行,即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上);nohup就是不挂起的意思( n ohang up)。

    无论是否将nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的全部输出作为标准输出重定向到相同的文件描述符。

    退出状态:该命令返回下列出口值:

    126    可以查找但不能调用Command 参数指定的命令。

    127    nohup 命令发生错误或不能查找由 Command 参数指定的命令。

    否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

    

8.2.       注意事项[13]

    nohup把标准输出(STDOUT)和标准错误(STDERR)结果输出到nohup.txt文件这个看似很方便,但是当输出很大的时候,nohup.txt文件会非常大,或者多个后台命令的时候大家都会输出到nohup.txt文件,不利于查找结果和调试程序。所以能够重定向输出会非常方便。上面要分析标准输出,标准输入和标准错误了。

    其实我们一直都在用,只是没有注意到,

    比如:

    >./command.sh> output

    #这其中的>就是标准输出符号,其实是 1>output 的缩写

    >./command.sh2> output

    #这里的2>就是将标准错误输出到output文件里。

    而0< 则是标准输入了。

    上面步入正题,重定向后台命令

    >nohup./command.sh > output 2>&1 &

    解释:前面的nohup和前面的&我想大家都能明白了把。

    主要是中间的2>&1的意思

    这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里头,所以结果是标准错误和标准输出都导入文件output里头了。至于为什么须要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的.

    这就是为什么有人会写成:

    nohup./command.sh >output 2>output出错的原因了

    最后谈一下/dev/null文件的作用。这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里>./command.sh>/dev/null 2>&1

    

9.         scp[14]

    Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好分析一下,从本地复制到远程、从远程复制到本地是两种使用方式。

    命令基本格式:

    scp [可选参数] file_source file_target

    

9.1.       从本地复制到远程

    * 命令格式:

    scp local_file remote_username@remote_ip:remote_folder

    scp local_file remote_username@remote_ip:remote_file

    scp local_file remote_ip:remote_folder

    scp local_file remote_ip:remote_file

    第1,2个指定了用户名,命令执行后须要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;第3,4个没有指定用户名,命令执行后须要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;

    * 例子:

    scp 1.mp3root@www.cumt.edu.cn:/home /music

    scp 1.mp3root@www.cumt.edu.cn:/home/ music/001.mp3

    scp 1.mp3www.cumt.edu.cn:/home/ music

    scp 1.mp3www.cumt.edu.cn:/home/music/001.mp3

    * 复制目录:

    scp -rlocal_folder remote_username@remote_ip:remote_folder

    scp -rlocal_folder remote_ip:remote_folder

    第1个指定了用户名,命令执行后须要再输入密码;第2个没有指定用户名,命令执行后须要输入用户名和密码;

    * 例子:

    scp -r ./music/root@www.cumt.edu.cn:/home/root/others/

    scp -r ./music/www.cumt.edu.cn:/home/root/others/

    

9.2.       从远程复制到本地

    从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可;

    例如:

    scproot@www.cumt.edu.cn:/home/root/others/music  1.mp3

    scp -rwww.cumt.edu.cn:/home/root/others/ ./music/

    

9.3.       最简略的应用

    scp 本地用户名@IP 地址:文件名1 远程用户名@IP地址:文件名2

    [本地用户名@IP地址:] 可以不输入,可能须要输入远程用户名所对应的密码.

    

9.4.       有用的几个参数

    -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 ,认证 , 或是配置错误 .

    -C 使能压缩选项 .

    -P 选择端口 . 注意 -p 已经被 rcp 使用 .

    -4 强行使用 IPV4 地址 .

    -6 强行使用 IPV6 地址 .

    Linux scp命令的使用方法应该可以满足大家对Linux文件和目录的复制使用了。

    



[1] 参考链接:http://fanqiang.chinaunix.net/system/linux/2007-03-15/5110.shtml

[2] 参考链接:http://blog.chinaunix.net/uid-12216245-id-284927.html

[3] 参考链接:http://blog.csdn.net/ericbaner/article/details/3966741

[4] 参考链接http://blog.csdn.net/hittata/article/details/7494590

[5] 参考链接:http://www.cnblogs.com/6xiaou/archive/2010/10/10/1847359.html

[6] 参考链接:http://www.cnblogs.com/6xiaou/archive/2010/10/10/1847359.html

[7] 参考:http://fanqiang.chinaunix.net/a1/b2/20020312/080200132.html

[8] 参考:http://bbs.linuxtone.org/home.php?mod=space&uid=11360&do=blog&id=59

[9] 参考链接:http://blog.csdn.net/qq280948982/article/details/7016287

[10] 参考链接:http://wangwei007.blog.51cto.com/68019/1036132

[11] 引申链接:http://hi.baidu.com/jiaozhenqing/item/ffb3a650ca6559958c12ed9d

[12] 参考链接:http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051136.html

[13] 参考链接:http://blog.csdn.net/daniellf/article/details/8035741

[14] 参考链接:http://os.51cto.com/art/201003/187301.htm

文章结束给大家分享下程序员的一些笑话语录: 爱情观
  爱情就是死循环,一旦执行就陷进去了。
  爱上一个人,就是内存泄露--你永远释放不了。
  真正爱上一个人的时候,那就是常量限定,永远不会改变。
  女朋友就是私有变量,只有我这个类才能调用。
  情人就是指针用的时候一定要注意,要不然就带来巨大的灾难。

--------------------------------- 原创文章 By
文件和匹配
---------------------------------

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3112817.html