linux常用知识总结

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      删除定位行                                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值