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天后的日期)

 

posted @ 2017-04-21 11:12  wade&luffy  阅读(568)  评论(0编辑  收藏  举报