Linux操作手册
2015-07-08 13:38
513 查看
57. mail
格式:mail -s「title」「receiver@mail.com」
示例:
56. date
格式:date +%s
功能:打印Unix时间戳
示例:
格式:date +%Y-%m-%d date +%Y%m%d date +%y%m%d
功能:打印当前日期
示例:
55. gcc44/g++44
若CentOS系统版本过低(如CentOS 5.4),则可能不支持「-std=c++0x」选项。解决办法是安装gcc44/g++44
① 安装:
yum install gcc44
yum install gcc44-c++
② 设置
export CXX=g++44
说明:对于C++项目,cmake使用的编辑器由环境变量「CXX」指定,默认为「/usr/bin/c++」;对于C项目,cmake使用的编辑器由环境变量「CC」指定,默认为「/usr/bin/gcc」
③ 编译
cmake ../project_dir && make
说明:运行cmake之前,需要先删除build目录当前所有文件
54. bash_history
文件:~/.bash_history
名称:历史命令记录文件
功能:记录特定用户在命令行上执行过的命令
说明:
① bash_history跨会话和连接共享,即用户A以「some_user」账号登录到系统,用户B同样以「some_user」账号登录到系统,则A和B执行过的命令都将记录到同一个bash_history文件,即/home/some_user/.bash_history;
② 历史命令写入bash_history文件的时机是,当前会话关闭时;
③ 此文件的访问权限为600;
安全问题:
bash_history文件可能造成密码泄露,请妥善处理
53. strings命令
语法:strings「options」file...
功能:打印文件中的可打印字符串。对于给定的每个文件,GNU strings会打印至少4个(或选项中指定的个数)字符长的可打印字符序列,后跟一个不可打印字符。strings主要用于确定非文本文件的内容
选项及参数:
-n min-len:打印长度至少为「min-len」个字符的字符序列,而不是默认值4
52. DNS
修改
vim /etc/resolv.conf
立即生效
51. 主机名
查看
hostname
echo $HOSTNAME
设置
◇ 临时设置
hostname 「name」
立即生效,系统重启后失效
◇ 永久设置
分别设置「/etc/hostname」「/etc/sysconfig/network」「/etc/hosts」
说明:
① 系统启动时,启动脚本中的一个(未知),会检查当前「主机名」是否为「localhost」或「localhost.localdomain」,若是,那么该脚本就会使用「接口IP」对应的「主机名」对其进行重置
②「接口IP」与「主机名」的映射,存在于「/etc/hosts」文件,若「/etc/hosts」中不存在此映射,则默认为该接口的「IP地址」
③「ip addr show to 0/0 scope global | awk '/[[:space:]]inet/{ print gensub("/.*","","g",$2) }'」命令可以获取「接口IP」
50. nslookup
命令:nslookup {hostname|ip}
说明:向DNS(域名服务器,domain name server)发送请求,进行域名解析:
① nslookup hostname,正向解析,通过主机名,获取ip地址
② nslookup ip,反向解析,通过ip地址,获取主机名
功能:
① 查看DNS服务器地址
② 验证DNS功能正常
示例:
正向解析
反向解析
前面两行「Server」「Address」为DNS服务器地址
49. 自启动
49.3 设置
① 编写自启动脚本
说明:
a. 系统启动或手动执行service「Name」start命令时,系统运行该脚本,并传入「start」参数
b. 系统关机或手动执行service「Name」stop命令时,系统运行该脚本,并传入「stop」参数
c. 脚本程序的主体,menu $1,决定了运行该脚本即执行menu()函数,并传入对应参数,分别调用start()或stop()
d. start()和stop()函数体内,包含了你想执行的操作
注意:
脚本开头必须包含如下两行注释:
#chkconfig:「RunLevel...」「StartPL」「StopPL」
#description: 「UrDescription」
「RunLevel...」为该程序指定默认运行级
「StartPL」即Start Priority Level,指定程序的启动优先级
「StopPL」即Stop Priority Level,指定程序的停止优先级
先启动的应该后关闭,后启动的应该先关闭,因此,一般情况下「StartPL」+「StopPL」应该等于100
② 在/etc/init.d/目录中,为该脚本添加符号链接
③ chkconfig
chkconfig --add「name」
49.2 目录
/etc/init.d
作用:存放启动脚本
说明:实为目录/etc/rc.d/init.d的符号链接
用法:通常是在该目录下创建一个指向实际启动脚本的符号链接,而不是直接将脚本文件放于该目录中
/etc/rcN.d
作用:开机启动目录
说明:
◇ N从「0」到「6」,共七个目录
◇ 实为目录/etc/rc.d/rcN.d的符号链接
内容:目录中的文件实为指向/etc/init.d目录中对应脚本的符号链接
符号链接的命名规则为{S|K}+{nn}+{Name}
{nn}表示两位整数,代表程序启动或停止的优先级,{00}-{99},数值越大,优先级越低,即:
△ 系统启动时,会按数值大小,先启动排在前面(数值小)的程序,后启动排在后面(数值大)的程序
△ 系统关机时,会按数值大小,先停止排在前面(数值小)的程序,后停止排在后面(数值大)的程序
{Name}表示程序的名称,务必与/etc/init.d目录下的脚本文件名对应
描述:系统启动时,会根据当前所处运行级别,分别进入对应的rcN.d目录,并按照文件名中包含的优先级,顺序处理目录下的链接文件:
◇ 对于以S开头的文件,系统启动对应的程序,即系统执行/etc/init.d目录下的对应脚本,并传入start参数
◇ 对于以K开头的文件,系统停止对应的程序,即系统执行/etc/init.d目录下对应的脚本,并传入stop参数
49.1 运行级
Linux下共有7个运行级,分别是:
等级0表示:关机,默认运行级别不能设为0,否则系统不能正常启动
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重启,默认运行级别不能设为6,否则系统不能正常启动
查看系统当前运行级:runlevel
48. chkconfig
chkconfig是管理程序自启动的命令行工具,它可以帮助系统管理员在/etc/rcN.d目录下创建对应程序的符号链接,从而使得我们无需手动地逐个添加
添加
命令:chkconfig --add「name」
功能:按照/etc/init.d目录中对应的程序脚本中指定的运行级和优先级,为该程序添加自启动
设置
命令:chkconfig --level「n...」「name」{on|off|reset|resetpriorities}
功能:将「name」程序在运行级「n...」下的自启动{开启|关闭|重置|重置优先级}
说明:
重置,即将该程序在对应运行级下的自启动开关,重置为目录/etc/init.d对应脚本中指定的配置
重置优先级,即将该程序在对应运行级下的优先级,重置为目录/etc/init.d对应脚本中指定的优先级
查看
◇ chkconfig --list :列出所有自启动程序的配置
「0-6」对应Linux系统下的7个运行级别,「on」表示该程序在对应运行级下开启自启动,「off」表示该程序在对应运行级下禁用自启动
◇ chkconfig --list「name」:列出名为「name」的程序的配置
◇ chkconfig「name」:查看服务「name」在当前运行级下是否自启。若是则返回true,echo $? 结果为0;否则返回false,echo $? 结果为1
◇ chkconfig --level「n」「name」:查看服务「name」在运行级「n」下是否自启
删除
命令:chkconfig --del「name」
功能:删除「name」程序的自启动
说明:仅删除/etc/rcN.d目录下的符号链接,/etc/init.d中的脚本文件不受影响
47. 系统服务
查看
查看所有服务:ls /etc/init.d
添加
编写服务脚本,参考49.3
若不需要自启动,则不必添加头信息:
#chkconfig:「RunLevel...」「StartPL」「StopPL」
#description: 「UrDescription」
运行
命令:service「name」{start|stop}
说明:运行该命令后,系统会运行/etc/init.d中对应的脚本程序,并传入对应的参数{start|stop},最终调用脚本中的start()或stop()函数。因此,只需要将你想执行的操作放入start()或stop()函数体即可
46. at命令
命令:at 「Options」「Cmds」「Time」
功能:指定命令何时执行
输出:命令的STDOUT和STDERR,发往提交作业的用户的邮箱
选项:
-M:禁止向用户发送邮件
-l:显示所有作业
-f「FileName」:从文件读取命令
-d「JobNo」:删除作业,「JobNo」为作业号
命令:从STDIN,或通过-f「FileName」从指定的文件中,读入所要执行的命令
时间:精确到分,格式包括
△
日期时间 YYYY-MM-DD hh:mm
△
时间 hh:mm
默认为今日hh:mm,若今日当前时间已超过hh:mm,则为明日hh:mm
△
now 代表当前时间
now
+ 1min 一分钟后
now
+ 2hour 两小时后
now
+ 3day 三天后
示例:
45. 查看CentOS版本
② 查看/etc/redhat-release文件
命令:cat /etc/redhat-release
示例:
① 运行lsb_release命令
命令:lsb_release -a
安装:yum install lsb
说明:不是所有系统都支持lsb_release命令,且lsb依赖关系庞大,安装过程可能间接升级系统依赖库,对现有程序的运行造成未知影响,不利于系统稳定性,故不推荐在线上服务器执行yum install lsb
44. 时间
44.1 世界标准时
说明:
世界标准时(UTC),又称为协调世界时,世界统一时间,世界标准时间。它是世界上最主要的时间标准,同时也是世界上调节时钟和时间的主要标准。通过原子钟报时,精确度极高。不遵守夏令时
日常使用:
中华人民共和国的时间比UTC快8小时,就会写作UTC+8,俗称东八区。相反,如果本地时间比UTC时间慢,例如夏威夷的时间比UTC时间慢10小时,就会写作UTC-10,俗称西十区
44.2 格里尼治标准时间
GMT,是指位于英国伦敦郊区的皇家格林尼治天文台的当地时间
因为英国施行夏令时,所以格里尼治标准时间遵守夏令时间,一年中随季节变化而变化
44.3 夏令时间
又称日光节约时间,是一种为节约能源而人为调整地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”
方法:各个采纳夏时制的国家的规定不同。但一般是在天亮较早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电
意义:
如果一个人的作息习惯是早上10点起床,晚上12点睡觉,在夏季天亮较早的情况下,就会浪费大好的时光,同时浪费用电
此时,实行夏令时,人为将时间调快1小时,那么作息时间不变的情况下,实际上就等同于调整前的早上9点起床,晚上11点睡觉,充分利用了白天的时间,减少了能源消耗
国家和地区:
欧盟国家、瑞士和英国都是从3月最后一个星期日到10月最后一个星期日实行夏时制。欧盟国家和英国在三月最后一个星期日协调世界时01:00同时拨快一小 时,在十月的最后一个星期日协调世界时01:00进行相反的调整
此时,英国由理论上的0时区变为实际上的东1区(因为比UTC快1小时),罗马由理论上的东1区变为实际上的东2区(因为比UTC快2小时)
中华人民共和国在1986-1991年试行过夏时制,现已废弃
44.4 设置时间
date -s "YYYY-MM-DD hh:mm:ss"
44.5 时区
「东N区」即「当地时间」比「UTC时间」快「N」个小时;「西M区」即「当地时间」比「UTC时间」慢「M」个小时
故位于「东8区」的中国比位于「东9区」的日本,时间慢「1」个小时,中国的当地时间「2017-04-29
07:34:09」,则日本当地时间为「2017-04-29 08:34:09」
44.6 显示时区
date -R
示例:
「+」代表东区,「-」代表西区,因此「+0100」即东1区
44.7 更改时区
① 运行「tzselect」,获取目标国家的时区名
② 运行「TZ='TzName'; export TZ」,设置当前连接的时区;连接关闭,设置失效
③ 「TZ='TzName'; export TZ」写入~/.bashrc,使时区设置对用户永久生效
44.8 UNIX时间
又称POSIX时间,是UNIX系统使用的时间表示方式:从协调世界时1970年1月1日0时0分0秒起至现在的总秒数
为绝对时间,与时区无关,跨时区作业的时间存储格式应该使用UNIX时间,而不是国际标准格式
查看方式 date +%s
◇ UNIX时间,与UTC时间同,为绝对时间,与时区无关。不同时区的UNIX时间相同
意大利
罗马当地时间「2017-04-29 04:43:00」,UNIX时间为「1493433780」
中国
同一时刻,北京当地时间为「2017-04-29 10:43:00」,UNIX时间为「1493433780」
◇ 国际标准日期/时间格式,「YYYY-MM-DD hh:mm:ss」,为相对时间,依赖于时区。
同一个「YYYY-MM-DD hh:mm:ss」,在不同的时区,其对应的UTC时间和UNIX时间不同
2038年问题
32位UNIX系统中,time_t类型为32位整数,可以表示的时间区间为:协调世界时,「1990」至「2038」年
超过「2038」年,软件可能发生问题,导致系统瘫痪,解决办法:把32位系统升级为64位系统
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
查看打开文件的进程
命令:lsof「Options」/path/file
参数:
+r sec:将lsof置于循环模式,每「sec」秒刷新一次,直至没有打开该文件的进程为止
-r sec:将lsof置于循环模式,每「sec」秒刷新一次,无限循环
37. 32/64位
在64位系统上,可以执行64位和32位应用程序。在32位系统上,只能执行32位应用程序,不能执行64位应用程序。
问题: 32/64位应用程序是否可以调用64/32位共享库?
回答: 64位应用程序只能调用64位共享库,32位应用程序只能调用32位共享库。
36. 动态库
36.1 编译期
① gcc -Lpath -lname,例如:gcc -L./lib -levent
② gcc path/libname.so,例如:gcc lib/libevent.so (path绝对路径和相对路径均可)
两种方法都可以为编译期指定动态库路径,目的也都是为了编译能够通过。差别在于:
◇ 方法一生成的可执行文件,运行期,会遵照动态库默认搜索顺序,查找动态库,依次是编译期添加的路径、LD_LIBRARY_PATH、/etc/ld.so.cache、/usr/lib与/usr/lib64;
◇ 方法二生成的可执行文件,运行期,只从path/路径下找寻动态库,一旦在该目录下找不到库文件,就报错。因此,使用该方法时,只要动态库位置改变,可执行文件就无法运行;
说明:
g++ libname.so,效果等同于①,当动态库位于当前编译目录时,该法可用
对于方法②:
若path为绝对路径,运行期去指定路径找;
若path为相对路径,运行期去相对于进程当前工作目录的路径找,与程序目录和编译目录无关;
假设,程序代码所在目录为/home/rongxj/workspace/attempt,编译目录同样为/home/rongxj/workspace/attempt,
编译选项为g++ -o main tmp/libtest.so,则当在/home/rongxj目录下运行main时,可执行文件理解的库文件路径为:/home/rongxj/tmp/libtest.so,当在/root/目录下运行main时,库路径为:/root/tmp/libtest.so
编译期指定运行期动态库搜索路径的方法是:g++ -Wl,-rpath=path1:path2:...:pathN,路径之间以":"分隔
若path为绝对路径,运行期去指定路径找;
若path为相对路径,运行期去相对于进程当前工作目录的路径找,与程序目录和编译目录无关,示例同上;
若运行期在编译期指定的路径下,没有找到库文件,则按默认搜索顺序,依次后面的路径:LD_LIBRARY_PATH、/etc/ld.so.cache、/usr/lib与/usr/lib64
36.2 运行期
若可执行文件以g++ path/libname.so的方式生成,则去path/路径下查找动态库,找不到就报错;
否则遵照动态库默认搜索顺序,依次查找对应目录,使用找到的第一个库文件;
默认搜索顺序:
①编译目标代码时添加的搜索路径
②LD_LIBRARY_PATH
③/etc/ld.so.cache
④默认路径/lib和/usr/lib,/lib64和/usr/lib64
/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 exe
ldd命令可以看到可执行文件当前使用的是哪个动态库
查看文件属性
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
「Options」「UserName」
选项:
-m 创建用户的HOME目录
-M 不创建用户的HOME目录
-g {GroupName|GroupID} 为新用户指定默认组
◇ 删除用户
命令:userdel name
选项:
-r 删除用户的HOME目录以及邮件目录,然而, 系统上仍可能存在已删除用户的其他文件
◇ 修改密码
passwd name
◇ 为普通用户赋予「root」权限
vim /etc/sudoers
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命令
格式:du「options」「files」
功能:查看文件大小
选项及参数:
◇ -0:以字节0分隔输出,而不是换行符;
◇ -B「SIZE」:指定输出单位,例如:'-BM' 以MB输出结果;
-b:指定单位为byte,等价于 '-B 1',结果无单位;
-k:指定单位为KB,等价于 '-B K',结果带单位K;
-m:指定单位为MB,等价于 '-B M',结果带单位M;
示例:
以MB为单位显示文件:
du -sBM file
◇ -h:以可视化格式显示大小,即根据文件实际大小智能选择单位B,K,M,结果带单位;
◇ -s:显示每个参数的总大小;
示例:
显示当前目录的总大小:
du -sh .
显示当前目录下各文件及目录的大小:
du -sh *
◇ -t「SIZE」:SIZE > 0,显示大于「SIZE」的所有文件;SIZE
< 0,显示小于「SIZE」的所有文件。「SIZE」必须带单位
示例:
显示当前目录下大于100M的所有文件:
du -sBM -t 100M *
显示当前目录下大于100M且小于300M的所有文件:
du -sBM -t 100M * | awk '{print $2}' | xargs du -sBM -t -300M
◇ --time:显示每个参数文件的最后内容修改时间,若参数为目录,则为目录中文件及子目录的最后内容修改时间;
◇ --time=WORD:显示每个参数文件的最后时间,WORD取值为{atime | ctime},分别对应{最后访问时间 | 最后状态修改时间};
示例:
显示当前目录下的文件大小及最后内容修改时间:
du -sBM --time * | head -3
◇ --exclude=PATTERN:排除匹配PATTERN的文件
说明:
PATTERN是shell模式,不是正则表达式。
在shell模式中,「?」匹配任意一个字符;「*」匹配任意字符串,包括空字符串。
因此,「*.o」可以匹配任意以「.o」结尾的文件,以及文件「.o」
示例:
显示当前目录下文件大小,排除「.o」结尾的文件:
du -sBM --exclude=*.o * | head -3
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.12 实际用户ID和有效用户ID
查看进程的实际用户ID和有效用户ID:
ps -e -o ruid,euid
ps -e -o ruser,euser
示例:
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
g++ libname.so,即动态库位于当前编译目录时,该法可用,且效果等同于①
格式:mail -s「title」「receiver@mail.com」
示例:
56. date
格式:date +%s
功能:打印Unix时间戳
示例:
格式:date +%Y-%m-%d date +%Y%m%d date +%y%m%d
功能:打印当前日期
示例:
55. gcc44/g++44
若CentOS系统版本过低(如CentOS 5.4),则可能不支持「-std=c++0x」选项。解决办法是安装gcc44/g++44
① 安装:
yum install gcc44
yum install gcc44-c++
② 设置
export CXX=g++44
说明:对于C++项目,cmake使用的编辑器由环境变量「CXX」指定,默认为「/usr/bin/c++」;对于C项目,cmake使用的编辑器由环境变量「CC」指定,默认为「/usr/bin/gcc」
③ 编译
cmake ../project_dir && make
说明:运行cmake之前,需要先删除build目录当前所有文件
54. bash_history
文件:~/.bash_history
名称:历史命令记录文件
功能:记录特定用户在命令行上执行过的命令
说明:
① bash_history跨会话和连接共享,即用户A以「some_user」账号登录到系统,用户B同样以「some_user」账号登录到系统,则A和B执行过的命令都将记录到同一个bash_history文件,即/home/some_user/.bash_history;
② 历史命令写入bash_history文件的时机是,当前会话关闭时;
③ 此文件的访问权限为600;
安全问题:
bash_history文件可能造成密码泄露,请妥善处理
53. strings命令
语法:strings「options」file...
功能:打印文件中的可打印字符串。对于给定的每个文件,GNU strings会打印至少4个(或选项中指定的个数)字符长的可打印字符序列,后跟一个不可打印字符。strings主要用于确定非文本文件的内容
选项及参数:
-n min-len:打印长度至少为「min-len」个字符的字符序列,而不是默认值4
52. DNS
修改
vim /etc/resolv.conf
立即生效
51. 主机名
查看
hostname
echo $HOSTNAME
设置
◇ 临时设置
hostname 「name」
立即生效,系统重启后失效
◇ 永久设置
分别设置「/etc/hostname」「/etc/sysconfig/network」「/etc/hosts」
说明:
① 系统启动时,启动脚本中的一个(未知),会检查当前「主机名」是否为「localhost」或「localhost.localdomain」,若是,那么该脚本就会使用「接口IP」对应的「主机名」对其进行重置
②「接口IP」与「主机名」的映射,存在于「/etc/hosts」文件,若「/etc/hosts」中不存在此映射,则默认为该接口的「IP地址」
③「ip addr show to 0/0 scope global | awk '/[[:space:]]inet/{ print gensub("/.*","","g",$2) }'」命令可以获取「接口IP」
50. nslookup
命令:nslookup {hostname|ip}
说明:向DNS(域名服务器,domain name server)发送请求,进行域名解析:
① nslookup hostname,正向解析,通过主机名,获取ip地址
② nslookup ip,反向解析,通过ip地址,获取主机名
功能:
① 查看DNS服务器地址
② 验证DNS功能正常
示例:
正向解析
反向解析
前面两行「Server」「Address」为DNS服务器地址
49. 自启动
49.3 设置
① 编写自启动脚本
说明:
a. 系统启动或手动执行service「Name」start命令时,系统运行该脚本,并传入「start」参数
b. 系统关机或手动执行service「Name」stop命令时,系统运行该脚本,并传入「stop」参数
c. 脚本程序的主体,menu $1,决定了运行该脚本即执行menu()函数,并传入对应参数,分别调用start()或stop()
d. start()和stop()函数体内,包含了你想执行的操作
注意:
脚本开头必须包含如下两行注释:
#chkconfig:「RunLevel...」「StartPL」「StopPL」
#description: 「UrDescription」
「RunLevel...」为该程序指定默认运行级
「StartPL」即Start Priority Level,指定程序的启动优先级
「StopPL」即Stop Priority Level,指定程序的停止优先级
先启动的应该后关闭,后启动的应该先关闭,因此,一般情况下「StartPL」+「StopPL」应该等于100
② 在/etc/init.d/目录中,为该脚本添加符号链接
③ chkconfig
chkconfig --add「name」
49.2 目录
/etc/init.d
作用:存放启动脚本
说明:实为目录/etc/rc.d/init.d的符号链接
用法:通常是在该目录下创建一个指向实际启动脚本的符号链接,而不是直接将脚本文件放于该目录中
/etc/rcN.d
作用:开机启动目录
说明:
◇ N从「0」到「6」,共七个目录
◇ 实为目录/etc/rc.d/rcN.d的符号链接
内容:目录中的文件实为指向/etc/init.d目录中对应脚本的符号链接
符号链接的命名规则为{S|K}+{nn}+{Name}
{nn}表示两位整数,代表程序启动或停止的优先级,{00}-{99},数值越大,优先级越低,即:
△ 系统启动时,会按数值大小,先启动排在前面(数值小)的程序,后启动排在后面(数值大)的程序
△ 系统关机时,会按数值大小,先停止排在前面(数值小)的程序,后停止排在后面(数值大)的程序
{Name}表示程序的名称,务必与/etc/init.d目录下的脚本文件名对应
描述:系统启动时,会根据当前所处运行级别,分别进入对应的rcN.d目录,并按照文件名中包含的优先级,顺序处理目录下的链接文件:
◇ 对于以S开头的文件,系统启动对应的程序,即系统执行/etc/init.d目录下的对应脚本,并传入start参数
◇ 对于以K开头的文件,系统停止对应的程序,即系统执行/etc/init.d目录下对应的脚本,并传入stop参数
49.1 运行级
Linux下共有7个运行级,分别是:
等级0表示:关机,默认运行级别不能设为0,否则系统不能正常启动
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重启,默认运行级别不能设为6,否则系统不能正常启动
查看系统当前运行级:runlevel
48. chkconfig
chkconfig是管理程序自启动的命令行工具,它可以帮助系统管理员在/etc/rcN.d目录下创建对应程序的符号链接,从而使得我们无需手动地逐个添加
添加
命令:chkconfig --add「name」
功能:按照/etc/init.d目录中对应的程序脚本中指定的运行级和优先级,为该程序添加自启动
设置
命令:chkconfig --level「n...」「name」{on|off|reset|resetpriorities}
功能:将「name」程序在运行级「n...」下的自启动{开启|关闭|重置|重置优先级}
说明:
重置,即将该程序在对应运行级下的自启动开关,重置为目录/etc/init.d对应脚本中指定的配置
重置优先级,即将该程序在对应运行级下的优先级,重置为目录/etc/init.d对应脚本中指定的优先级
查看
◇ chkconfig --list :列出所有自启动程序的配置
「0-6」对应Linux系统下的7个运行级别,「on」表示该程序在对应运行级下开启自启动,「off」表示该程序在对应运行级下禁用自启动
◇ chkconfig --list「name」:列出名为「name」的程序的配置
◇ chkconfig「name」:查看服务「name」在当前运行级下是否自启。若是则返回true,echo $? 结果为0;否则返回false,echo $? 结果为1
◇ chkconfig --level「n」「name」:查看服务「name」在运行级「n」下是否自启
删除
命令:chkconfig --del「name」
功能:删除「name」程序的自启动
说明:仅删除/etc/rcN.d目录下的符号链接,/etc/init.d中的脚本文件不受影响
47. 系统服务
查看
查看所有服务:ls /etc/init.d
添加
编写服务脚本,参考49.3
若不需要自启动,则不必添加头信息:
#chkconfig:「RunLevel...」「StartPL」「StopPL」
#description: 「UrDescription」
运行
命令:service「name」{start|stop}
说明:运行该命令后,系统会运行/etc/init.d中对应的脚本程序,并传入对应的参数{start|stop},最终调用脚本中的start()或stop()函数。因此,只需要将你想执行的操作放入start()或stop()函数体即可
46. at命令
命令:at 「Options」「Cmds」「Time」
功能:指定命令何时执行
输出:命令的STDOUT和STDERR,发往提交作业的用户的邮箱
选项:
-M:禁止向用户发送邮件
-l:显示所有作业
-f「FileName」:从文件读取命令
-d「JobNo」:删除作业,「JobNo」为作业号
命令:从STDIN,或通过-f「FileName」从指定的文件中,读入所要执行的命令
时间:精确到分,格式包括
△
日期时间 YYYY-MM-DD hh:mm
△
时间 hh:mm
默认为今日hh:mm,若今日当前时间已超过hh:mm,则为明日hh:mm
△
now 代表当前时间
now
+ 1min 一分钟后
now
+ 2hour 两小时后
now
+ 3day 三天后
示例:
45. 查看CentOS版本
② 查看/etc/redhat-release文件
命令:cat /etc/redhat-release
示例:
① 运行lsb_release命令
命令:lsb_release -a
安装:yum install lsb
说明:不是所有系统都支持lsb_release命令,且lsb依赖关系庞大,安装过程可能间接升级系统依赖库,对现有程序的运行造成未知影响,不利于系统稳定性,故不推荐在线上服务器执行yum install lsb
44. 时间
44.1 世界标准时
说明:
世界标准时(UTC),又称为协调世界时,世界统一时间,世界标准时间。它是世界上最主要的时间标准,同时也是世界上调节时钟和时间的主要标准。通过原子钟报时,精确度极高。不遵守夏令时
日常使用:
中华人民共和国的时间比UTC快8小时,就会写作UTC+8,俗称东八区。相反,如果本地时间比UTC时间慢,例如夏威夷的时间比UTC时间慢10小时,就会写作UTC-10,俗称西十区
44.2 格里尼治标准时间
GMT,是指位于英国伦敦郊区的皇家格林尼治天文台的当地时间
因为英国施行夏令时,所以格里尼治标准时间遵守夏令时间,一年中随季节变化而变化
44.3 夏令时间
又称日光节约时间,是一种为节约能源而人为调整地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”
方法:各个采纳夏时制的国家的规定不同。但一般是在天亮较早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电
意义:
如果一个人的作息习惯是早上10点起床,晚上12点睡觉,在夏季天亮较早的情况下,就会浪费大好的时光,同时浪费用电
此时,实行夏令时,人为将时间调快1小时,那么作息时间不变的情况下,实际上就等同于调整前的早上9点起床,晚上11点睡觉,充分利用了白天的时间,减少了能源消耗
国家和地区:
欧盟国家、瑞士和英国都是从3月最后一个星期日到10月最后一个星期日实行夏时制。欧盟国家和英国在三月最后一个星期日协调世界时01:00同时拨快一小 时,在十月的最后一个星期日协调世界时01:00进行相反的调整
此时,英国由理论上的0时区变为实际上的东1区(因为比UTC快1小时),罗马由理论上的东1区变为实际上的东2区(因为比UTC快2小时)
中华人民共和国在1986-1991年试行过夏时制,现已废弃
44.4 设置时间
date -s "YYYY-MM-DD hh:mm:ss"
44.5 时区
「东N区」即「当地时间」比「UTC时间」快「N」个小时;「西M区」即「当地时间」比「UTC时间」慢「M」个小时
故位于「东8区」的中国比位于「东9区」的日本,时间慢「1」个小时,中国的当地时间「2017-04-29
07:34:09」,则日本当地时间为「2017-04-29 08:34:09」
44.6 显示时区
date -R
示例:
「+」代表东区,「-」代表西区,因此「+0100」即东1区
44.7 更改时区
① 运行「tzselect」,获取目标国家的时区名
② 运行「TZ='TzName'; export TZ」,设置当前连接的时区;连接关闭,设置失效
③ 「TZ='TzName'; export TZ」写入~/.bashrc,使时区设置对用户永久生效
44.8 UNIX时间
又称POSIX时间,是UNIX系统使用的时间表示方式:从协调世界时1970年1月1日0时0分0秒起至现在的总秒数
为绝对时间,与时区无关,跨时区作业的时间存储格式应该使用UNIX时间,而不是国际标准格式
查看方式 date +%s
◇ UNIX时间,与UTC时间同,为绝对时间,与时区无关。不同时区的UNIX时间相同
意大利
罗马当地时间「2017-04-29 04:43:00」,UNIX时间为「1493433780」
中国
同一时刻,北京当地时间为「2017-04-29 10:43:00」,UNIX时间为「1493433780」
◇ 国际标准日期/时间格式,「YYYY-MM-DD hh:mm:ss」,为相对时间,依赖于时区。
同一个「YYYY-MM-DD hh:mm:ss」,在不同的时区,其对应的UTC时间和UNIX时间不同
2038年问题
32位UNIX系统中,time_t类型为32位整数,可以表示的时间区间为:协调世界时,「1990」至「2038」年
超过「2038」年,软件可能发生问题,导致系统瘫痪,解决办法:把32位系统升级为64位系统
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
查看打开文件的进程
命令:lsof「Options」/path/file
参数:
+r sec:将lsof置于循环模式,每「sec」秒刷新一次,直至没有打开该文件的进程为止
-r sec:将lsof置于循环模式,每「sec」秒刷新一次,无限循环
37. 32/64位
在64位系统上,可以执行64位和32位应用程序。在32位系统上,只能执行32位应用程序,不能执行64位应用程序。
问题: 32/64位应用程序是否可以调用64/32位共享库?
回答: 64位应用程序只能调用64位共享库,32位应用程序只能调用32位共享库。
36. 动态库
36.1 编译期
① gcc -Lpath -lname,例如:gcc -L./lib -levent
② gcc path/libname.so,例如:gcc lib/libevent.so (path绝对路径和相对路径均可)
两种方法都可以为编译期指定动态库路径,目的也都是为了编译能够通过。差别在于:
◇ 方法一生成的可执行文件,运行期,会遵照动态库默认搜索顺序,查找动态库,依次是编译期添加的路径、LD_LIBRARY_PATH、/etc/ld.so.cache、/usr/lib与/usr/lib64;
◇ 方法二生成的可执行文件,运行期,只从path/路径下找寻动态库,一旦在该目录下找不到库文件,就报错。因此,使用该方法时,只要动态库位置改变,可执行文件就无法运行;
说明:
g++ libname.so,效果等同于①,当动态库位于当前编译目录时,该法可用
对于方法②:
若path为绝对路径,运行期去指定路径找;
若path为相对路径,运行期去相对于进程当前工作目录的路径找,与程序目录和编译目录无关;
假设,程序代码所在目录为/home/rongxj/workspace/attempt,编译目录同样为/home/rongxj/workspace/attempt,
编译选项为g++ -o main tmp/libtest.so,则当在/home/rongxj目录下运行main时,可执行文件理解的库文件路径为:/home/rongxj/tmp/libtest.so,当在/root/目录下运行main时,库路径为:/root/tmp/libtest.so
编译期指定运行期动态库搜索路径的方法是:g++ -Wl,-rpath=path1:path2:...:pathN,路径之间以":"分隔
若path为绝对路径,运行期去指定路径找;
若path为相对路径,运行期去相对于进程当前工作目录的路径找,与程序目录和编译目录无关,示例同上;
若运行期在编译期指定的路径下,没有找到库文件,则按默认搜索顺序,依次后面的路径:LD_LIBRARY_PATH、/etc/ld.so.cache、/usr/lib与/usr/lib64
36.2 运行期
若可执行文件以g++ path/libname.so的方式生成,则去path/路径下查找动态库,找不到就报错;
否则遵照动态库默认搜索顺序,依次查找对应目录,使用找到的第一个库文件;
默认搜索顺序:
①编译目标代码时添加的搜索路径
②LD_LIBRARY_PATH
③/etc/ld.so.cache
④默认路径/lib和/usr/lib,/lib64和/usr/lib64
/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 exe
ldd命令可以看到可执行文件当前使用的是哪个动态库
查看文件属性
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
「Options」「UserName」
选项:
-m 创建用户的HOME目录
-M 不创建用户的HOME目录
-g {GroupName|GroupID} 为新用户指定默认组
◇ 删除用户
命令:userdel name
选项:
-r 删除用户的HOME目录以及邮件目录,然而, 系统上仍可能存在已删除用户的其他文件
◇ 修改密码
passwd name
◇ 为普通用户赋予「root」权限
vim /etc/sudoers
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命令
格式:du「options」「files」
功能:查看文件大小
选项及参数:
◇ -0:以字节0分隔输出,而不是换行符;
◇ -B「SIZE」:指定输出单位,例如:'-BM' 以MB输出结果;
-b:指定单位为byte,等价于 '-B 1',结果无单位;
-k:指定单位为KB,等价于 '-B K',结果带单位K;
-m:指定单位为MB,等价于 '-B M',结果带单位M;
示例:
以MB为单位显示文件:
du -sBM file
◇ -h:以可视化格式显示大小,即根据文件实际大小智能选择单位B,K,M,结果带单位;
◇ -s:显示每个参数的总大小;
示例:
显示当前目录的总大小:
du -sh .
显示当前目录下各文件及目录的大小:
du -sh *
◇ -t「SIZE」:SIZE > 0,显示大于「SIZE」的所有文件;SIZE
< 0,显示小于「SIZE」的所有文件。「SIZE」必须带单位
示例:
显示当前目录下大于100M的所有文件:
du -sBM -t 100M *
显示当前目录下大于100M且小于300M的所有文件:
du -sBM -t 100M * | awk '{print $2}' | xargs du -sBM -t -300M
◇ --time:显示每个参数文件的最后内容修改时间,若参数为目录,则为目录中文件及子目录的最后内容修改时间;
◇ --time=WORD:显示每个参数文件的最后时间,WORD取值为{atime | ctime},分别对应{最后访问时间 | 最后状态修改时间};
示例:
显示当前目录下的文件大小及最后内容修改时间:
du -sBM --time * | head -3
◇ --exclude=PATTERN:排除匹配PATTERN的文件
说明:
PATTERN是shell模式,不是正则表达式。
在shell模式中,「?」匹配任意一个字符;「*」匹配任意字符串,包括空字符串。
因此,「*.o」可以匹配任意以「.o」结尾的文件,以及文件「.o」
示例:
显示当前目录下文件大小,排除「.o」结尾的文件:
du -sBM --exclude=*.o * | head -3
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.12 实际用户ID和有效用户ID
查看进程的实际用户ID和有效用户ID:
ps -e -o ruid,euid
ps -e -o ruser,euser
示例:
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
g++ libname.so,即动态库位于当前编译目录时,该法可用,且效果等同于①
相关文章推荐
- Linux bash Shell中的变量类型详解
- 嵌入式Linux驱动开发
- tiny210移植linux内核(3.0.8)杂项
- Linux下安装jdk
- RedHat 6.2 Linux修改yum源免费使用CentOS源
- CentOS最小化安装后AR8151网卡驱动未安装解决办法
- linux 常用命令
- linux ifconfig命令配置ip地址
- linux开机启动脚本的顺序
- linux Platform设备驱动
- linux 升级g++ [错误:unrecognized command line option “-std=c++11”]
- Centos7下安装eclipse进行C/C++开发
- Linux------创建和终止进程
- Linux文件权限属性后面的点的含义(ls -l)
- Linux编程手册
- log4cxx在linux下的编译使用
- Linux编程手册
- Linux编程手册
- centos 7.1 yum
- linux系统工程师面试题(附答案)