linux重要命令

时间:2023-03-09 08:23:29
linux重要命令

echo

echo命令用于在终端显示字符串或输出变量提取后的值,格式为:“echo [字符串 | $变量]”。

将指定字符串输出到终端屏幕:

[root@linuxprobe ~]# echo Linuxprobe.Com
Linuxprobe.Com

使用$变量的方式提取变量值并输出到屏幕:

[root@linuxprobe ~]# echo $SHELL
/bin/bash

date命令用于显示及设置系统的时间或日期,格式为:"date [选项] [+指定的格式]"。

强大的date命令只需键入以"+"号开头的参数即可按照指定格式来输出系统的时间或日期,这样日常工作时我们便可以将打包数据的备份命令与指定格式输出的时间信息结合到一起,使得我们可以更加便捷的区分每个文件的备份时间啦,date命令常见的格式如下:

参数 作用
%t 跳格[TAB键]
%H 小时(00-23)
%I 小时(01-12)
%M 分钟(00-59)
%S 秒(00-60)
%X 相当于%H:%M:%S
%Z 显示时区
%p 显示本地AM或PM
%A 星期几 (Sunday-Saturday)
%a 星期几 (Sun-Sat)
%B 完整月份 (January-December)
%b 缩写月份 (Jan-Dec)
%d 日(01-31)
%j 一年中的第几天(001-366)
%m 月份(01-12)
%Y 完整的年份

按照默认的格式查看当前的系统时间:

[root@linuxprobe ~]# date
Mon Aug 24 16:11:23 CST 2016

按照"年-月-日 小时:分钟:秒"的格式查看当前的系统时间:

[root@linuxprobe ~]# date "+%Y-%m-%d %H:%M:%S"
2016-08-24 16:29:12

设置当前的系统时间为2016年9月1日8点30分:

[root@linuxprobe ~]# date -s "20160901 8:30:00"
Tue Sep 1 08:30:00 CST 2016

再次按照默认的格式查看当前的系统时间:

[root@linuxprobe ~]# date
Tue Sep 1 08:30:01 CST 2016

查看今天是一年中的第几天:

[root@linuxprobe ~]# date "+%j"
245

reboot命令用于重启系统,格式为:"reboot"。

重启计算机这种操作会涉及到对硬件资源的管理权限,因此默认只能使用root用户来重启您的电脑:

[root@linuxprobe ~]# reboot

poweroff命令用于关闭系统,格式为:"poweroff"。

关机命令也同理,默认只有root用户才可以关闭您的电脑:

[root@linuxprobe ~]# poweroff

wget命令用于在终端中下载网络文件,格式为:“wget [参数] 下载地址”。

参数 作用
-b 后台下载模式。
-O 下载到指定目录。
-t 最大尝试次数。
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等。
-r 递归下载

ps命令用于查看系统中的进程状态,格式为:“ps [参数]”,同样搭配的参数如下:

当您第一次执行这个命令时估计要惊呆下,这么多输出值怎么看的过来?其实平常我们会将ps命令与管道符来结合使用,用于来抓取到某个指定服务进程所对应的PID号码,而常见的ps命令参数包括有:

参数 作用
-a 显示所有的进程(包括其他用户的)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程

Linux系统中时刻运行着许许多多的进程,如果能够合理的管理它们,绝对有益于系统的性能优化,Linux系统中进程最常见的5种不同的状态是运行、中断、不可中断、僵死与停止,它们的特性分别是:

R(运行):正在运行或在运行队列中等待。

S(中断):休眠中, 在等待某个条件的形成或接受到信号。

D(不可中断):收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。

Z:(僵死):进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。

T:(停止):进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行。

当执行"ps aux"命令后通常会看到下面格式的进程状态,表格中只是列举了部分输出值,而且正常的输出值中不包括中文注释部分:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程的所有者 进程ID号 运算器占用率 内存占用率 虚拟内存使用量(单位是KB) 占用的固定内存量(单位是KB) 所在终端 进程状态 被启动的时间 实际使用CPU的时间 命令名称与参数
root 1 0.0 0.4 53684 7628 ? Ss 07:22 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 07:22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 07:22 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 07:22 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 07:22 0:00 [migration/0]

top命令用于动态的监视进程活动与系统负载等信息,格式为:“top”。

这个top命令可真的是太厉害了,完全可以比喻成是“强化版的Windows任务管理器”,运行界面如图2-5所示:

linux重要命令

前面的五行为系统整体的统计信息,下面我们来逐行的讲解:

图2-5 top命令的执行界面

1行:系统时间,运行时间,登陆用户数,系统负载(分别为1分钟、5分钟、15分钟的平均值)。

2行:进程总数,运行中的,睡眠中的,停止的,僵死的。

3行:用户占用资源,系统内核占用资源,改变过优先级的进程,空闲的资源,等待输入输出的时间。

