Linux操作手册

43. su命令
格式:su 「Options」「User」 -c「Cmds」

功能:使用指定的用户和组ID运行命令

示例:




42. screen命令


42.1 背景

关闭窗口/断开ssh连接时,系统会向会话首进程发送「SIGHUP」信号(默认终止进程);会话首进程终止时,会向前台进程组中的所有进程发送「SIGHUP」信号。所以关闭窗口/断开ssh连接时,会导致当前窗口或连接中正在运行的前台进程终止


42.2 描述

screen为终端窗口管理器,可以使得进程脱离当前窗口和当前连接,独立运行

格式:screen 「-options」 「cmd args」

限制:选项「-options」必须放在命令「cmd args」之前,否则无效


42. 3 命令行

☆ 运行进程

①screen -d -m 「cmd」

②screen -dmS 「SessionName」 「cmd」

说明:

选项「-d -m」,创建一个新会话以运行「cmd」,但不进行关联,即以分离模式运行screen;选项「-S」指定新会话名称;

命令「cmd」执行完,自动关闭会话


☆ 查看会话

screen -ls


☆ 恢复会话

①screen -r 「SessionName」

②screen -r 「pid」


☆ 终止会话

关闭特定会话

①screen -S 「SessionName」 -X quit

②screen -S 「pid」 -X quit

③killall 「exe」

说明:选项「-X」向运行中的会话发送命令;选项「-S」指定会话


关闭全部会话

killall screen


42.4 控制终端

从当前会话分离:「Ctrl」+「a」,「d」

 


42.5 说明

nohup命令能够使得进程忽略「SIGHUP」信号,所以可以达到相同的效果,但还需要使用标记&把进程放在后台运行

nohup 「cmd」 &>/dev/null &

但是,nohup虽然很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。



41. /etc/security/limits.conf

功能:进程的资源限制

设置:<domain> <type> <item> <value>

生效:su - user -c /path/exe

说明:通常情况下,进程的资源限制从父进程继承而来。但存在两个例外:

su 「Options」「User」 -c「Cmds」                             ②crond

以上述两种方式,启动的进程的资源限制,直接读自/etc/security/limits.conf。


示例:

* soft core unlimited
* hard core unlimited
* soft nofile 644000
* hard nofile 644000



40. top命令

按「1」显示CPU详细信息

按「shift+p」以CPU排序

「shift+m」以内存排序

「d」修改轮询间隔,默认3.0s

「f」选择排序字段,「s选中,「Esc」退出


CPU详细信息


可以看到CPU主要消耗在内核态「sy」,还是用户态「us


39. strace

功能:跟踪系统调用

使用:strace -p pid

示例:




38. lsof

列出打开的文件



37. 32/64


在64位系统上,可以执行64位和32位应用程序。在32位系统上,只能执行32位应用程序,不能执行64位应用程序。


问题: 32/64位应用程序是否可以调用64/32位共享库?

回答: 64位应用程序只能调用64位共享库,32位应用程序只能调用32位共享库。



36. 动态库

36.1 编译时指定动态库路径:

gcc -L/path -lname

例如

gcc -L./lib -levent


36.2 运行时搜索顺序:

①编译目标代码时指定的搜索路径

②LD_LIBRARY_PATH

③/etc/ld.so.cache

④默认路径/lib和/usr/lib


编译时指定运行期动态库搜索路径的方法:gcc -Wl,-rpath=.:..:lib,路径之间以":"分隔


/etc/ld.so.cache修改缓存的路径的方法:

直接写入/etc/ld.so.conf

在/etc/ld.so.conf.d目录添加.conf配置文件,文件内容为新路径 (标准方法)

例如:创建配置文件:fetion.conf,内容:/usr/local/src/fetion/lib

无论哪种方法,修改完成后,需执行命令ldconfig,从而使得新路径写入cache


36.3 排错步骤:运行时加载动态库失败

①库文件是否存在

②若存在,目录是否被包含于搜索路径

③若是,应用程序和库文件是否匹配,同为32位或同为64位

①find / -name libxxx.so.2

②目录是否被包含

