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

     

  • 相关阅读:
    怎样为flash配置Alcon调试工具
    8.9Go简介
    8.14GO之条件语句
    8.10Go之基础语法
    8.11Java之数组知识回顾
    8.13Go之常量
    8.10Go执行流、编译、特点、转义字符
    8.14Go之运算符(Operator)
    8.14Java之使用HttpClient类通过POST方式上传文件
    8.10Go之语言数据类型
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/6742613.html
Copyright © 2020-2023  润新知