此行数据均为CPU数据并以百分比格式显示,例如"99.2 id"意味着有99.2%的CPU资源正在空闲中。

4行:物理内存总量,使用量,空闲量,作为内核缓存的内存量。

5行:虚拟内存总量,使用量,空闲量,已被提前加载的内存数据。

pidof命令用于查询某个指定服务的进程PID号码值,格式为:“pidof [参数] [服务名称]”。
PID值是区别每个进程的号码,在不同的计算机上运行相同的服务程序都很少会获得同样值的PID号码,例如查询本机sshd服务程序的PID号码值:
[root@linuxprobe ~]# pidof sshd
2156
kill命令用于终止某个指定PID号码的进程,格式为:“kill [参数] [进程PID号]”。
我们来动手将上面pidof命令查询到的PID号码给终止掉吧,这边作用等同于将sshd服务强制停止。
[root@linuxprobe ~]# kill 2156
killall命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [进程名称]”。
一般大型软件的服务程序通常都会有数个进程协同为其提供服务,那么如果逐个去结束PID号码又实在麻烦,因此便可以使用killall命令来批量结束某个服务程序带有的全部进程,例如结束掉网络服务的全部进程,下面我们以httpd服务程序为例,默认您的RHEL7系统未安装它,所以此时只需看操作过程和结果即可:
[root@linuxprobe ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxprobe ~]# killall httpd
[root@linuxprobe ~]# pidof httpd
[root@linuxprobe ~]#
平时在系统终端中执行一个命令后如果想立即的停止它,您可以同时按下系统组合键"Ctrl+c",这样命令的进程将会立即被终止,是比较常用的方法之一。或者有些命令在执行时会不断的在屏幕上输出信息,影响到我们继续输入命令了,此时便可以在执行这条命令前,将这段命令的最后面添加个"&"符号,那么从一开始执行该命令就会是在后台执行。
2.4 系统状态检测命令
作为一名合格的运维人员,为了更好的了解我们的Linux服务器,您必须具备快速查看系统状态的能力,所以接下来我们会逐个来学习下对于网卡网络、系统内核、系统负载、内存使用情况、当前登陆用户、历史登陆记录、命令执行记录以及救援诊断命令的使用方法,都是超级实用的。
ifconfig用于获取网卡配置与网络状态等信息:格式为"ifconfig [网络设备] [参数]"。
查看本机当前的网卡配置与网络状态等信息,我们主要就是看每段开头的网卡名称、inet参数后面的IP地址、ether参数后面的物理mac地址以及RX、TX的接收与发送数据包的大小:
[root@linuxprobe ~]# ifconfig
eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.10 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fec4:a409 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:c4:a4:09 txqueuelen 1000 (Ethernet)
RX packets 36 bytes 3176 (3.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 38 bytes 4757 (4.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 386 bytes 32780 (32.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 386 bytes 32780 (32.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
uname命令用于查看系统内核与系统版本等信息,格式为:“uname [-a]”。
一般我们会固定搭配上-a参数来完整查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息:
[root@linuxprobe ~]# uname -a
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
顺便说下,如果您想查看系统详细版本信息就看redhat-release文件:
[root@linuxprobe ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
uptime命令用于查看系统的负载信息,格式为:“uptime”。
这个命令真的很棒,它可以为您显示当前系统时间、系统已运行时间、当前在线用户以及平均负载值等信息数据。平均负载值指的是最近1分钟、5分钟、15分钟的系统压力情况,负载值越低越好,尽量不要长期超过1。另外您还可以结合搭配用"watch -n 1 uptime"命令来每秒刷新一次来获得当前的系统负载情况。
[root@linuxprobe ~]# uptime
22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
free命令用于显示当前系统中内存的使用量信息,格式为:“free [-h]”。
为了保证Linux系统不会突然卡住宕机,因此内存使用量应该是运维人员时刻要关注的数据啦,我们可以使用-h参数来以更人性化的样式为我们展示出内存的实时使用量信息(真实的输出值中不包括中文注释部分):
[root@linuxprobe ~]# free -h
总计内存量 已用量 可用量 进程共享的内存量 磁盘缓存的内存量 缓存的内存量
total used free shared buffers cached
Mem: 1.8G 1.3G 542M 9.8M 1.6M 413M
-/+ buffers/cache: 869M 957M
Swap: 2.0G 0B 2.0G

who命令用于查看当前登入主机的用户终端信息,格式为:"who [参数]"。
简单三个字母就可以快捷的显示出所有正在登陆着本机的用户名称以及他们正在开启的终端信息:
[root@linuxprobe ~]# who
登陆的用户名 终端设备 登陆到系统的时间
root :0 2016-08-24 17:52 (:0)
root pts/0 2016-08-24 17:52 (:0)

last命令用于查看所有系统的登入记录,格式为:"last [参数]"。
下面使用last命令看到的本机登陆信息,其实仅仅是调取了过往保存到系统中的日志文件罢了,篡改里面的文字其实也很简单,因此对于做“黑客”入侵行为审计时其实并不牢靠,只能仅供我们参考而已:
[root@linuxprobe ~]# last
root pts/0 :0 Mon Aug 24 17:52 still logged in
root :0 :0 Mon Aug 24 17:52 still logged in
(unknown :0 :0 Mon Aug 24 17:50 - 17:52 (00:02)
reboot system boot 3.10.0-123.el7.x Tue Aug 25 01:49 - 18:17 (-7:-32)
root pts/0 :0 Mon Aug 24 15:40 - 08:54 (7+17:14)
root pts/0 :0 Fri Jul 10 10:49 - 15:37 (45+04:47)
………………省略部分登陆信息………………
history命令用于显示历史执行过的命令,格式为:“history [-c]”。
这条命令应该是我最喜欢的了,history命令默认会保存1000条执行过的命令,若要修改可直接编辑/etc/profile文件的HISTSIZE值。它能显示出当前用户在本地计算机中执行过的所有命令记录,您可以使用-c参数来清空里面的历史数据,还可以使用“!编码数字”的方式来重复执行某一次的命令:
[root@linuxprobe ~]# history
1 tar xzvf VMwareTools-9.9.0-2304977.tar.gz
2 cd vmware-tools-distrib/
3 ls
4 ./vmware-install.pl -d
5 reboot
6 df -h
7 cd /run/media/
8 ls
9 cd root/
10 ls
11 cd VMware\ Tools/
12 ls
13 cp VMwareTools-9.9.0-2304977.tar.gz /home
14 cd /home
15 ls
16 tar xzvf VMwareTools-9.9.0-2304977.tar.gz
17 cd vmware-tools-distrib/
18 ls
19 ./vmware-install.pl -d
20 reboot
21 history
[root@linuxprobe ~]# !15
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
历史命令会被保存到用户家目录中的".bash_history"文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,一般会是系统文件。
[root@linuxprobe ~]# cat ~/.bash_history
清空该用户在本机中执行过命令的历史记录:
[root@linuxprobe ~]# history -c
sosreport命令用于收集系统配置并诊断信息后输出结论文档,格式为:“sosreport”。
当我们的Linux系统出现故障需要联系红帽厂商或其他技术支持时,大多数时候都要先使用这个SOS功能来简单收集计算机的状态和配置信息,以便让技术支持公司能够通过远程就解决了一些小问题,又或者让他们能对复杂问题能提前有些了解:
[root@linuxprobe ~]# sosreport
sosreport (version 3.0)
This command will collect diagnostic and configuration information from
this Red Hat Enterprise Linux system and installed applications.

An archive containing the collected information will be generated in
/var/tmp and may be provided to a Red Hat support representative.

Any information provided to Red Hat will be treated in accordance with
the published support policies at:

https://access.redhat.com/support/

The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.

No changes will be made to system configuration.

Press ENTER to continue, or CTRL-C to quit. 此处敲击回车来确认收集信息

Please enter your first initial and last name [linuxprobe.com]:此处敲击回车,来确认主机名称。
Please enter the case number that you are generating this report for:

Running plugins. Please wait ...

Running 70/70: yum...
Creating compressed archive...

Your sosreport has been generated and saved in:
/var/tmp/sosreport-linuxprobe.com-20150905230631.tar.xz
The checksum is: 79436cdf791327040efde48c452c6322
//此压缩包文件和这段校验值就是要发送给对方的内容。
Please send this file to your support representative.
2.5 工作目录切换命令
工作目录指的是我们当前在系统中所处的“位置”,而这会牵涉到系统存储结构的知识,将会在第六章为您详细讲解,因此下面的操作实验您只需简单看下就好,如果不能完全掌握也不用自责,这是因为Linux系统庞大的知识体系造成的结果,每个初学者都会经过这么一段时期。
pwd命令用于显示当前所处的工作目录,格式为:“pwd [选项]”。
[root@linuxprobe etc]# pwd
/etc
cd命令用于切换工作路径,格式为:“cd [目录名称]”。
这个命令应该是最最常用的Linux命令之一了,您可以通过cd命令来便捷的切换不同的工作目录,除了常见的切换目录的方式,我们还可以使用“cd -”命令来返回到上一次所处的目录,使用“cd ~”命令来切换到当前用户的家目录,而使用“cd ~username”则可以切换到其他用户的家目录了~
使用“cd 路径”的方式切换进/etc目录中:
[root@linuxprobe ~]# cd /etc
同样的道理,再尝试切换进/bin目录中:
[root@linuxprobe etc]# cd /bin
此时返回到上一次的目录(即/etc目录):
[root@linuxprobe bin]# cd -
/etc
当然还可以快速的返回到用户自己的家目录呢:
[root@linuxprobe etc]# cd ~
[root@linuxprobe ~]#
ls命令用于显示目录中的文件信息,格式为:“ls [选项] [文件] ”。
当我们处在不同的工作目录下时,能够直接看到的文件也会发生变化,便可以通过ls命令的“-a”参数来看到全部文件(包括隐藏文件),再结合“-l”参数来查看文件的属性、大小等详细信息,整合之后的命令效果是这样的:
[root@linuxprobe ~]# ls -al
total 60
dr-xr-x---. 14 root root 4096 May 4 07:56 .
drwxr-xr-x. 17 root root 4096 May 4 15:55 ..
-rw-------. 1 root root 1213 May 4 15:44 anaconda-ks.cfg
-rw-------. 1 root root 957 May 4 07:54 .bash_history
-rw-r--r--. 1 root root 18 Dec 28 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 28 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 28 2013 .bashrc
drwx------. 10 root root 4096 May 4 07:56 .cache
drwx------. 15 root root 4096 May 4 07:49 .config
-rw-r--r--. 1 root root 100 Dec 28 2013 .cshrc
drwx------. 3 root root 24 May 4 07:46 .dbus
drwxr-xr-x. 2 root root 6 May 4 07:49 Desktop
drwxr-xr-x. 2 root root 6 May 4 07:49 Documents
drwxr-xr-x. 2 root root 6 May 4 07:49 Downloads
-rw-------. 1 root root 16 May 4 07:49 .esd_auth
-rw-------. 1 root root 628 May 4 07:56 .ICEauthority
-rw-r--r--. 1 root root 1264 May 4 07:48 initial-setup-ks.cfg
drwx------. 3 root root 18 May 4 07:49 .local
drwxr-xr-x. 2 root root 6 May 4 07:49 Music
drwxr-xr-x. 2 root root 6 May 4 07:49 Pictures
drwxr-xr-x. 2 root root 6 May 4 07:49 Public
-rw-r--r--. 1 root root 129 Dec 28 2013 .tcshrc
drwxr-xr-x. 2 root root 6 May 4 07:49 Templates
drwxr-xr-x. 2 root root 6 May 4 07:49 Videos
-rw-------. 1 root root 1962 May 4 07:54 .viminfo
如果需要看目录文件信息的话,需要额外添加一个-d参数才可以,例如查看/etc目录中文件的权限与属性:
[root@linuxprobe ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc
2.6 文本文件编辑命令
通过刚刚一个小节,您已经基本学会了对当前工作目录的管理方法。在Linux系统中一切都是文件,而对于服务程序的配置自然也就是在编辑程序的配置文件,如果不能熟练的查阅数据,那以后工作时可就真的要尴尬了,所以接下来我们来学习几条用于查看文本文件内容的命令吧,至于编辑器的使用是比较复杂的,我们单独放到第四章节中和Shell脚本一起为大家精讲。
cat命令用于查看纯文本文件(较短的),格式为:“cat [选项] [文件]”。
Linux系统中有需要用于查看文本内容的命令,但其中每个命令又都有自己的特色特点,比如这个cat命令就是用于查看比较精简的文本内容的,这个其实是最好记的命令之一,因为cat在英语中是猫的意思,小猫咪是不是总给你一种娇小、可爱的感觉呢?如果您想看文本内容时还顺便显示行号的话,不妨再追加一个“-n”参数吧:
[root@linuxprobe ~]# cat -n initial-setup-ks.cfg
1 #version=RHEL7
2 # X Window System configuration information
3 xconfig --startxonboot
4
5 # License agreement
6 eula --agreed
7 # System authorization information
8 auth --enableshadow --passalgo=sha512
9 # Use CDROM installation media
10 cdrom
11 # Run the Setup Agent on first boot
12 firstboot --enable
13 # Keyboard layouts
14 keyboard --vckeymap=us --xlayouts='us'
15 # System language
16 lang en_US.UTF-8
17
18 ignoredisk --only-use=sda
19 # Network information
20 network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
21 network --bootproto=dhcp --hostname=localhost.localdomain
22 # Root password
23 rootpw --iscrypted $6$pDjJf42g8C6pL069$iI.PX/yFaqpo0ENw2pa7MomkjLyoae2zjMz2UZJ7bH3UO4oWtR1.Wk/hxZ3XIGmzGJPcs/MgpYssoi8hPCt8b/
24 # System timezone
25 timezone America/New_York --isUtc
26 user --name=linuxprobe --password=$6$a9v3InSTNbweIR7D$JegfYWbCdoOokj9sodEccdO.zLF4oSH2AZ2ss2R05B6Lz2A0v2K.RjwsBALL2FeKQVgf640oa/tok6J.7GUtO/ --iscrypted --gecos="linuxprobe"
27 # System bootloader configuration
28 bootloader --location=mbr --boot-drive=sda
29 autopart --type=lvm
30 # Partition clearing information
31 clearpart --none --initlabel
32
33 %packages
34 @base
35 @core
36 @desktop-debugging
37 @dial-up
38 @fonts
39 @gnome-desktop
40 @guest-agents
41 @guest-desktop-agents
42 @input-methods
43 @internet-browser
44 @multimedia
45 @print-client
46 @x11
47
48 %end
49
more命令用于查看纯文本文件(较长的),格式为:“more [选项] 文件”。
如果需要去阅读长篇小说、或者非常长的配置文件,那么“小猫咪”可就真的不适合了,因为一旦您用cat命令去阅读长篇的文本内容,信息就会在您的屏幕上快速翻滚,有点像黑客帝国电影那样酷酷的感觉,但其实自己还没来得及看到内容就已经消失过去了。因此对于长篇的文本内容,我们推荐使用more命令来查看,它会给您起到翻页的效果呢:
[root@linuxprobe ~]# more initial-setup-ks.cfg
#version=RHEL7
# X Window System configuration information
xconfig --startxonboot

# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

ignoredisk --only-use=sda
# Network information
network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
network --bootproto=dhcp --hostname=localhost.localdomain
--More--(43%)
//此处会提示您已经阅读了百分之多少,可以使用空格和回车往下翻页。
head命令用于查看纯文本文档的前N行,格式为:“head [选项] [文件]”。
处理文本内容时,谁都不能保证永远“循规蹈矩”的顺序往下看完,如果我们只想看文本中前20行的内容呢:
[root@linuxprobe ~]# head -n 20 initial-setup-ks.cfg
#version=RHEL7
# X Window System configuration information
xconfig --startxonboot

# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

ignoredisk --only-use=sda
# Network information
network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
[root@localhost ~]#
tail命令用于查看纯文本文档的后N行或持续刷新内容,格式为:“tail [选项] [文件]”。
当然我们还会遇到一种更奇葩的情况,比如需要去查看文本内容的最后20行,那么操作方法其实跟head命令是非常相似的,只需要执行“tail -n 20 文件名”命令就可以达到这样的目的。而tail命令最强悍的功能是用于持续刷新一个文件的内容,尤其是对于想要实时看到最新日志文件的时候特别有用:
[root@localhost ~]# tail -f /var/log/messages
May 4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: STACK_OP_ADD: window 0x1e00001 already in stack
May 4 07:56:38 localhost gnome-session: Window manager warning: Log level 16: STACK_OP_ADD: window 0x1e00001 already in stack
May 4 07:56:38 localhost vmusr[12982]: [ warning] [Gtk] gtk_disable_setlocale() must be called before gtk_init()
May 4 07:56:50 localhost systemd-logind: Removed session c1.
Aug 1 01:05:31 localhost systemd: Time has been changed
Aug 1 01:05:31 localhost systemd: Started LSB: Bring up/down networking.
Aug 1 01:08:56 localhost dbus-daemon: dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)
Aug 1 01:08:56 localhost dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)
Aug 1 01:08:57 localhost dbus-daemon: dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'
Aug 1 01:08:57 localhost dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'
//该日志内容会实时刷新,同时按下“<strong>ctrl+c</strong>”健可结束命令。
tr命令用于替换文本文件中的字符,格式为:“tr [原始字符] [目标字符]”。
很多时候我们想要快速的替换文本内容中的一些词汇,又或者将整个文本内容都进行替换,手工逐个替换真的太累了,而且对于处理大批量的内容非常不现实。此时我们便可以先使用cat命令读取待处理的文本内容,然后通过管道符(第三章将为您细致讲解)将这些数据传递给tr命令做替换操作即可,例如我们试试将文本内容完整替换成大写英文吧:
[root@linuxprobe ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
#VERSION=RHEL7
# SYSTEM AUTHORIZATION INFORMATION
AUTH --ENABLESHADOW --PASSALGO=SHA512

# USE CDROM INSTALLATION MEDIA
CDROM
# RUN THE SETUP AGENT ON FIRST BOOT
FIRSTBOOT --ENABLE
IGNOREDISK --ONLY-USE=SDA
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8

# NETWORK INFORMATION
NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777728 --ONBOOT=OFF --IPV6=AUTO
NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN
# ROOT PASSWORD
ROOTPW --ISCRYPTED $6$PDJJF42G8C6PL069$II.PX/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7BH3UO4OWTR1.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/
# SYSTEM TIMEZONE
TIMEZONE AMERICA/NEW_YORK --ISUTC
USER --NAME=LINUXPROBE --PASSWORD=$6$A9V3INSTNBWEIR7D$JEGFYWBCDOOOKJ9SODECCDO.ZLF4OSH2AZ2SS2R05B6LZ2A0V2K.RJWSBALL2FEKQVGF640OA/TOK6J.7GUTO/ --ISCRYPTED --GECOS="LINUXPROBE"
# X WINDOW SYSTEM CONFIGURATION INFORMATION
XCONFIG --STARTXONBOOT
# SYSTEM BOOTLOADER CONFIGURATION
BOOTLOADER --LOCATION=MBR --BOOT-DRIVE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --NONE --INITLABEL

%PACKAGES
@BASE
@CORE
@DESKTOP-DEBUGGING
@DIAL-UP
@FONTS
@GNOME-DESKTOP
@GUEST-AGENTS
@GUEST-DESKTOP-AGENTS
@INPUT-METHODS
@INTERNET-BROWSER
@MULTIMEDIA
@PRINT-CLIENT
@X11

%END
wc命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。
每当我讲课提到这个命令的时候,总有同学联想到一些建筑,其实两者是毫无关系的。Linux系统中的wc用于统计文本的行数、字数、字节数等文本内容的命令,如果为了方便您去记忆,其实也可以联想到上厕所时真的好无聊,无聊到竟然数完了整张报纸上有多少行字(作为一名技术讲师,竟然想出这么污的栗子 :)这句话出版时请删除)。
参数 作用
-l 只显示行数
-w 只显示单词数
-c 只显示字节数
我们使用“-l”参数来统计行数,而passwd是用于保存系统帐户信息的文件,因此下面的命令就是用于统计当前系统中有多少个用户的作用啦,感觉是不是很神奇:
[root@linuxprobe ~]# wc -l /etc/passwd
38 /etc/passwd
stat命令用于查看文件的具体存储信息和时间等信息,格式“stat 文件名称”。
使用stat命令可以看到文件的存储信息和时间等信息,下面会显示出文件的三种时间状态(已加粗):Access、Modify、Change,我们将在下面的touch命令中单独为您讲解:
[root@localhost ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1213 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 68912908 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2016-07-14 01:46:18.721255659 -0400
Modify: 2016-05-04 15:44:36.916027026 -0400
Change: 2016-05-04 15:44:36.916027026 -0400
Birth: -
cut命令用于按“列”来提取文本字符,格式为:“cut [参数] 文本”。
如何准确的提取出最想要的数据,这也是我们在研究的技术方向,按基于“行”的方式来提取是比较简单的,只需要设置好匹配项目和行数即可,但是按列搜索的话不仅要使用“-f”参数来设置需要看的列数,还必须使用“-d”参数来设置间隔符号,因为passwd是用于保存用户信息数据的文件,而每一项值都是通过冒号来间隔(见下面head命令的输出演示),因此我们来尝试下提取出passwd文件中的用户名信息吧:
[root@linuxprobe ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@linuxprobe ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
polkitd
unbound
colord
usbmuxd
avahi
avahi-autoipd
libstoragemgmt
saslauth
qemu
rpc
rpcuser
nfsnobody
rtkit
radvd
ntp
chrony
abrt
pulse
gdm
gnome-initial-setup
postfix
sshd
tcpdump
linuxprobe
diff命令用于比较多个文本文件的差异,格式为:"diff [参数] 文件"。
我们不仅可以使用“--brief”参数来仅仅确认两个文件是否不同,还可以使用“-c”参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。例如先查看下两个文件的内容,然后进行比较:
[root@linuxprobe ~]# cat diff_A.txt diff_B.txt
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@linuxprobe ~]# cat diff_B.txt
Welcome tooo linuxprobe.com

Red Hat certified
Free Linux LeSSonS
////////.....////////
Professional guidance
Linux Course
仅仅显示比较后的结果,判断文件是否相同:
[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ
使用详细的上下文输出格式来描述文件内容具体的不同:
[root@linuxprobe ~]# diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2015-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2015-08-30 18:08:52.203860389 +0800
***************
*** 1,5 ****
! Welcome to linuxprobe.com
Red Hat certified
! Free Linux Lessons
Professional guidance
Linux Course
--- 1,7 ----
! Welcome tooo linuxprobe.com
!
Red Hat certified
! Free Linux LeSSonS
! ////////.....////////
Professional guidance
Linux Course
2.7 文件目录管理命令
您现在学习的基础命令就像是搬砖打地基,虽然表面上暂时还看不到明显的战绩,但其实各位的内功已经非常雄厚了。对于日常的工作来说,一定要掌握对文件的创建、修改,复制、剪切、更名与删除等操作。
touch命令用于创建空白文件与设置文件的各种时间,格式为:“touch [选项] [文件]”。
这个touch命令可真的是特别好用,它能够为我们创建出空白的文本文件,但这实在太简单不需要去讲,例如“touch linuxprobe”这样就可以创建出一个空白的名为linuxprobe的文本文件,而有难度的操作主要是用于设置文件的修改时间、更改时间与读取时间。
更改时间(mtime):内容修改时间(不包括权限的)
更改权限(ctime):更改权限与属性的时间
读取时间(atime):读取文件内容的时间
我们可以在修改一个文件前先查看下文件的修改时间,然后再通过touch命令将修改后的文件时间设置伪装成自己没有动过的一样,很多黑客就会这么做呢:
参数 作用
-a 仅修改“访问时间”(atime)
-m 仅修改“更改时间”(mtime)
-d 同时修改atime与mtime
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1213 May 4 15:44 anaconda-ks.cfg
[root@localhost ~]# echo "Visit the LinuxProbe.com to learn linux skills" >> anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 Aug 2 01:26 anaconda-ks.cfg
[root@localhost ~]# touch -d "2016-05-04 15:44" anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 May 4 15:44 anaconda-ks.cfg
mkdir用于创建空白的文件夹,格式为:“mkdir [选项] 目录”。
在Linux系统中文件夹应该是最常见的文件类型之一,除了一般的创建单个目录操作外,我们还可以使用“-p”参数来递归创建出具有嵌套叠层关系的文件目录。
[root@linuxprobe ~]# mkdir linuxprobe
[root@linuxprobe ~]# cd linuxprobe
[root@linuxprobe linuxprobe]# mkdir -p a/b/c/d/e
[root@linuxprobe linuxprobe]# cd a
[root@linuxprobe a]# cd b
[root@linuxprobe b]#
cp命令用于复制文件或目录,格式为:“cp [选项] 源文件 目标文件”。
想必您一定对复制操作不是很陌生的,在Linux系统中的复制操作其实具体还分为3种情况,第一种情况是如果目标文件是个目录,则会将源文件复制到该目录中,第二种情况是如果目标文件也是个普通文件,则会提示是否要覆盖它,最后是第三种的情况了,如果目标文件是不存在的,则会将源文件修改成目标文件的名称,类似于是重命名的操作。
参数 作用
-p 保留原始文件的属性
-d 若对象为"链接文件",则保留该"链接文件"的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr(p,d,r为上述的参数)

首先创建一个名为install.log的文件,然后将其复制出来一份名为x.log的备份文件:
[root@linuxprobe ~]# touch install.log
[root@linuxprobe ~]# cp install.log x.log
[root@linuxprobe ~]# ls
install.log x.log
mv命令用于移动文件或改名,格式为:“mv [选项] 源文件 [目标路径|目标文件名]”。
剪切操作不同于复制操作,因为它会默认将源文件删除掉,用户就只有剪切后的文件了,并且如果对一个文件在同一个目录中进行剪切操作,其实也是重命名的作用:
[root@linuxprobe ~]# mv x.log linux.log
rm命令用于删除文件或目录,格式为:“rm [选项] 文件”。
在Linux系统中删除文件时会默认再向您询问是否要执行删除操作,如果不想总看到这种反复的确认信息,您可以使用“-f”参数来直接强制删除,另外还要删除于目录文件夹的话,必需追加一个“-r”参数才可以,否则是删除不掉的,例如我们来尝试删除下刚刚那两个文件吧:
[root@linuxprobe ~]# ls
install.log linux.log
[root@linuxprobe ~]# rm install.log
rm: remove regular empty file ‘install.log’? y
[root@linuxprobe ~]# rm -rf linux.log
[root@linuxprobe ~]# ls
[root@linuxprobe ~]#
dd命令用于指定大小的拷贝的文件或指定转换文件,格式为:“dd [参数]”。
dd命令是个比较重要且具有特色的一个命令,它能够让用户指定数据块的大小和个数来复制一个文件的内容,当然如果您愿意的话还可以在复制过程中转换其中的数据。Linux系统中有一个叫做/dev/zero的设备文件,每次讲课解释起来都感觉有点哲学理论的色彩,因为它不会占用您的系统存储空间,但里面却可以保存有无穷无尽的数据,一般用来搭配dd命令来生成出来一个指定大小的文件是再好不过的了。
参数 作用
if 输入的文件名称。
of 输出的文件名称。
bs 设置每个“块”的大小。
count 设置要拷贝“块”的个数。
[root@linuxprobe ~]# dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB) copied, 27.1755 s, 21.6 MB/s
dd命令也绝对不仅限于复制文件这么简单,如果您想把一个光盘设备只做成iso格式的镜像文件,在Windows系统中一定免不了要用到第三方的很多软件才可以,但我们可以直接使用这个dd命令来复制并压制光盘设备变成一个可立即使用的iso镜像哦:
[root@linuxprobe ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
7311360+0 records in
7311360+0 records out
3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s

2.8 打包压缩与搜索命令
自从有了互联网络,人们传送文件就再也离不开压缩包格式带来的便捷了,下面将学习如何在Linux系统中对于文件的打包压缩与解压的方法,以及让用户能够基于一个关键词在文本文件中搜索匹配信息,与基于指定的名称或属性在整个文件系统中搜索匹配特定文件的超级实用命令。本小节内虽然只有三条命令,但功能都比较复杂而且参数很多,因此放到最后给大家讲解,请一定要仔细的阅读并实验。
tar命令用于对文件打包压缩或解压,格式为:“tar [选项] [文件]”。
Windows系统中最常见的压缩格式是.rar与.zip吧,而Linux系统中常见的格式比较多,但主要使用的是.tar或.tar.gz或.tar.bz2格式,同学们不用担心格式好多而记不住,其实这些大部分都是由tar命令来完成的,我来把最重要的几个参数讲给你们下,首先“-c”参数是用于创建压缩文件的,“-x”参数是用于解压文件的,因此这两个不能同时放一起使用,其次“-z”参数是指定使用Gzip格式来压缩解压文件,“-j”参数是指定使用bzip2参数来压缩解压文件,解压时候我们则是根据文件的后缀来决定是何种格式参数,而有些打包操作要数个小时,屏幕没有输出的话你一定会怀疑电脑有没有死机了,也不好判断打包的进度情况,非常推荐使用“-v”参数来不断显示压缩或解压的过程给用户,“-C”参数用于指定要解压到的那个指定的目录,而“-f”参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。因此平时我会一般使用“tar -czvf 压缩包名称.tar.gz 要打包的目录”命令来将指定的文件来打包,解压的话则是“tar -xzvf 压缩包名称.tar.gz”命令,让我们来逐个演示下打包压缩与解压的操作吧。
使用tar命令将/etc目录内文件通过gzip格式进行打包压缩,并将文件命名为etc.tar.gz:
[root@linuxprobe ~]# tar czvf etc.tar.gz /etc
tar: Removing leading `/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-madan.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/66-sil-nuosu.conf
………………省略部分压缩过程………………
将刚刚打包的压缩包文件指定解压到/root/etc目录中:
[root@linuxprobe ~]# mkdir /root/etc
[root@linuxprobe ~]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-madan.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/66-sil-nuosu.conf
etc/fonts/conf.d/65-1-vlgothic-gothic.conf
etc/fonts/conf.d/65-0-lohit-bengali.conf
etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
………………省略部分解压过程………………
grep命令用于对文本内容进行关键词的搜索匹配,格式为:“grep [选项] [文件]”。
我们可以把grep命令当作是用途最广泛的文本搜索匹配工具,参数虽然很多但基本是用不到的,我用将近七年的工作和教学经验提出本书籍核心“去掉不实用”的写作理念绝对不是乱说,一名Linux讲师如果写书的水平只能停留在“技术的搬运工”而不成成为一名对真正优质技术知识的提炼者,那绝对会害了一大波学生,因此刘遄老师在这里只讲两个最常用的参数,只要会使用“-n”参数显示搜索到信息的行号,使用“-v”参数用于反选信息(即没有包含关键词的所有信息行)就几乎能完成你以后80%的工作需要,至于其他上百个参数,以后万一工作遇到了,再来用“man grep”命令查一下也来得及。
Linux系统中的/etc/passwd文件是保存着所有用户信息的文件,而一旦用户的登陆终端被设置成“/sbin/nologin”则不再允许登陆系统,因此我们可以通过使用grep命令来匹配出当前系统中所有不允许登陆系统的用户信息:
[root@linuxprobe ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
………………省略部分输出过程………………
find命令用于查找文件,格式为:“find [查找路径] 寻找条件 操作”。
我在书中反反复复的提到“Linux系统中的一切都是文件”,接下来您就要感受到这份力量了。我们在Linux系统中的搜索工作一般都是通过find命令来完成的,它可以根据不同的文件特性来做为匹配项(如文件名、大小、修改时间、权限等信息),一旦匹配到了则会默认为用户显示到屏幕上来,基础的匹配项目请见下表即可,我主要讲解下“--exec”参数重要的作用,这个参数是用于将find命令搜索到的结果交由给后面的命令再进一步做处理,十分类似于我们将在下一章中提到的管道符技术。
参数 作用
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间-n指n天以内,+n指n天以前
-ctime -n +n 匹配修改权限的时间-n指n天以内,+n指n天以前
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新却比f2旧的文件
--type b/d/c/p/l/f 匹配文件类型(块设备、目录、字符设备、管道、链接文件、文件文件)
-size 匹配文件的大小(+50k查找超过50k的文件,而-50k则代表查找小于50k的文件)
-prune 忽略某个目录
-exec {} \; 后面可接对搜索到结果进一步处理的命令(下面会有演示)
Linux系统中的配置文件根据FHS协议会被保存到/etc目录中(第六章精讲),如果我们要想获取到该目录中所有以host开头的文件就可以这样做:
[root@linuxprobe ~]# find /etc -name "host*" -print
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname
想要在整个系统中搜索所有权限中包括SUID权限的文件(第五章精讲),只需使用减号-4000即可:
[root@linuxprobe ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/su
/usr/bin/umount
/usr/bin/passwd
/usr/sbin/userhelper
/usr/sbin/usernetctl
………………省略部分输出信息………………