常用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文件和目录的复制使用了。