cut
cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 选项中的一个。
语法格式&常用选项
cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与 -d 一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。
-s :不显示无分隔符的行
--output-delimiter=STRING :使用 STRING作为输出分隔符, 默认以输出分隔符为输入分隔符
--help : 显示 帮助信息, 然后 结束
--version : 显示 版本信息, 然后 结束
范围说明
范围字符 | 含义说明 |
---|---|
m-n | m到n,闭区间 |
m | 与m-m等价 |
-n | 与1-n等价 |
m- | 与m-Max等价 |
举例cut -b 3 file1
输出file1文件中每行的第3个字节cut -c 5- file1
输出file1文件中每行的第5到最后的字符cut -f 2 -d ‘;‘ file1
输出file1文件中每行的由 ; 分隔的第2个字段,默认值分隔符是制表符(Tab)
备注
cut的分隔只能处理单个字符分隔的情况,不能处理多个空格或空白的分隔。
xargs
xargs读入标准输入,按空白(空格、Tab或换行)分割,转化为command命令的参数,然后执行command命令。
xargs的默认command是echo,默认替换符号是{}。
command中不使用{}时,默认会把转换后的参数添加到command命令的末尾。
xargs与管道的区别
kill、rm等命令不会从标准输入中读取参数,cat、grep等命令会优先从命令行参数中读取参数,
为了解决上述问题,可以通过xargs把标准输入中的内容转化为命令行参数。
管道是把左侧命令的标准输出中的内容拷贝到右侧命令的标准输入中。
语法格式
xargs [-options] [command]
常用选项
-d 指定分隔符,用于把标准输入分割成若干个参数
-p 暂停执行command,输出要执行的完整命令,并询问是否执行,输入y后继续执行,输入n后不执行。
-t 打印出最终要执行的命令,然后直接执行,不需要用户确认
-n 表示每次传递给command的参数的最大个数,如果超过最大个数,就分次执行。
-E 指定结束字符串,即xargs只传递结束字符串之前的参数
-0 指定分隔符为null(‘\0‘),配合find命令使用
-I 指定替换符号,比如[],使用-I后会分次(逐个参数)执行
-i 等同于-I {},强烈不建议使用
find . -name "*.txt" -print0 | xargs -0 echo
-L 如果标准输入中有多行内容,此参数指定每次输出的最大行数
举例lseventlog |grep alert|awk ‘{print $1}‘|xargs -I{} mcsop cheventlog -fix {}
修复全部告警
nohup
不挂断地执行命令。
用户终端登录后,Linux会给用户分配一个session。
在终端中,按Ctrl+C会发送SIGINT信号,默认情况下会终止前台进程。
关闭或退出终端窗口后,会发送SIGHUP信号,默认情况下会终止session中的全部进程。
使用 & 可以将程序置于后台,可以使用jobs命令查看当前session中的后台进程。
后台进程,不会受到SIGINT信号的影响,可以持续运行。
nohup执行的命令,不会受到SIGHUP信号的影响,
即关闭或退出终端窗口后,进程也继续运行,可以通过ps命令确认。
通常将nohup和&组合使用,例如
nohup ./ccu_upgrade -o v35117 -v v5056 > ./ccu.log 2>&1 &
jobs & Ctrl+z fg bg kill
& 将进程置于后台,状态维持Running
Ctrl+z 暂停前台进程,并置于后台,状态是Stopped
fg %x 将后台进程置于前台,x为作业号
bg %x 将后台停止的进程启动,状态是Running
kill -stop X 停止PID为X的后台进程,状态是Stopped
kill -stop %x 停止作业号为x的后台进程,状态是Stopped
jobs 查询后台进程信息,后台进程状态有Running Stopped Done Terminated。
Running表示正在运行,
Stopped表示停止运行,
Done表示正常运行终止,
Terminated表示通过kill终止。
+表示当前作业,-表示下一个作业,[x]表示作业号
-l显示PID和作业号
> jobs只显示当前终端的session中的后台进程
kill
kill 通过发送信号到进程,使进程退出(即杀死进程)
-l 列出全部信号
-u 指定用户
kill XX
给PID为XX的进程发送TERM(15)信号,进程捕获该信号,清理资源,退出。
注意的是,进程也可以不处理该信号,取决于进程的实现。
kill -9 XX
强制杀死PID为XX的进程。
kill -u user1
杀死用户user1的全部进程。
常见信号
信号名 | 信号值 | 含义 |
---|---|---|
HUP | 1 | 终端挂断 |
INT | 2 | 中断,即键盘Ctrl+c |
QUIT | 3 | 退出,即键盘Ctrl+\ |
KILL | 9 | 强制终止 |
TERM | 15 | 终止 |
CONT | 18 | 继续,jobs作业控制 |
STOP | 19 | 停止,jobs作业控制 |
at
在指定的时间运行任务,需要atd服务已启动。
at命令添加的任务对应的执行文件都在/var/spool/at目录下。
命令格式:
at 参数 时间
常用参数:
-V 打印版本号
-m 将任务的输出通过邮件发送给用户,邮件位置为/var/spool/mail/用户名
-v 显示任务将被执行的时间点
-c 打印任务的内容
-q 使用指定队列,at默认使用a队列,共有a-zA-Z共52个队列
-f 从指定文件读入任务而不是从标准输入读入
-l 列出全部任务(等同atq)
-r 删除某个任务(等同atrm)
-d 删除某个任务(等同atrm)
时间点有两种,绝对时间和相对时间。
at允许复杂的时间规范,扩展POSIX.2标准。它接受HH:MM形式的时间在一天的特定时间允许一项工作。如果时间已经过去,则假定是第二天。你也可以指定midnight午夜、noon中午或teatime下午茶时间(4PM),并且你可以使用AM、PM来表达允许时间的上午和下午。你还可以表明作业在哪一天运行,通过给出一个形式上有月份名称和任意的年份的日期,或给出形式为MMDDYY、MM/DD/YY、DD.MM.YY、YYYY-MM-DD的日期。日期规格必须遵循一天的时间规格。你也可以给出now + count time-units(时间单位)的时间,时间单位可以是minutes(分钟)、hours(小时)、days(天)或weeks(星期),并且你能通过添加today或tomorrow后缀来告诉at命令今天或明天运行作业。
示例:
at 20:00 2018-10-1 在具体时间执行
at now +10min 在十分钟后执行
at 17:00 tomorrow 明天下午五点执行
at 6:00 pm + 3 days 在3天后下午6点执行
at 23:00 < a.txt 将a.txt导入
注:通过标准输入录入任务时,通过Ctrl+d终止输入
date
显示与设置系统日期时间。
在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。
命令格式:
date 选项 参数
显示:
不带参数,直接输入命令,显示日期、时间。
-R 显示带时区的日期、时间
-d "字符串" 显示字符串所指的日期、时间,比如:date -d "+1 day"
-u 显示GMT时间
+格式 显示特定格式的日期、时间
%H 小时,24小时制(00~23)
%I 小时,12小时制(01~12)
%k 小时,24小时制(0~23)
%l 小时,12小时制(1~12)
%M 分钟(00~59)
%p 显示出AM或PM
%r 显示时间,12小时制(hh:mm:ss %p)
%s 从1970年1月1日00:00:00到目前经历的秒数
%S 显示秒(00~59)
%T 显示时间,24小时制(hh:mm:ss)
%X 显示时间的格式(%H:%M:%S)
%Z 显示时区,日期域(CST)
%a 星期的简称(Sun~Sat)
%A 星期的全称(Sunday~Saturday)
%h,%b 月的简称(Jan~Dec)
%B 月的全称(January~December)
%c 日期和时间(Tue Nov 20 14:12:58 2012)
%d 一个月的第几天(01~31)
%x,%D 日期(mm/dd/yy)
%j 一年的第几天(001~366)
%m 月份(01~12)
%w 一个星期的第几天(0代表星期天)
%W 一年的第几个星期(00~53,星期一为第一天)
%y 年的最后两个数字(1999则是99)
设置:
-s 设置日期、时间,如下示例:
date -s 20120523 //设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" //这样可以设置全部时间
date -s "01:01:01 20120523" //这样可以设置全部时间
date -s "2012-05-23 01:01:01" //这样可以设置全部时间
date -s "20120523 01:01:01" //这样可以设置全部时间
补充:
hwclock 显示硬件时间,即RTC时间
使用hwclock -w
将硬件时间设置为系统时间
使用hwclock -s
将系统时间设置为硬件时间
awk
命令格式
awk [options] ‘program‘ var=value file(s)
awk [options] -f progfile var=value file(s)
常用参数
-F fs 指定输入field分隔符,可以是字符串或正则表达式,示例:-F: -F ":"
-v var=value 给变量赋值,此处定义的用户变量是在程序执行前,对BEGIN语句有效
-f progfile 指定从文件中读取awk程序,可以使用多个-f参数
工作原理
awk从指定文件、标准输入或管道读入文本,按照RS(默认为换行符)拆分为记录,然后逐个记录(默认就是逐行)处理。对每个记录,awk按照FS(默认为空格和Tab)拆分为Field,并指定给内建变量,其中$0表示当前记录,$1表示第一个field,$n表示第n个field, $NF表示最后一个field。
awk遵循‘pattern {action}‘的方式处理:
对pattern匹配的记录或field,执行action语句,action语句必须放在{}中。
pattern
BEGIN
END
BEGINFILE
ENDFILE
/regular expression/
relational expression
pattern && pattern
pattern || pattern
pattern ? pattern : pattern
(pattern)
! pattern
pattern1, pattern2
两个特殊模式:BEGIN和END。
BEGIN表示前置处理。一般用来打印表头等等。
END表示后置处理。一般用来汇总统计数据等等。
/regular expression/
判断当前记录是否与/regular expression/匹配,如果匹配就执行后续的awk语句
指定匹配模式:~ /XXX/ !~ /XXX/
判断变量是否与指定模式匹配,对满足匹配的记录执行后续处理
逻辑关系模式:> >= < <= == != && ||
判断变量是否满足逻辑关系,对满足的记录执行后续处理
pattern1, pattern2
指定纪录范围,从匹配pattern1的记录开始, 到匹配pattern2的记录结束
action
awk支持编程,语法与C相近,在action中可以使用awk的变量、数组、表达式、控制结构、内置函数、自定义函数等各种强大的功能。action默认的命令是print当前记录。
内建变量
名称 | 含义 |
---|---|
$0 | 当前记录(这个变量中存放着整个行的内容) |
$1~$n | 当前记录的第n个字段,字段间由FS分隔 |
FS | 输入字段分隔符 默认是空格或Tab |
NF | 当前记录中的字段个数,就是有多少列 |
NR | 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。 |
FNR | 当前记录数,与NR不同的是,这个值会是各个文件自己的行号 |
RS | 输入的记录分隔符, 默认为换行符 |
OFS | 输出字段分隔符, 默认也是空格 |
ORS | 输出的记录分隔符,默认为换行符 |
ARGV | 命令行参数数组。从0开始计数直到ARGC-1 |
ARGC | ARGV数组元素的个数 |
FILENAME | 当前输入文件的名字 |
OFMT | printf输出数值转换成字符串输出时的格式。默认为"%.6g" |
CONVFMT | printf输出数值转换成字符串输出时的格式。会被OFMT覆盖。默认为"%.6g" |
RLENGTH | 被match函数匹配的字符串的长度 |
RSTART | 被match函数匹配的字符串的开始位置 |
SUBSEP | 下标分隔符。默认为"\034",ASCII中034代表的是双引号‘"‘ |
数组
awk的数组是关联数组,索引是字符串,类似Python等语言的字典、Tcl语言的数组。
数组格式:array_name[index]
数组赋值:array_name[1]=value1
引用数组:array_name[1]
需要注意的是,关联数组的index如果不是数值则必须使用双引号包围,例如array_name["ma"],如果写成array_name[ma],则表示使用变量"ma"的值作为index。若ma变量未定义,则这会定义一个新的数组元素array_name[""]
使用index in array_name的方式可以判断数组array_name中是否有index下标对应的数组元素。如果有,它会返回1,否则返回0。所以判断语句可以如下:
if ( "ma" in array_name )
for循环的一种变体:
for (i in array_name){
do something about array_name[i]
}
可以用于遍历数组,其中变量"i"是遍历数组时的index,array_name是数组名。这是以遍历index的方式遍历数组。由于index的顺序随机,所以遍历时顺序也是随机的。
使用delete语句可以删除数组中的元素或者删除整个数组。如下:
delete array_name["ma"] # 删除array_name中下标为ma的元素
delete array_name # 删除数组array_name
操作符
级别运算符说明
| 级别 | 运算符 | 说明 |
| -- | -- | -- |
| 1 | =,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>= | 赋值、运算赋值 |
| 2 | || | 逻辑或 |
| 3 | && | 逻辑与 |
| 4 | | | 按位或 |
| 5 | ^ | 按位异或 |
| 6 | & | 按位与 |
| 7 | ==,!= | 等于、不等于 |
| 8 | <=,>=,<,> | 小于等于、大于等于、小于、大于 |
| 9 | <<,>> | 按位左移、按位右移 |
| 10 | +,- | 加、减 |
| 11 | *,/,% | 乘、除、取模 |
| 12 | !,~ | 逻辑非、按位取反或补码 |
| 13 | -,+ | 正、负 |
注:级别越高,优先级越高
控制语句
if (expression) statements
if (expression) statements else statements
while (expression) statements
for (expression; expression; expression) statements
for (expression in array) statements
do statements while (expression)
break:退出循环。
continue:退出当前循环,进入下一个循环
next:读入下一记录,awk程序的顶端从头开始。这个awk程序是PATTERN{action}这部分,不包括BEGIN{action}。
exit code:直接进入END,若本就在END中,则直接退出awk。如果END中的exit没有定义code,则采用前一个exit的code。
输入
getline函数用于从文件、标准输入或管道中读取数据,并按情况设置变量的值。
getline:会从主输入文件中读取记录。会同时设置$0,NF,NR,FNR。
getline var:会从主输入文件中读取记录,并将读取的记录赋值给变量var。会同时设置var,NR,FNR。
getline < file:从外部文件file中读取记录。同时会设置$0,NF。
getline var < file:从外部文件file中读取记录,并将读取的记录赋值给变量var。会同时设置var。
cmd | getline:从管道中读取记录。会同时设置$0,NF。
cmd | getline var:从管道中读取记录,并将读取的记录赋值给变量var。会同时设置var。
输出
awk使用print和printf输出数据,不仅可以输出到标准输出中,还可以重定向到文件中,或使用管道传递给另一个命令。
print
将$0打印到标准输出,等价于print $0。
print expression, expression, …
打印各个 expression, expression 之间由 OFS 分开, 由 ORS 终止
print expression,expression,… > filename
文件名filename必须使用双引号包围,否则被当作变量。且文件只会被打开一次。
print expression,expression,… >> filename
print expression,expression,… | command
将数据传递给系统命令。命令需要使用双引号包围。
close(filename), close(command)
断开 print/printf 与 filename (或 command) 之间的连接
printf
printf(format,expression,expression,…)
printf(format,expression,expression,…) > filename
printf(format,expression,expression,…) >> filename
printf(format,expression,expression,…) | command
格式说明符"%"后可跟以下几个常见字符:
格式符:
%d,%i:十进制整数;
%f:显示浮点数;
%s:显示字符串;
%u:无符号整数;
%%:显示%自身。
修饰符:
N:显示宽度;N为数值,宽度不足时若为左对齐则右边空格补足,若右对齐则左边空格补足。
-:左对齐;
+:显示数值正负号。
0:表示以0填充。
内置函数
算术函数:
函数名 | 含义 |
---|---|
cos(x) | 取x的余弦。 |
sin(x) | 取x的正弦。 |
sqrt(x) | 取x的平方根。 |
rand() | 返回一个随机数r,其中0<=r<1。 |
srand(x) | 设置rand()的种子值为x。种子值相同时,rand()的结果相同。可print srand()输出当前种子值。 |
int(x) | 取x的整数部分。 |
字符串函数:
函数名 | 含义 |
---|---|
index(str1,str2) | 返回子串str2在字符串str1中第一次出现的位置。如果没有指定str1,则返回0。 |
length(str1) | 返回字符串str1的长度。如果未给定str1,则表示计算"$0"的长度。 |
substr(str1,p) | 返回str1中从p位置开始的后缀字符串。 |
substr(str1,p,n) | 返回str1中从p位置开始,长度为n的子串。 |
match(str1,regexp) | 如果regexp能匹配str1,则返回匹配起始位置。否则返回0。它会设置内置变量RSTART和RLENGTH的值。 |
split(str1,array,sep) | 使用字段分隔符sep将str1分割到数组array中,并返回数组的元素个数。如果未指定sep则采用FS的值。因此该函数用于切分字段到数组中,下标从1开始。 |
sprintf(fmt,expr) | 根据printf的格式fmt,返回格式化后的expr。 |
sub(regexp,rep,str2) | 将str2中第一个被regexp匹配的字符串替换成rep,替换成功则返回1(表示替换了1次),否则返回0。注意是贪婪匹配。 |
sub(regexp,rep) | 将"$0"中第一个被regexp匹配的字符串替换成rep,替换成功则返回1,否则返回0。注意是贪婪匹配。 |
gsub(regexp,rep,str2) | 将str2中所有被regexp匹配的内容替换成rep,并返回替换的次数。 |
gsub(regexp,rep) | 将"$0"中所有被regexp匹配的内容替换成rep,并返回替换的次数。 |
toupper(str) | 将str转换成大写字母,并返回新串。 |
tolower(str) | 将str转换成小写字母,并返回新串。 |
自定义函数
function name(parameter-list) {
statements
}
应用示例
[16:53:19] newinstall:~ # lsfeature |grep "\bactive\b" |awk ‘{print "${" toupper($2) "_LICENSEKEY}" "\t" $4}‘
${IN_TIER_LICENSEKEY} B366-A786-CFD6-9CA0
${REMOTE_COPY_LICENSEKEY} 01B4-9CF5-45D2-4F47
${EXT_VIRTUALIZATION_LICENSEKEY} ABA3-7B97-843F-FEDF
${IN_FLASH_CACHE_LICENSEKEY} CFA9-1A95-4546-D322
${NAS_LICENSEKEY} 9D3E-F603-D469-0438
${MEM_SIZE32_LICENSEKEY} 979F-F953-2C7E-7B32
time
用来测量命令或程序的运行时间。
命令格式:
time command
real是指命令或程序从开始到结束的时间,单位是秒,包括用户程序在用户态的执行时间,用户程序进入内核态的执行时间,还有因为CPU时间片调度未到或IO阻塞的等待时间等全部时间。
user是指用户程序在用户态的执行时间,单位是秒。
sys是指用户程序进入内核态的执行时间,单位是秒。
除了shell内置的time命令外,有些发行版本上带有一个外部的time工具,一般是在/usr/bin/time。该工具具有更多的选项,功能更强大。
正则表达式(BRE)和扩展正则表达式(ERE)
许多命令行工具和大多数编程语言都支持正则表达式。
正则表达式是一种符号表示法,用于文本匹配和识别。
Linux及类Unix系统中“传统的”命令行工具,如grep、sed等,使用的是符合POSIX标准的正则表达式,而编程语言中的正则表达式要更复杂,可以支持更多的表示字符。
literal character 字面字符,只与自身匹配
元字符:
^ $ . [ ] { } - ? * + ( ) | \ < > 等
注意:反斜杠可以创建元序列,以及用来对元字符转义,使其成为字面字符。
BRE:
元素匹配:
. 任意单个字符,不包括换行
[] 匹配指定字符集中的单个字符,其中包含元字符时不需要添加\,开头的^表示否定,-表示范围
次数匹配:
- 匹配前面的元素任意次,包括0次
{m} 匹配前面的元素m次
{m,n} 匹配前面的元素至少m次,至多n次,闭区间
{m,} 匹配前面的元素至少m次
{,n} 匹配前面的元素至多n次,GUN扩展
? 匹配前面的元素0或1次
+ 匹配前面的元素1次或多次
位置匹配:
^ 位置锚定,锚定在行首
$ 位置锚定,锚定在行尾
\b或< 锚定在单词词首
\b或> 锚定在单词词尾
\B 与\b作用相反
分组与引用:
(string) 将string分组,作为1个整体,并且可以在后边引用
\1 引用第1个左括号及其对应的右括号所匹配的内容
\2 引用第2个左括号及其对应的右括号所匹配的内容
\n 引用第n个左括号及其对应的右括号所匹配的内容
ERE:
相比BRE新增了 |
| 或,匹配|左右两边的元素的其中之一,与其他元字符组合时一般与()配合使用
{m,n} 指定次数匹配,去掉了
(string) 分组及引用,去掉了
? 匹配0次或1次,去掉了\
- 匹配1次或多次,去掉了\
expect
programmed dialogue with interactive programs。
expect是基于tcl的工具,根据脚本与交互式程序“talk“,实现自动化操作。
安装
依赖:
安装tcl解释器
在REHL系列上:yum install expect -y
在Debian系列上;apt install expect
expect的命令
spawn 启动新的进程,并监视输出
示例1,启动ssh-keygen命令
spawn ssh-keygen -t rsa
新进程的描述符ID保存在变量$spawn_id中
expect 从进程接收输出 && send 向进程发送字符串
示例1,
expect "*yes/no"
send "yes\r"
注:这里"\r"表示回车
示例2,类似switch-case结构
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*assword:" { send "$pwd\r" }
}
注:exp_continue表示继续下一个case,而不是退出该switch-case结构。
示例3,接收进程退出信号
expect eof
一般情况下,新建进程并进行若干expect-send处理后,expect eof和interact必有其一,以结束该进程的处理。
interact 返回用户交互
将控制权还给用户,以便用户继续与当前的新建进程继续交互。
set timeout xx
设置后续的expect命令的等待超时时间为xx秒。set timeout -1
设置永不超时
用到的tcl命令
set 设置变量值
set host [ lindex $argv 0 ]
[lindex $argv 0] 获取expect脚本的第1个参数
puts 输出信息
puts stderr "Usage:xxx"
exit 退出
exit 1
命令行格式及选项
expect [ -dDinN ] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
嵌入到sh脚本中
1、shell中使用expect -c "expect脚本内容"来完成嵌套。
注意:
expect脚本里面的 " 都需要在前面加上转义符号;
每个expect语句后面加上分号";"。
2、使用expect << EOF
expect << EOF
expect脚本内容
EOF
3、使用 expect 脚本.exp (优先推荐该方式!)
调用非交互的sh命令
exec sh -c {rm -rf ~/.ssh/known_hosts}
dd
生成一个1Gib 的文件,内容全部为0
dd if=/dev/zero of=zeroFile bs=1M count=1000
生产一个1G 的文件,内容随机
dd if=/dev/urandom of=randomFile bs=1M count=1000
sort
sort读取文件或标准输入,按行排序后,输出到标准输出。
man:
sort lines of text files。
info:
‘sort‘ sorts, merges, or compares all the lines from the given files, or
standard input if none are given or for a FILE of ‘-‘. By default,
‘sort‘ writes the results to standard output.
语法格式
sort [OPTION]... [FILE]...
常用选项
-b, --ignore-leading-blanks 忽略前导的空白
-d, --dictionary-order 只考虑英文字母、数字及空格,忽略其他的字符
-f, --ignore-case 忽略字母大小写
-g, --general-numeric-sort 按照常规数值排序
-i, --ignore-nonprinting 只考虑可打印字符
-M, --month-sort 依照月份的缩写进行排序,`JAN‘ < ... < `DEC‘
-h, --human-numeric-sort 使用易读性数字(例如: 2K 1G)
-n, --numeric-sort 根据字符串数值比较
-R, --random-sort 根据随机hash 排序
-r, --reverse 逆序输出排序结果,默认为升序
-V, --version-sort 按版本排序
-c, --check, --check=diagnose-first 检查输入是否已排序,若否,返回1,以及第一个out-of-order的行
-C, --check=quiet, --check=silent 类似-c,但不报告第一个无序行
-k, --key=字段1[,字段2] 在字段1开始一个key,在字段2终止(默认为行尾)
-m, --merge 合并已排序的文件,不再进行排序
-o, --output=文件 将结果写入到文件而非标准输出
-s, --stable 禁用last-resort 比较以稳定比较算法
-t, --field-separator=分隔符 指定字段分隔符
-u, --unique 去除重复行
k 的语法格式
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
这个语法格式可以被其中的逗号”,”分为两大部分,Start部分和End部分
Start和End部分都由三部分组成,其中的Modifier部分就是类似n和r的选项部分,可省略
FStart、Fend,表示使用的域,而CStart则表示在FStart域中从第几个字符开始算"排序首字符",同理,CEnd表示结尾的第几个字符是排序末尾字符,.CStart、.CEnd是可以省略的,分别表示从本域的开头部分开始、到本域的域尾结束,CEnd设定为0,也是表示结尾到域尾。
注意点:
- sort默认是升序排列,使用
-r
选项后为降序排列。 - 可以使用
-o
选项把排序后的内容输出覆盖原文件。
last
命令格式:last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]
last作用是显示近期用户或终端的登录情况。通过last命令查看该程序的log,管理员可以获知谁曾经或者企图连接系统。
执行last命令时,它会读取/var/log目录下名称为wtmp的文件,并把该文件记录的登录系统或终端的用户名单全部显示出来。默认显示wtmp的记录,btmp能显示的更详细,可以显示远程登录,例如ssh登录。
blast使用btmp日志文件。
常用选项
-num |-n num指定输出记录的条数
-f file 指定记录文件作为查询的log文件
-t YYYYMMDDHHMMSS 显示指定时间之前的登录情况
username 账户名称
tty 终端机编号
-R 不显示登录系统或终端的主机名称或IP
-a 将登录系统或终端的主机名过IP地址显示在最后一行
-d 将IP地址转成主机名称
-I 显示特定IP登录情况。
-o 读取有linux-libc5应用编写的旧类型wtmp文件
-x 显示系统关闭、用户登录和退出的历史
-F 显示登录的完整时间
-w 在输出中显示完整的用户名或域名
输出信息
第一列:用户名
第二列:终端位置(pts/0伪终端,意味着从SSH或telnet等工具远程连接的用户,图形界面终端归于此类。tty0直接连接到计算机或本地连接的用户。后面的数字代表连接编号)
第三列:登录IP或内核(如果是:0.0或者什么都没有,意味着用户通过本地终端连接。除了重启活动,内核版本会显示在状态中)
第四列:开始时间
第五列:结束时间(still login in尚未退出,down直到正常关机,crash直到强制关机)
第六列:持续时间
示例
-
指定显示数量(最后登录的数量)
last -10
-
指定查询的文件 btmp,默认是wtmp
last -10 -f /var/log/btmp
-
显示指定时间之前的记录
last -10 -t 20180425000000