Linux-(kill,wc,killall,ln,cal,date)
kill命令
1.命令格式:
kill [参数] [进程号]
2.命令功能:
发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果仍无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。
3.命令参数:
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
注意:
1、kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:kill -2 123 它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。
2、kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。
3、可以向多个进程发信号或终止它们。
4、当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。
5、信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。
4.使用实例:
列出所有信号名称
命令:kill -l
说明:只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。
下面是常用的信号:
- HUP 1 终端断线
- INT 2 中断(同 Ctrl + C)
- QUIT 3 退出(同 Ctrl + \)
- TERM 15 终止
- KILL 9 强制终止
- CONT 18 继续(与STOP相反, fg/bg命令)
- STOP 19 暂停(同 Ctrl + Z)
得到指定信号的数值
命令:kill -l KILL
杀死指定用户所有进程
命令:
kill -9 $(ps -ef | grep peidalinux)
kill -u peidalinux
说明:方法一,过滤出hnlinux用户进程并杀死
init进程是不可杀的
命令:kill -9 1
[root@localhost ~]# ps -ef|grep init root 1 0 0 Nov02 ? 00:00:00 init [3] root 17563 17534 0 17:37 pts/1 00:00:00 grep init [root@localhost ~]# kill -9 1 [root@localhost ~]# kill -HUP 1 [root@localhost ~]# ps -ef|grep init root 1 0 0 Nov02 ? 00:00:00 init [3] root 17565 17534 0 17:38 pts/1 00:00:00 grep init [root@localhost ~]# kill -KILL 1 [root@localhost ~]# ps -ef|grep init root 1 0 0 Nov02 ? 00:00:00 init [3] root 17567 17534 0 17:38 pts/1 00:00:00 grep init [root@localhost ~]#
说明:
init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。 其它所有进程都是init进程的子孙。init进程是不可杀的!
pkill 命令
“pkill”命令允许使用扩展的正则表达式和其它匹配方式。你现在可以使用应用的进程名kill掉它们,而不是使用PID。
例如,要kill掉Firefox浏览器,只需要运行命令:pkill firefox
为了避免kill掉错误的进程,你应该用一下"pgrep -l [进程名]"列表来匹配进程名称。
wc命令
1.命令格式:
wc [选项] 文件...
2.命令功能:
统计指定文件中的行数、字数、字节数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
3.命令参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
--version 显示版本信息
4.使用实例:
查看文件的字节数、字数、行数
命令:wc test.tx
说明:
7 8 70 test.txt
行数 单词数 字节数 文件名
用wc命令怎么做到只打印统计数字不打印文件名
命令:
[root@localhost test]# wc -l test.txt 7 test.txt [root@localhost test]# cat test.txt |wc -l 7[root@localhost test]#
用来统计当前目录下的文件数
命令:ls -l | wc -l
说明:数量中包含当前目录
killall命令
1.命令格式:
killall [参数] [进程名]
2.命令功能:
用来结束同名的的所有进程
3.命令参数:
-Z 只杀死拥有scontext 的进程
-e 要求匹配进程名称
-I 忽略小写
-g 杀死进程组而不是进程
-i 交互模式,杀死进程前先询问用户
-l 列出所有的已知信号名称
-q 不输出警告信息
-s 发送指定的信号
-v 报告信号是否成功发送
-w 等待进程死亡
--help 显示帮助信息
--version 显示版本显示
4.使用实例:
杀死所有同名进程
命令:killall vi
[root@localhost ~]# ps -ef|grep vi root 17581 17398 0 17:51 pts/0 00:00:00 vi test.txt root 17611 17582 0 17:51 pts/1 00:00:00 grep vi [root@localhost ~]# ps -ef|grep vi root 17581 17398 0 17:51 pts/0 00:00:00 vi test.txt root 17640 17612 0 17:51 pts/2 00:00:00 vi test.log root 17642 17582 0 17:51 pts/1 00:00:00 grep vi [root@localhost ~]# killall vi [root@localhost ~]# ps -ef|grep vi root 17645 17582 0 17:52 pts/1 00:00:00 grep vi
把所有的登录后的shell给杀掉
命令:killall -9 bash
说明:运行命令:killall -9 bash 后,所有bash都会被卡掉了,所以当前所有连接丢失了。需要重新连接并登录。
ln命令
1.命令格式:
ln [参数] [源文件或目录] [目标文件或目录]
2.命令功能:
它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link)。
硬链接的意思是一个档案可以有多个名称,硬链接是存在同一个文件系统中,
软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。软链接却可以跨越不同的文件系统。
软链接:
- 软链接可以路径的形式存在。类似于Windows操作系统中的快捷方式
- 软链接可以跨文件系统 ,硬链接不可以
- 软链接可以对一个不存在的文件名进行链接
- 软链接可以对目录进行链接
硬链接:
- 硬链接,以文件副本的形式存在。但不占用实际空间。
- 不允许给目录创建硬链接
- 硬链接只有在同一个文件系统中才能创建
这里有两点要注意:
第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
第二,ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接就是ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
3.命令参数:
必要参数:
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
选择参数:
-S “-S<字尾备份字符串> ”或 “--suffix=<字尾备份字符串>”
-V “-V<备份方式>”或“--version-control=<备份方式>”
--help 显示帮助信息
--version 显示版本信息
4.使用实例:
给文件创建软链接
命令:ln -s log2013.log link2013
说明:为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效
给文件创建硬链接
命令:ln log2013.log ln2013
说明:为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同
ps:
1.源文件被删除后,并没有影响硬链接文件;软链接文件在centos系统下不断的闪烁,提示源文件已经不存在
2.重建源文件后,软链接不在闪烁提示,说明已经链接成功,找到了链接文件系统;重建后,硬链接文件并没有受到源文件影响,硬链接文件的内容还是保留了删除前源文件的内容,说明硬链接已经失效
将文件链接为另一个目录中的相同名字
命令:ln log2013.log test3
说明:在test3目录中创建了同名的log2013.log的硬链接,修改test3目录中的log2013.log文件,同时也会同步到源文件
给目录创建软链接
命令:ln -sv /opt/soft/test/test3 /opt/soft/test/test5
[root@localhost test5]# ln -sv /opt/soft/test/test3 /opt/soft/test/test5
创建指向“/opt/soft/test/test3”的符号链接“/opt/soft/test/test5/test3”
说明:
1.目录只能创建软链接
2.目录创建链接必须用绝对路径,相对路径创建会不成功,会提示:符号连接的层数过多这样的错误
3.在链接目标目录中修改文件都会在源文件目录中同步变化
cal命令
1.命令格式:
cal [参数] [月份] [年份]
2.命令功能:
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
3.命令参数:
-1 显示一个月的月历
-3 显示系统前一个月,当前月,下一个月的月历
-s 显示星期天为一个星期的第一天,默认的格式
-m 显示星期一为一个星期的第一天
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
date命令
1.命令格式:
date [参数]... [+格式]
2.命令功能:
date 可以用来显示或设定系统的日期与时间。
3.命令参数:
必要参数:
- %H 小时(以00-23来表示)。
- %I 小时(以01-12来表示)。
- %K 小时(以0-23来表示)。
- %l 小时(以0-12来表示)。
- %M 分钟(以00-59来表示)。
- %P AM或PM。
- %r 时间(含时分秒,小时以12小时AM/PM来表示)。
- %s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
- %S 秒(以本地的惯用法来表示)。
- %T 时间(含时分秒,小时以24小时制来表示)。
- %X 时间(以本地的惯用法来表示)。
- %Z 市区。
- %a 星期的缩写。
- %A 星期的完整名称。
- %b 月份英文名的缩写。
- %B 月份的完整英文名称。
- %c 日期与时间。只输入date指令也会显示同样的结果。
- %d 日期(以01-31来表示)。
- %D 日期(含年月日)。
- %j 该年中的第几天。
- %m 月份(以01-12来表示)。
- %U 该年中的周数。
- %w 该周的天数,0代表周日,1代表周一,异词类推。
- %x 日期(以本地的惯用法来表示)。
- %y 年份(以00-99来表示)。
- %Y 年份(以四位数来表示)。
- %n 在显示时,插入新的一行。
- %t 在显示时,插入tab。
- MM 月份(必要)
- DD 日期(必要)
- hh 小时(必要)
- mm 分钟(必要)
- ss 秒(选择性)
选择参数:
- -d<字符串> 显示字符串所指的日期与时间。字符串前后必须加上双引号。
- -s<字符串> 根据字符串来设置日期与时间。字符串前后必须加上双引号。
- -u 显示GMT。
- --help 在线帮助。
- --version 显示版本信息
4.使用说明:
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下: % : 打印出 %:
- %n : 下一行
- %t : 跳格
- %H : 小时(00..23)
- %I : 小时(01..12)
- %k : 小时(0..23)
- %l : 小时(1..12)
- %M : 分钟(00..59)
- %p : 显示本地 AM 或 PM
- %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
- %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
- %S : 秒(00..61)
- %T : 直接显示时间 (24 小时制)
- %X : 相当于 %H:%M:%S
- %Z : 显示时区 %a : 星期几 (Sun..Sat)
- %A : 星期几 (Sunday..Saturday)
- %b : 月份 (Jan..Dec)
- %B : 月份 (January..December)
- %c : 直接显示日期与时间
- %d : 日 (01..31)
- %D : 直接显示日期 (mm/dd/yy)
- %h : 同 %b
- %j : 一年中的第几天 (001..366)
- %m : 月份 (01..12)
- %U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
- %w : 一周中的第几天 (0..6)
- %W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
- %x : 直接显示日期 (mm/dd/yy)
- %y : 年份的最后两位数字 (00.99)
- %Y : 完整年份 (0000..9999)
2.在设定时间方面:
- date -s //设置当前时间,只有root权限才能设置,其他只能查看。
- date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
- date -s 01:01:01 //设置具体时间,不会对日期做更改
- date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
- date -s “01:01:01 20080523″ //这样可以设置全部时间
- date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
- date -s “20080523 01:01:01″ //这样可以设置全部时间
3.加减:
- date +%Y%m%d //显示前天年月日
- date +%Y%m%d --date="+1 day" //显示前一天的日期
- date +%Y%m%d --date="-1 day" //显示后一天的日期
- date +%Y%m%d --date="-1 month" //显示上一月的日期
- date +%Y%m%d --date="+1 month" //显示下一月的日期
- date +%Y%m%d --date="-1 year" //显示前一年的日期
- date +%Y%m%d --date="+1 year" //显示下一年的日期
5.使用实例:
[root@localhost ~]# date 2012年 12月 08日 星期六 08:31:35 CST [root@localhost ~]# date '+%c' 2012年12月08日 星期六 08时34分44秒 [root@localhost ~]# date '+%D' 12/08/12
[root@localhost ~]# date '+%x' 2012年12月08日 [root@localhost ~]# date '+%T' 08:35:36
[root@localhost ~]# date '+%X' 08时35分54秒[root@localhost ~]# date '+%c' 2012年12月08日 星期六 08时41分37秒 [root@localhost ~]# date --date 08:42:00 2012年 12月 08日 星期六 08:42:00 CST [root@localhost ~]# date '+%c' --date 08:45:00 2012年12月08日 星期六 08时45分00秒[root@localhost ~]# date -d "nov 22" 2012年 11月 22日 星期四 00:00:00 CST [root@localhost ~]# date -d '2 weeks' 2012年 12月 22日 星期六 08:50:21 CST [root@localhost ~]# date -d 'next monday' 2012年 12月 10日 星期一 00:00:00 CST [root@localhost ~]# date -d next-day +%Y%m%d 20121209
[root@localhost ~]# date -d tomorrow +%Y%m%d 20121209
[root@localhost ~]# date -d last-day +%Y%m%d 20121207
[root@localhost ~]# date -d yesterday +%Y%m%d 20121207
[root@localhost ~]# date -d last-month +%Y%m 201211
[root@localhost ~]# date -d next-month +%Y%m 201301
[root@localhost ~]# date -d '30 days ago' 2012年 11月 08日 星期四 08:51:37 CST [root@localhost ~]# date -d '-100 days' 2012年 08月 30日 星期四 08:52:03 CST [root@localhost ~]# date -d 'dec 14 -2 weeks' 2012年 11月 30日 星期五 00:00:00 CST [root@localhost ~]# date -d '50 days' 2013年 01月 27日 星期日 08:52:27 CST root@localhost ~]# date '+%B %d' 十二月 08
[root@localhost ~]# date '+%T%n%D' 09:00:30 12/08/12
说明:
date 命令的另一个扩展是 -d 选项,该选项非常有用。使用这个功能强大的选项,通过将日期作为引号括起来的参数提供,您可以快速地查明一个特定的日期。-d 选项还可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。
具体说明如下:
date -d "nov 22" 今年的 11 月 22 日是星期三
date -d '2 weeks' 2周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上个月是几月)
date -d next-month +%Y%m(下个月是几月)
使用 ago 指令,您可以得到过去的日期:
date -d '30 days ago' (30天前的日期)
使用负数以得到相反的日期:
date -d 'dec 14 -2 weeks' (相对:dec 14这个日期的两周前的日期)
date -d '-100 days' (100天以前的日期)
date -d '50 days'(50天后的日期)