③file obj;  file libxxx.so.2


36.4 查看

查看依赖:查看应用程序的动态库依赖

ldd obj


查看文件属性

file name

ELF 32-bit,为32位;ELF 64-bit,为64位;version 1,主版本号为1



35. 命令

35.1 查找顺序

alias——hash——PATH


别名

查看:alias -p

添加:alias curl='/usr/bin/curl'

删除:unalias curl


hash

查看:hash

添加:hash -p /usr/bin/curl curl

删除:hash -d curl   //删除一条          hash -r    //全部清空


35.2 定位

命令:whereis exe

功能:所有版本的路径


命令:which exe

功能:当前使用版本的路径


示例



35.3 查看版本

rpm -qf /path/exe

示例




34. 用户管理

添加用户:useradd name

删除用户:userdel name

修改密码:passwd name



33. ssh/scp免验证

[user@DQ5420-763 path] ssh peer@host -p port

授权本地用户user,以用户peer身份远程登录host主机时,免密码验证

方法:将user的公钥,添加到远程主机peer的~/.ssh/authorized_keys,最后chmod 600 authorized_keys即可

步骤:

a. 为user生成密钥对:user运行ssh-keygen -t rsa

b. 获取公钥:cat ~/.ssh/id_rsa.pub

c. 将user公钥添加到peer:peer运行vim  ~/.ssh/authorized_keys,写入公钥

    若~/.ssh目录不存在,执行ssh-keygen -t rsa -C "youremail@example.com"

d. 修改authorized_keys权限:chmod 600 ~/.ssh/authorized_keys



34. scp文件传输

命令:scp -P port [-r] src dst

选项:

-P port 指定ssh端口

-r 目录传输

src 源文件

dst 目的地,若为/path/,以原文件名传到/path/目录下;若为/path/file,则重命名为file

说明:src/dst远程格式user@host:/path/file



33. ssh远程命令

命令:ssh user@host -p port "cmd"

参数:

user 以用户user身份登录远程主机

host 远程主机ip

port ssh端口

cmd 命令序列,命令之间以分号;分隔



32. ENOMEM错误

错误类型:errno = 12,有说swap不够用的

修改配置:echo "1000000" > /proc/sys/vm/max_map_count

说明:一经修改,所有已打开的会话和后续新打开的会话均有效。系统重启后失效,需重新配置



31. Linux端口限制

配置文件:/proc/sys/net/ipv4/ip_local_port_range

查看:cat /proc/sys/net/ipv4/ip_local_port_range


保留端口为[0, 32768],实际可使用端口为[32768, 61000]

设置:echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range

端口最大值65535,超过此值,设置将会失败

说明:系统重启后仍有效,不必重配



30. 查看系统启动时间

last reboot


最近重启时间:3月19;再上次重启时间:3月17;首次重启时间:1月26


who -b




29. 进程控制

将几个进程放到一个进程组:processA>/dev/null 2>&1 | processB>/dev/null 2>&1 | processC >/dev/null 2>&1 &


参数说明:

/dev/null 代表空设备文件 
> 代表重定向到哪里,例如:echo "123" > /home/123.txt 
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null" 
2 表示stderr标准错误 
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1 

故参数涵义为: 
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息 
2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件



28. 文件差异

比较文件

diff f1 f2


<表示左侧文件,>表示右侧文件


比较目录

diff -rqN d1 d2

参数讲解:r递归比较目录下全部文件;q只显示有差异的文件名,不显示差异内容;N当一个文件在一个目录下有,一个目录下没有,按差异文件显示



27. 信号


27.1 向进程发送信号

格式:kill -s SIG pid

sig可通过man手册查询,man 7 signal

例如,向13914进程发送SIGUSR1信号:kill -s SIGUSR1 13914


27.2 向进程组发送信号

格式:kill -s SIG -- -pgid

例如,向进程组24990发送SIGUSR1信号:kill -USR1 -- -24990


27.3 向一组进程发送信号

格式:kill -s SIG $(ps -ef | grep pattern | grep -v grep | awk '{printf "%s ", $2}')

