last命令用于显示用户最近登录信息。单独执行last命令,它会读取/var/log/wtmp的文件,并把该文件中记录的登入系统的用户名单全部显示出来
语法
last (选项)(参数)
选项
-a : 把从何处登入系统的主机名称或IP地址,显示在最后一行
-d : 将IP地址转换成主机名称
-f <记录文件>:指定记录文件
-n <显示列数>或-<显示列数> : 设置列出名单的显示列数
-R :不显示登入系统的主机名称或IP地址
-x :显示系统关机,重新开机,以及执行等级的改变等信息
参数
用户名 : 显示用户登录列表
终端 : 显示从指定终端的登录列表
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同的版本:awk、nawk和gawk,未做特殊说明,一般指gawk,这个是AWK的GNU版本
语法:
awk '{pattern + action}' {filenames}
其中pattern表示AWK在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令,花括号{}不需要在程序中出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能局势在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
入门例子:
输入last -n -5后输出如下:
root@yushan-virtual-machine:~# last -n 5
yushan pts/20 218.241.251.145 Sat Aug 5 16:38 still logged in
yushan pts/20 218.241.251.145 Sat Aug 5 16:28 - 16:38 (00:09)
yushan pts/11 218.241.251.145 Sat Aug 5 16:22 still logged in
yushan pts/9 218.241.251.145 Sat Aug 5 15:49 still logged in
yushan pts/9 114.255.40.54 Fri Aug 4 21:03 - 00:03 (02:59)
如果只是显示最近登录的5个账号
root@yushan-virtual-machine:~# last -n 5 | awk '{print $1}'
yushan
yushan
yushan
yushan
yushan
awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是“空白键”或“[tab]键”,所以$1表示登录用户,$3表示登录用户IP,以此类推。
只显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
root@yushan-virtual-machine:~# cat /etc/passwd |awk -F':' '{print $1"\t"$7}'
root /bin/bash
daemon /usr/sbin/nologin
bin /usr/sbin/nologin
sys /usr/sbin/nologin
sync /bin/sync
-F 指定域分隔符为’:’
只显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name, shell,在最后一行添加“blue, /bin/nosh”
root@yushan-virtual-machine:~# cat /etc/passwd |awk -F':' 'BEGIN{print "name, shell"} {print $1","$7} END{print "blue, /bin/nosh"}'
name, shell
root,/bin/bash
daemon,/usr/sbin/nologin
bin,/usr/sbin/nologin
sys,/usr/sbin/nologin
....
blue, /bin/nosh
awk工作流程是这样的:先执行BEGIN,然后读取文件,读入有\n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录……直到所有的记录都读完,最后执行END操作。
搜索/etc/passwd有root关键字的所有行
root@yushan-virtual-machine:~# awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)
….待补充…..
cat命令主要用来查看文件内容,创建文件,文件合并,追加文件内容等功能。
查看文件内容主要用法:
1、cat f1.txt,查看f1.txt文件的内容。
2、cat -n f1.txt,查看f1.txt文件的内容,并且由1开始对所有输出行进行编号。
3、cat -b f1.txt,查看f1.txt文件的内容,用法与-n相似,只不过对于空白行不编号。
4、cat -s f1.txt,当遇到有连续两行或两行以上的空白行,就代换为一行的空白行。
5、cat -e f1.txt,在输出内容的每一行后面加一个$符号。
6、cat f1.txt f2.txt,同时显示f1.txt和f2.txt文件内容,注意文件名之间以空格分隔,而不是逗号。
7、cat -n f1.txt>f2.txt,对f1.txt文件中每一行加上行号后然后写入到f2.txt中,会覆盖原来的内容,文件不存在则创建它。
8、cat -n f1.txt>>f2.txt,对f1.txt文件中每一行加上行号后然后追加到f2.txt中去,不会覆盖原来的内容,文件不存在则创建它。
例子:
root@yushan-virtual-machine:/home/jqw/workspace# cat hello.cpp
#include
using namespace std;
int main(){
int *p = NULL;
cout<<*p<return 0;
}
root@yushan-virtual-machine:/home/jqw/workspace# cat -n hello.cpp
1 #include
2 using namespace std;
3 int main(){
4 int *p = NULL;
5 cout<<*p<6 return 0;
7 }
root@yushan-virtual-machine:/home/jqw/workspace#
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面是top命令的部分截图:
分析:
(1)第1行分别显示:系统当前时间、系统运行时间、当前用户登录数和系统负载。
系统负载有3个数值,分别是系统最近1min、5min、15min的平均负载。一般对于单个处理器来说,负载在0~1.00是正常的,超过1.00就要引起注意了。在多核处理器中,系统均值不应该高于处理器核心的总数。
(2)第2行分别显示:total(进程总数)、running(正在运行的进程数)、sleeping(睡眠的进程数)、stopped(停止的进程数)和zombie(僵尸进程数)
(3)第3行分别显示:%us(用户空间占用CPU百分比)、%sy(内核空间占用CPU百分比)、%ni(用户进程空间内改变过优先级的进程占用CPU百分比)、%id(空闲CPU百分比)、%wa(等待输入输出(I/O)的CPU时间百分比)、%hi(CPU处理硬件中断的时间)、%si(CPU处理软中断的时间)、%st(用于有虚拟CPU的情况)。通常id%值可以反映一个系统CPU的闲忙程度。
(4)第4行显示内存MEM的数据:total(物理内存总量)、used(使用的物理内存总量)、free(空闲内存总量)、buffers(用作内核缓存的内存量)。
(5)第5行则显示交换器SWAP的数据:total(交换区总量)、used(使用的交换区总量)、free(空闲交换区总量)、cached(缓冲的交换区总量)。
(6)第6行则显示PID(进程号)、USER(运行用户)、PR(优先级)、NI(任务nice值)、VIRT(虚拟内存用量)VITR=SWAP+RES、RES(物理内存用量)、SHR(共享内存用量)、S(进程状态)、%CPU(CPU占用比)、%MEM(物理内存占用比)、TIME+(累计CPU占用时间)、COMMAND命令名/命令行
buffers和cached的区别:
buffers指的是块设备的读写缓冲区,cached指的是文件系统本身的页面缓存。它们都是Linux操作系统底层的机制,目的就是为了加速对磁盘的访问。
总结:
top命令显示系统当前的进程和其他状况,top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。
top命令提供了实时地对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序。输入“q”,则退出top命令。
Linux中的ps(process status)命令列出的是当前在运行的进程的快照,就是执行ps命令的那个时刻的那些进程。ps命令提供进程的一次性的查看,它提供的查看结果并不动态连续,如果想要对进程时间监控,动态地显示进程信息,应该使用top命令。
(1)显示指定用户信息
命令:ps -u username
(2)显示所有进程信息,连同命令行
命令:ps -ef
(3)ps与grep常用组合用法,查找特定进程
命令:ps -ef | grep yushan
(4)将目前登入的PID与相关信息列示出来
命令:ps -l
各相关信息的意义如下所述:
(1)F代表这个程序的旗标(flag),4代表使用者为super user
(2)S代表这个程序的状态(STAT)
(3)UID程序被该UID所拥有
(4)PID就是这个程序的进程id
(5)PPID则是其父进程的进程id
(6)C是使用的CPU资源百分比
(7)PRI是Priority(优先执行序)的缩写
(8)NI是Nice值
(9)ADDR是Kernel function,指出该程序在内存的那个部分。如果是running的程序,一般就是“-”
(10)SZ使用掉的内存大小
(11)WCHAN目前这个程序是否正在运行当中,若为-表示正在运作
(12)TTY登入者的终端机位置
(13)TIME使用掉的CPU时间
(14)CMD所下达的指令内容。
(5)列出目前所有的正在内存当中的程序
各参数含义说明:
(1)USER:该进程属于哪个使用者账号
(2)PID:进程id
(3)%CPU:该进程使用掉的CPU资源百分比
(4)%MEM:该进程所占用的物理内存百分比
(5)VSZ:该进程使用掉的虚拟内存量(KBytes)
(6)RSS:该进程占用的固定的内存量(KBytes)
(7)TTY:该进程是在哪个终端机上面运作,若与终端机无关,则显示“?”,另外,tty1-tty6是本机上面的登入者程序,若为pts/0等,则表示为由网络连接进主机的程序。
(8)STAT:该程序目前的状态。主要有以下几种
R:该程序目前正在运行,或者是可被运行
S:该程序目前正在睡眠当中(可说是idle状态),但可被某些信号(signal)唤醒。
T:该程序目前正在侦测或者是停止了
Z:该程序应该已经终止,但是其父程序却无法正常地终止它,造成zombie(僵死)程序的状态。
作用:显示文件内容,每次显示一屏
格式:more [选项] 文件
例子:more server.cpp
说明:该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今已显示的该文件的百分比:–更多–(37%)
下面是可以进行的一些操作:
(1)按space键,显示文本的下一屏内容。
(2)按enter键,只显示文本的下一行内容。
(3)按斜线符(|),接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
(4)按H键,显示帮助屏,该屏上有相关的帮助信息。
(5)按B键,显示上一屏内容。
(6)按Q键,退出more命令
常用选项:
-<数字>:这个选项指定每屏显示的行数,表示一屏显示多少行,例如:more -10 server.cpp。这样就会每屏只显示10行。
-d:在每屏的底部显示更友好的提示信息:–更多–(34%)[按空格键继续,“q”键退出。]
而且当用户按键时有错误,则显示[Press ’h’, for instructions.]信息,而不是简单的报警。
-c或-p:不滚屏,在显示下一屏之前先清屏
-s:将文件中连续的空白行压缩成一个空白行显示
+/:将选项后的模式(Pattern)指定显示每个文件之前进行搜索的字符串
+num,从行号num开始
例子:
(1)显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完整的百分比
# more -dc file
(2)显示文件file的内容,每10行显示一次,而且在显示之前先清屏
# more -c -10 file
more和less一般用于显示文件内容超过一屏的内容,并且提供翻页的功能。more比cat强大,提供分页显示的功能,less比more更强大,提供翻页,跳转,查找等命令。而且more和less都支持:用空格显示下一页,按键b显示上一页
作用:
less工具也是对文件或其他输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less的用法比起more更加的有弹性。在more的时候,我们并没有办法向前面翻,只能往后面看,但若使用了less时,就可以使用[pageup] [pagedown]等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容。除此之外,在less里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
**格式:**less [参数] 文件
命令参数:
-b <缓冲区大小>:设置缓冲区的大小
-e:当文件显示结束后,自动离开
-f: 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g:只标志最后搜索的关键词
-i:忽略搜索时的大小写
-m:显示类似more命令的百分比
-n:显示每行的行号
-o <文件名>:将less输出的内容在指定文件中保存起来
-s:显示连续空行为一行
操作:
b:向前翻一页
d:向后翻半页
h:显示帮助界面
q:退出less命令
u:向前滚动半页
y:向前滚动一行
空格键:滚动一页
回车键:滚动一行
面试题:Ubuntu系统常用的文件系统类型是什么?
Linux常见的文件系统有:JFS、 ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、 SMB、SysV、PROC等
可以通过df进行查看
root@yushan-virtual-machine:~# df -T -h
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda1 ext4 20G 8.5G 11G 46% /
none tmpfs 4.0K 0 4.0K 0% /sys/fs/cgroup
udev devtmpfs 15G 8.0K 15G 1% /dev
tmpfs tmpfs 3.0G 956K 3.0G 1% /run
none tmpfs 5.0M 0 5.0M 0% /run/lock
none tmpfs 15G 152K 15G 1% /run/shm
none tmpfs 100M 56K 100M 1% /run/user
/dev/sda2 ext4 69G 8.8G 57G 14% /data
查看分区可用空间的命令是df
root@yushan-virtual-machine:~# df
文件系统 1K-blocks 已用 可用 已用% 挂载点
/dev/sda1 20511356 8834652 10611744 46% /
none 4 0 4 0% /sys/fs/cgroup
udev 15431448 8 15431440 1% /dev
tmpfs 3088448 956 3087492 1% /run
none 5120 0 5120 0% /run/lock
none 15442228 152 15442076 1% /run/shm
none 102400 56 102344 1% /run/user
/dev/sda2 72115528 9218004 59211228 14% /data
下面是相关命令的解释:
df -hl 查看磁盘剩余空间
df -h 查看每个根路径的分区大小
du -sh [目录名] 返回该目录的大小
du -sm [文件夹] 返回该文件夹总M数
ps aux和ps -ef
两者的输出结果差别不大,但展示风格不同。aux是BSD风格,-ef是System V风格。这是次要的区别,一个影响使用的区别是aux会截断command列,而-ef不会。当结合grep时这种区别会影响到结果。
(1)命令行输入top回车,然后按下大写M按照memory排序,按下大写P按照CPU排序。
(2)ps aux | head -N
head:-N可以指定显示的行数,默认显示10行
ps:参数a指代all—所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分。
ps aux | sort -k4nr | head -N
sort -k4nr:k代表从根据哪一个关键词排序,后面的数字4表示按照第四列排序;n指代numberic sort根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。
root@yushan-virtual-machine:~# ps -aux | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 33920 3176 ? Ss 8月25 0:04 /sbin/init
root 2 0.0 0.0 0 0 ? S 8月25 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 8月25 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 8月25 0:00 [kworker/0:0]
root 5 0.0 0.0 0 0 ? S< 8月25 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 8月25 0:28 [rcu_sched]
root 8 0.0 0.0 0 0 ? S 8月25 0:04 [rcuos/0]
root 9 0.0 0.0 0 0 ? S 8月25 0:12 [rcuos/1]
root 10 0.0 0.0 0 0 ? S 8月25 0:06 [rcuos/2]
本例中,可以看到%MEM在第4个位置,所以是根据%MEM的数值进行从大到小的排序。-k3表示按照CPU占用率排序
列出所有端口:netstat -a
列出所有的TCP端口:netstat -at
列出所有的UDP端口:netstat -au
列出所有处于监听状态的socket:netstat -l
列出所有监听TCP端口的socket:netstat -lt
列出所有监听UDP端口的socket:netstat -lu
找出程序运行的端口:netstat -ap | grep ssh
找出运行在指定端口的进程:netstat -an | grep ‘:80’
linux如何显示一个文件的某几行(中间几行)
(1)从第3000行开始,显示1000行,即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000
(2)显示1000行到3000行
cat filename | head -n 3000 | tail -n +1000
tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行