1. wc命令用法
wc -c 统计字节数 -m 统计字符数 -l 统计行数 -w 统计字数/单词数
例1:查询文件中某字符出现的次数:
grep 'abc' request.log | wc -l
cat request.log | grep ‘abc’ | wc -l
例2:查询该文件的行数,单词数,字节数
wc testfile
2 92 598 testfile
例3:查询多个文件的行数,单词数,字节数
wc testfile testfile_1 testfile_2
3 92 598 testfile #第一个文件行数为3、单词数92、字节数598
9 18 78 testfile_1 #第二个文件的行数为9、单词数18、字节数78
3 6 32 testfile_2 #第三个文件的行数为3、单词数6、字节数32
15 116 708 总用量 #三个文件总共的行数为15、单词数116、字节数708
2.linux文档定位
shift+g 快速定位到最后一行 (gg可返回第一行)
1+shift+g 快速定位到第一行
20+shift+g 快速定位到第20行
3.文件上传与下载
如果在终端上设定好上传和下载路径可以使用以下命令进行操作:
sz ./abc 将服务器文件发送(下载)到本地。sz可以加参数,例如:-a 以文本方式传输(ascii),-b 以二进制方式传输(binary)。-e 对控制字符转义(escape),这可以保证文件传输正确。
rz 运行该命令会弹出一个文件选择窗口,从本地选择文件上传至linux服务器
4.linux中如何让进程(或正在运行的程序)到后台运行
我们经常会碰到这样的问题,用ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络等的不稳定导致任务中途失败。
这是由于在用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。
解决办法有两种:让进程忽略HUP信号,或让进程运行在新的会话里从而成为不属于此终端的子进程。
下面是对Linux下运行与控制后台进程的各种方法的介绍:
1) nohup
顾名思义,nohup的用途就是让提交的命令忽略所有的hangup信号。
使用方法:nohup COMMAND [ARG]...
2) setsid
在一个新的会话中运行命令,从而可以避开当前终端发出的HUP信号。
使用方法:setsid COMMAND [ARG]...
3) &
可以结合()产生一个新的子shell并在这个子shell中将任务放置到后台运行,从而不受当前shell终端的HUP信号影响。
使用方法:(COMMAND [ARG]... &)
而我通常的使用方式为:
nohup ./filename.sh > filename.log 2>&1 &
三点理由:
a) nohup保障进程不会被hangup信号异常中断;
b) 将任务放置到后台运行,不占用当前的终端;
c) 将错误输出也打印到log中,默认>只有标准输出,错误输出没有。
4) 控制进程
通过以下命令,我们可以对放入到后台的命令进行控制
查看当前终端下的后台进程:直接执行:jobs
将查看到的某个后台进程放回到前台:直接输入:fg %{jobid} //这里的{jobid}是通过jobs命令中看到的进程前[]中的数字。
将当前正在前台运行的进程放到后台运行:先敲下快捷键:ctrl +z //暂停当前正在运行的进程,再执行:bg %{jobid}
终止当前正在前台运行的进程:直接敲下快捷键:ctrl +c
5) disown
亡羊补牢,为没有使用nohup与setsid的进程加上忽略HUP信号的功能。
使用方法:
将当前正在前台运行的进程放到后台运行(ctrl+z和bg);
然后执行disown -h %{jobid} //这里的{jobid}是通过jobs命令中看到的进程前[]中的数字。
用disown -h jobspec 来使某个作业忽略HUP信号。
用disown -ah 来使所有的作业都忽略HUP信号。
用disown -rh 来使正在运行的作业忽略HUP信号。
6) 通过screen来实现稳定的后台运行
screen是建立一个新的全屏虚拟会话终端,这个会话只有在手动输入exit的时候才会退出,在这个会话里执行的命令不用担心HUP信号会对我们的进程造成影响,因此也不用给每个命令前都加上“nohup”或“setsid”了,非常适合我们有规划的执行大量的后台任务,可以非常方便的让我们对这些后台任务进行管理。
使用方法:
screen //立即创建并进入一个会话。
screen -dmS {name} //建立一个处于断开模式下的会话,并根据我们的需要指定其会话名称。
screen -list //列出所有会话。
screen -r {name} //进入指定会话。
ctrl +ad //输入快捷键ctrl +a和d,可暂时退出当前会话。
exit //进入指定会话后执行exit即可关闭该会话。
5.PS命令
ps -ef 查看正在活动的进程
ps -ef | grep abc 查看含有“abc“的活动进程
ps -ef | grep -v abc 查看不含有“abc“的活动进程
ps -ef | grep -E 'fact_2|20161212' 查看含有fact_2或20161212的进程
ps -ef | grep -E 'py.*20161212' 查看既含有py又含有20161212的进程
6.查看内存,CPU,磁盘使用情况
查看内存使用情况:free [-m/-g]
查看CPU使用情况:top
查看磁盘使用情况:df [-m/-h]
7.kill命令和ctrl+c,ctrl+z的区别
kill -l 这个命令可以看到所有信号的列表
kill sigterm pid 此信号情有一个进程停止运行。此信号是可以被忽略的,进程可以用一段时间来正常关闭,不是强制停止。等价于kill -15 pid
kill sigkill pid 因为kill的默认信号是sigterm,当它不起作用时,可以用它来强制kill掉一个进程,而不计后果。等价于kill -9 pid
ctrl+c 是终止当前在终端窗口中运行的命令或脚本
ctrl+z 是把终端运行的进程挂起到后台
8.linux 使用grep 匹配多个条件的问题
(1)与条件
例:匹配000000_0文件中所有既包含"北京"又包含"SM-A9000"的行
grep -E "北京.*SM-A9000" 000000_0
(2)或条件
例:匹配000000_0文件中所有包含"北京"或包含"枣庄"的行
grep -E "北京|枣庄" 000000_0
(3)组合条件
例:匹配000000_0文件中所有既包含"北京"又包含"X9007"的行或 既包含"青岛"又包含"X9007"的行
grep -E "北京.*X9007|青岛.*X9007" 000000_0
grep -E "abc.*def|xyz" test.txt
9.关于重定向
输入输出可以重定向,所谓重定向输入就是在命令中指定具体的输入来源。
譬如 cat < test.c 将test.c重定向为cat命令的输入源。输出重定向是指定具体的输出目标以替换默认的标准输出,
譬如 ls > 1.txt将ls的结果从标准输出重定向为1.txt文本。有时候会看到如 ls >> 1.txt这类的写法,> 和 >> 的区别在于:> 用于新建而>>用于追加。
bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。
1> 指标准信息输出路径(也就是默认的输出方式)
2> 指错误信息输出路径
2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)
10. Linux——Crontab使用详解(详见百度百科介绍)
使用方式 :
crontab文件的格式:M H D m d cmd.
基本格式 :
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-r[-u user]-删除用户目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。
* * * * * command
分 时 日 月 周 命令
M: 分钟(0-59)。每分钟用*或者 */1表示
H:小时(0-23)。(0表示0点)
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)
例子 :
#每天早上7点执行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 alex@domain.name :
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
注意 : 当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可
11. Linux下环境变量和JDK的配置
windows:
set java_home:查看JDK安装路径
">version:查看JDK版本
linux:
whereis java
which java (java执行路径)
echo $JAVA_HOME
echo $PATH
ps aux|awk '$2 == 2213 {print $11}' 根据进程号查看java目录
12.Linux关机命令
sync 将数据由内存同步到硬盘中
shutdown 关机指令:
shutdown -h [+]10 10分钟后关机
shutdown -h now 立马关机
shutdown -h 20:25 20:25关机
shutdown -r now 立马重启 <===> reboot
shutdown -r [+]10 10分钟后重启
reboot 立马重启
halt 关机后主板断电 <===>shutdown -h now 和 poweroff
13. cpm -c 文件1 文件2
这比较文件1和 文件2,如果文件相同,则不显示消息。如果文件不同,则显示第一个不同的位置;
14. diff-c 文件1 文件2
diff以逐行的方式,比较文本文件的异同处。显示所有文件并标记不同
15. find .
-name "*.sh" :在当前目录下查找所有的.sh文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去 n 天过读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去 n 天过修改过的文件
-empty:查找当前目录下的空文件
16.cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
cut是一个选取命令,以行为单位,用指定分隔符将行切分为若干字段,选取所需要的字段。
-d:用来定义分隔符,默认为tab键,一般与-f配合使用(如果分隔符是空格,必须是两个单引号之间确实有一个空格,是一个哦,不是支持多个)
-f:需要选取的字段,根据-d切分的字段集选取,下标从1开始
-s:表示不包括那些不含分隔符的行,用于去掉注释或者标题一类的信息
-c:以字符为单位进行分割,可以选取指定字符
-b:以字节为单位进行分割,可以选取指定字节,这些字节位置将忽略多字节字符边界(比如:汉字),除非同时指定了-n参数
-n:取消分割多字节字符,只能和-b参数配合使用,即如果字符的最后一个字节落在由-b参数列表指定的范围之内,则该字符将被选出,否则,该字符将被排除。
不难看出上面参数中,-f、-c、-b都是用来表示提取指定范围数据的,这个范围的表示方法如下:
N:只取第N项
N-:从第N项一直到行尾
N-M:从第N项到第M项(包括M项)
-M:从第一项到第M项(包括M项)
-:从第一项开始到结束的所有项
详细说明及实例见:http://www.cnblogs.com/Hobbies/articles/4527447.html
17.paste命令用于合并文件的列
paste file1 file2 合并文件1和文件2
paste file1 file2 > file 合并文件1和文件2到file中
paste -s file1 file2 > file 合并文件1和文件2到file中串列进行而非平行处理
18.split命令用于将一个文件分割成数个。
split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件
模式一:指定分割后文件行数
对于txt文本文件,可以通过指定分割后文件的行数来进行文件分割。
例1:split -6 README #将README文件每六行分割成一个文件
例2:split -l 300 large_file.txt new_file_prefix
模式二:指定分割后文件大小
split -b 10m server.log waynelog
19. rcp命令,使用rcp指令复制远程文件到本地进行保存
rcp root@218.6.132.5:./testfile testfile #复制远程文件到本地
rcp root@218.6.132.5:home/rootlocal/testfile testfile #要求当前登录账户cmd 登录到远程主机
rcp 218.6.132.5:./testfile testfile
20. scp命令
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
2)从远程复制到本地
scp root@www.w3cschool.cc:/home/root/others/music /home/space/music/1.mp3
scp -r www.w3cschool.cc:/home/root/others/ /home/space/music/
21.Linux三剑客
grep 更适合单纯的查找活匹配文本
awk 更适合格式化文本,对文本进行较复杂格式处理(http://www.cnblogs.com/xudong-bupt/p/3721210.html)
sed 更适合编辑匹配到的文本(http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html)
shell 入门学习网址:http://c.biancheng.net/cpp/view/6994.html
22. awk命令详解(http://www.cnblogs.com/xudong-bupt/p/3721210.html)
1)awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
2)awk处理过程: 依次对每一行进行处理,然后输出
3)awk命令形式: awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
[-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
' ' 引用代码块
BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
// 匹配代码块,可以是字符串或正则表达式
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
4)system函数可以在awk中执行linux的命令。如:$ awk 'BEGIN{system("clear")'。
5)输出重定向需用到getline函数。
getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。如:
$ awk 'BEGIN{ "date" | getline d; print d}' test。执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量d,并打印它。
$ awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}' test。执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给d,split函数把变量d转化成数组mon,然后打印数组mon的第二个元素。
$ awk 'BEGIN{while( "ls" | getline) print}',命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。
6) 替换
sub函数匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的时候。
awk '{ sub(/test/, "mytest"); print }' testfile
awk '{ sub(/test/, "mytest"); $1}; print }' testfile
gsub函数作用如sub,但它在整个文档中进行匹配。格式如下:
awk '{ gsub(/test/, "mytest"); print }' testfile
awk '{ gsub(/test/, "mytest" , $1) }; print }' testfile
7)取子串 substr
awk '{ print substr( "hello world", 7,11 ) }'
8 )
match函数返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量RSTART为字符串中子字符串的开始位置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串。函数格式如下:
awk '{start=match("this is a test",/[a-z]+$/); print start}'
awk '{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'
9) split 切割
split 函数可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割。格式如下:
split( string, array, field separator )
split( string, array )
实例:awk '{ split( "20:18:00", time, ":" ); print time[2] }'
10)systime 日期函数
systime函数返回从1970年1月1日开始到当前时间(不计闰年)的整秒数。格式如下:systime()
实例:
awk '{ now=strftime( "%D", systime() ); print now }'
awk '{ now=strftime("%m/%d/%y"); print now }'
11)
如何把一行竖排的数据转换成横排?
awk '{printf("%s,",$1)}' filename
23.Linux join命令用于将两个文件中,指定栏位内容相同的行连接起来。
例:
test_file1:(#例如,本例中第一列为姓名,第二列为数额)
Hello 95
Linux 85
test 30
test_file2:(#例如,本例中第一列为姓名,第二列为年份)
Hello 2005
Linux 2009
test 2006
join testfile_1 testfile_2 (#连接后显示的内容如下)
Hello 95 2005
Linux 85 2009
test 30 2006
23. sed命令详解(http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html)
sed命令行格式为:
sed [-nefri] ‘command’ 输入文本/文件
常用选项:
-n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
-e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑
-f∶指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作
-r∶sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
-i∶直接修改读取的文件内容,而不是由屏幕输出
常用命令:
a ∶ 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c ∶ 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d ∶ 删除,因为是删除,所以 d 后面通常不接任何内容
i ∶ 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p∶ 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起用
s∶ 取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g
基本sed编辑命令:
p 打印匹配行 c/ 用新文本替换定位文本
= 显示文件行号 s 使用替换模式替换相应模式
a/ 在定位行号后附加新文本信息 r 从另一个文本中读文本
i/ 在定位行号后插入新文本信息 w 写文本到一个文件
d 删除定位行