例如,向所有PnsAndroid发送SIGUSR1信号:kill -USR1 $(ps -ef | grep PnsAndroid | grep -v grep | awk '{printf "%s ", $2}' )



26. 更新系统时间

ntpdate asia.pool.ntp.org



25. sort

格式:sort [-n] [-r] [-k num] [-t "c"] file1 file2...

功能:以行为单位,对文件排序

参数:

-n表示按数值排序,否则默认按字符排序,字符排序中"10"排在"9"之前,因第一个字符"1"小于字符"9"

-r表示反向排列

-k表示按第num个域排列,默认按第一域进行排序

-t表示域分隔符为"c"


示例



说明:

参数-(减号)表示从标准输入读取内容,例如

grep "pattern" txt2 | sort txt1 -

将命令grep的结果与文件txt1的内容合并排序。

若无结尾处-,则sort忽略标准输入仅对文件txt1内容排序。



24. 输出重定向

>和>>均为输出重定向,将结果输出到文件

区别:>先清空原有内容,再写入;>>以追加方式添加到文件末尾,原有内容不变。



23. core文件


23.3 路径

命令:ll /proc/pid/cwd

说明:默认路径为进程的启动路径,即进程的工作目录


23.2 设置格式和路径

 

/proc/sys/kernel/core_pattern

作用:所有进程core文件格式和路径

生效:立即生效,无需任何操作

重启:系统重启后失效

设置:echo "/path/core.%e.%p" > /proc/sys/kernel/core_pattern

参数:%e表示生成core的可执行文件名;%p表示生成core的进程id


23.1 打开

/etc/security/limits.conf

设置:

* soft core unlimited

* hard core unlimited

生效:①su 「Options」「User」 -c「Cmds」    ②重启会话

重启:系统重启后仍旧有效



21. awk


普通模式

格式:awk '/pattern/{action}' files

参数:

pattern是一个正则表达式,如不指定pattern,则对所有文件的每一行,都执行action

action是一系列命令,由分号;隔开,对满足匹配的文本执行一些动作

files表示待操作文件,如不指定,则读标准输入

示例:


输出所有1打头的IP,并在后面注释"TakeCare"



表达式模式

格式:awk '(expression){action}' files

参数:expression可以是一个比较表达式

示例:


输出价格大于1的水果



分割符

awk的-F参数可以指定分隔符,比如下面的代码将打印D


awk自动将读入的行分割成域(field)。域是由分隔符分割开的字符集,缺省的分隔符是tab和空格,访问域可以用$1,$2, ... $n的形式,域都是从1开始的,而$0表示整个行。

NF为当前行中字段的个数;$NF为当前行中的最后一个字段。


比较操作

awk中可以执行的比较操作有:>    <    ==    !=    ~    !~ 

波浪号~使用方式为value ~ /pattern/,表匹配正则表达式pattern;反之!~表不匹配


找出所有价格在0.7-0.8左右的水果,并附加Affordable信息



格式化输出

输出整数:awk '{print int(expr)}'

功能:将expr的计算结果取整输出


限制行数

格式:awk '(NR<=2){print $0}'

功能:输出前两行

说明:NR表示行号,从1开始;$0表示整行



20. 命令替换

格式:cmd1 $(cmd2)

功能:用$()括起来的命令cmd2先执行,然后结果作为命令cmd1对应位置的文本


显示PnsAndroid进程信息

top $(ps -ef | grep PnsAndroid | awk '{printf("-p %s ", $2);}') -d 1



删除指定文件

rm -rf $(find ./ -name "file*")



与管道的区别:

管道操作符为|,功能是将左侧命令的输出作为右侧命令的标准输入,而不能用作后一个命令的参数。

所以要求右侧命令能够接受标准输入,而top和rm等很多命令并不使用标准输入,故对其只能使用命令替换。



19. 防火墙

CentOS 6

查看:service iptables status

停止:service iptables stop


CentOS 7

查看:service firewalld status

停止:service firewalld stop

禁用:systemctl disable firewalld



18. 查看CPU核数

查看物理CPU个数:cat /proc/cpuinfo| grep "physical id" | uniq | wc -l

查看逻辑CPU个数:cat /proc/cpuinfo |grep "processor"|sort -u|wc -l

查看每个物理CPU中的内核core个数:cat /proc/cpuinfo| grep "cpu cores" | uniq



17. 定时脚本

Linux中,周期执行的任务一般由cron这个守护进程来处理。cron读取一个或多个配置文件,这些配置文件中包含了要执行的命令和调用时间。


查看

所有用户的定时任务配置文件,位于/var/spool/cron目录下,以各自的用户名命名


直接查看用户配置文件,即可查看定时任务


或者直接输入crontab -l命令,即可查看当前用户的定时任务



设置

直接编辑/var/spool/cron目录下的配置文件,即可添加定时任务

或者直接输入crontab -e命令,即可编辑当前用户的定时任务


格式



特殊符号

星号*:全部值

除号/:每

减号-:从某个值到某个值,区间内所有值

逗号,:离散值


示例

0 0 */2 * *:每两天执行一次,且于当天0时0分开始执行,即每48小时执行一次

* * * 12 *:12月份每天每小时每分钟都执行

*/20 * * * *:每隔20分钟执行一次

19 17-22/2 * * *:每天17-22时,每隔2小时执行一次,且于第19分开始执行。即每天17:19分开始,每两小时执行一次,直到21:19分

* 10,12 * * *:每天10点和12点,每分钟执行一次


命令序列

可以同时执行多条命令,命令之间以分号;隔开

典型示例:

* * * * * cd dir;sh name.sh;

进入dir目录,然后以此目录为工作目录执行name.sh


命令不能位于/sbin/目录

例如

*/30 * * * * service jas-devol restart

/var/spool/mail/root显示错误:/bin/sh: service: command not found

需要使用命令全路径:/sbin/service


说明

除非在命令序列中更改了目录,否则定时任务的工作目录是账号的起始目录


/var/spool/cron/root中定义的定时任务,以/root目录为进程的工作目录;var/spool/cron/deviceSys中的定时任务,其工作目录为/home/deviceSys

例如,/var/spool/root中定义有

*/3 * * * * ./main

则每隔3分钟,自动运行/root/main


日志

定时任务日志文件:/var/log/cron

查看:tail -f /var/log/cron


应用实例


每分钟,执行一次/home/alarmSys/sh/process_monitor.sh脚本;每小时的第10分钟,执行一次/home/alarmSys/sh/delouttime_file.sh脚本



16. ssh连接

命令:ssh username@ip

应用场景:转连接

详述:host1和host2在同一内网,host在外网。某时刻host2外网流量巨大,网络繁忙,host连不上或很卡。此时host可以先连host1,然后ssh到host2。host1和host2处于同一局域网,故速度很快。



15. 递归删除

递归删除目录下特定文件

find dir -name "pattern" | xargs rm -f


例如,删除本目录下所有.log日志

find ./ -name "*.log" | xargs rm -f



14. find命令


14.4 文件类型

格式:find -type c

功能:查找指定类型的文件

参数:c的可能取值为

f   普通文件

d  目录

l  符号链接

说明:为去除目录对结果的干扰,-perm通常结合-type选项对结果进行筛选,例如

find ./ -perm /111 -type f

查找具有具有可执行权限的普通文件


14.3 权限

文件权限值:读4,写2,执行1

例如,764即文件所有者可读写执行,组所有者可读写,其它人可读


14.3.1 

find -perm nnn

功能:查找文件权限恰好等于nnn的文件

示例:查找如下文件,文件所有者权限为读写执行、组所有者为读写、其它人只读

find -perm 764  或者  find -perm u=rwx,g=rw,o=r


14.3.2 

find -perm -abc

功能:查找如下文件,文件所有者权限满足a,且组所有者权限满足b,且其它人权限满足c

示例:查找如下文件,文件所有者和组所有者可读写,其它人可读

find -perm -664  或者  find -perm -u=rw,g=rw,o=r

对于文件的可执行权限不作任何要求


14.3.3

find -perm /abc

功能:查找如下文件,或者文件所有者权限满足a,或者组所有者权限满足b,或者其它人权限满足c

示例:查找如下文件,文件所有者、组所有者、其它人,三者任何一个有执行权限

find -perm /111  或者  find -perm /u=x,g=x,o=x


说明:

- 和 / 的区别

- 对文件所有者/组所有者/其它人,三者权限均满足对自身的权限要求,才可采纳

/ 对文件所有者/组所有者/其它人,只要有一个满足对应的权限要求,即可采纳


14.2 时间

格式:find dir -[a|m|c]time [+-]n

说明:根据文件的访问时间、内容修改时间、状态修改时间,查找文件,每24小时为一个单位

参数:

-atime, -mtime, -ctime分别表示访问时间、内容修改时间、状态修改时间

n为逝去的天数,一天即一个24小时,从当前时间点算起


详述:

根据文件时间计算天数,向下取整。即不足24小时部分,自动忽略

天数计算公式:天数 = (当前时间 - 文件时间)/ 24小时

例如:

当前时间为2015-10-14 11:21:22,文件txt时间


则txt对应天数n等于 

访问时间 n = 1;内容修改时间 n = 2;状态修改时间 n = 0


格式:find dir -[a|m|c]min [+-]n

说明:根据文件的访问时间、内容修改时间、状态修改时间,查找文件,每分钟为一个单位

示例:find ./ -cmin +15  在当前文件夹下查找15分钟之前改变过状态的所有文件


14.1 文件名

格式:find dir -name "fname"

说明:根据文件名查找文件

匹配模式:

星号*匹配任意字符

find ./ -name "*.log"


方括号[]匹配其中的字符


注意:文件名必须用双引号引起来



13. 查看系统流量

iptraf -g


本地回环测试流量:17M;内网流量:1M;外网流量:5M

内网流量,即局域网内主机通信流量,例如同一公司内两台主机通信流量。

ifconfig






12. tail命令

tail多个文件


tail不会自动递归查找目录,所以必须可以使用文件名的正则匹配,同时指定多个文件。


11. 显示目录信息

ls -ld dir



10. grep命令


10.6 行数

格式:grep -c

功能:输出匹配的总行数

示例:


10.5 反选

格式:grep -v "pattern"

功能:选取所有不满足匹配模式的行

示例:


选取所有不是以S打头的行、去除所有S打头的行



10.4 目标字串

被搜索的字符串必须使用双引号引起来


10.3 高亮

grep --color=auto



grep | less 高亮

grep --color=always | less -R


10.2 上下文

显示下num行:     grep -A num

显示上num行:     grep -B num

显示上下num行:  grep -C num


10.1 字符

△ 特殊字符

特殊字符 转 文本字符:加反斜线「\」

以下字符在grep中作为特殊字符:

 

方括号          []

双引号          ""

点号              .

感叹号          「!


△ 文本字符

文本字符 转 特殊字符:加选项「-E

以下字符在grep中为普通文本字符

管道符号      |

小括号          ()

大括号          {}


示例:

欲匹配IP以17.188开始,端口为443的地址,标准格式为




8. PATH 环境变量

查看:echo $PATH

作用:决定了系统将到哪些目录寻找可执行程序

示例:将自己编译生成的,输出“hello world”的可执行程序main,放到/usr/local/bin目录下。则在任何目录下执行"main"命令,即可得到"hello world"。


7. 更改文件所有权

chown uid:gid file


6. 查看符号链接的指向

readlink -f name



5. 查看文件夹大小

du -sh name

例如,查看当前目录大小


查看当前目录各文件大小



4. 查看软件版本

rpm -qf /path/name

示例



rpm -aq | grep name

示例




3. 正则表达式

.

用来匹配除换行符之外的任意单个字符,不能没有

例如:l.h,要求l和h之间至少存在一个字符,且不能为换行符


*

修饰前导字符,表明前导字符可以出现0次或任意多次

例如:a*,匹配0个或多个字符a,即从空字符到aaa....


.*

匹配任意字符


+

修饰前导字符,表示前导字符出现0次或任意多次

例如:a+,匹配1个或多个字符a,即从a到aaa....


^

代表行首

例如:^love,匹配以love开头的行


$

代表行尾

例如:love$,匹配以love结尾的行


{}

修饰前导字符,表示前导字符出现指定次数

例如:

a{3},匹配三个a,即aaa

a{2,},匹配至少两个a,即从aa到aaa....

a{4, 6},匹配四到六个a,即从aaaa到aaaaaa

高级

[0-9]{4},匹配任意四个数字

[a-z]{2, 3},匹配2到3个小写字母


[]

匹配方括号中的字符的任意一个

例如:

[st],匹配s或t

[13],匹配1或3

[0-9a-zA-z],匹配任意数字或字母,无论大小写


()

将部分内容组成一个单位

例如:f(oo | ee | rien)d,匹配或food或feed或friend


可以使用grep命令验证正则表达式,例如

cat txt | grep -E “a{2, 3}”

cat txt | grep -E “f(oo|ee|rien)d”

参数-E表示使用扩展正则表达式,否则{}()|在grep中均为普通合法字符,不会作为正则匹配的功能性字符进行区别对待



2. 查看文件修改时间

stat filename



1. 进程


1.11 终端

查看进程所属终端

ps -o tty -p 「Pid」

示例:



说明:

终端「pts/N」对应的设备文件为「/dev/pts/N」

②特定终端下的进程,标准输入读自终端设备文件,标准输出和标准错误写出至终端设备文件,即


进程「server」从文件描述符「0」(即STDIN_FILENO)读,即从文件「/dev/pts/2」读

进程「server」写到文件描述符「1」(即STDOUT_FILENO)和文件描述符「2」(即STDERR_FILENO),即写到文件「/dev/pts/2」


1.10 查看线程数

命令:ll /proc/pid/task | wc -l

说明:进程信息存放在/proc/pid,pid即为进程号;task目录存放所有线程,目录中的每一个文件对应一个线程

示例:



1.9 查看打开句柄数

命令:ll /proc/pid/fd | wc -l

说明:进程信息存放在/proc/pid,pid即为进程号;fd目录存放已打开的所有文件句柄,目录中的每一个文件对应一个句柄

示例:



1.8 当前工作目录

进程的启动目录即进程的当前工作目录,与程序文件所在目录无关。

即在哪个目录下运行的程序,进程的当前工作目录就是哪个目录。


查看进程的当前工作目录

ll /proc/pid/cwd



示例:

sh脚本内容是,打印当前目录信息


在/home/rongxj目录下执行sh,结果为


进到/home/rongxj/shell目录下执行sh,结果为



1.7 查看进程内存

ps -e -o pid,cmd,sz,rsz,vsz


sz, rsz, vsz单位为KB。awk中除以1024,转化为M。

rsz为实际内存大小,反映进程实际内存使用量,参考价值较高


1.6 查看进程组ID

标准格式:ps -e -o pid,ppid,pgid,cmd | grep pattern


ps -efj


ps -e -o pgid,cmd



查看main1 main2 main3的进程组ID:ps -efj | grep main*  或者  ps -e -o pgid,cmd | grep main*


1.5 查看进程使用的动态链接库

ldd 可执行文件名



1.4 查看进程启动时间

pgrep xxx | xargs ps -o lstart,cmd -p



ps -p PID -o lstart


1.3 查看进程的启动路径

命令:ll /proc/pid/cwd

示例:



 

1.2 查看进程的文件路径

命令:ll /proc/pid/exe

示例:


1.1 查看进程CPU、内存

top -p 进程号 -d n

-p:只显示指定进程的信息

-d:每n秒刷新一次

例如:

执行top -p 5287 -d 1,结果如下




设置core文件的名称:

echo "core.%e.%p" > /proc/sys/kernel/core_pattern

即时生效,直至下次系统重启失效

%e:生成core的可执行文件名;%p:生成core的进程id

 

posted on 2015-07-08 13:38  柴科夫斯不是基  阅读(307)  评论(0编辑  收藏  举报

导航