常用系统工作命令
echo:
echo[字符串|$变量]
。reboot 重启系统:
由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用 root 管理员来 重启- poweroff:
poweroff 命令用于关闭系统,其格式为 poweroff。 该命令与 reboot 命令相同,都会涉及硬件资源的管理权限,因此默认只有 root 管理员才 可以关闭电脑 - wget :
wget [参数] 下载地址
1 | wget 命令的参数以及作用 |
- ps
查看系统中的进程状态。格式ps [参数]
。 用来抓取与某 个指定服务进程相对应的 PID 号码
ps 命令的参数以及作用
-a 显示所有进程(包括其他用户的进程) -u 用户以及其他详细信息 -x 显示没有控制终端的进程
- top
top 命令用于动态地监视进程活动与系统负载等信息,完全将它看作 Linux 中的”强化版的 Windows 任务管理器”。
top 命令执行结果的前5行为系统整体的统计信息,其所代表的含义如下。
➢ 第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。
➢ 第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程 数。
➢ 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源 百分比、空闲的资源百分比等。
pidof
pidof 命令用于查询某个指定服务进程的 PID 值,格式为pidof [参数]\[服务名称]
。kill
kill 命令用于终止某个指定 PID 的服务进程,格式为kill [参数]\[进程 PID]
。- killall
killall 命令用于终止某个指定名称的服务所对应的全部进程,格式为:killall [参数]\[进 程名称]
系统状态检测命令
- ifconfig
用于获取网卡配置与网络状态等信息,格式为ifconfig [网络设备]\[参数]
- uname
uname 命令用于查看系统内核与系统版本等信息,格式为uname [-a]
。 - uptime
uptime 用于查看系统的负载信息,格式为 uptime,
它可以显示当前系统时间、系统已运行时间、启用终端数量以 及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情 况 free
free 用于显示当前系统中内存的使用量信息,格式为free [-h]
。 为了保证 Linux 系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量.last
last 命令用于查看所有系统的登录记录,格式为last [参数]
。
使用 last 命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保 存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而 判断系统有无被恶意入侵!history
history
命令用于显示历史执行过的命令history -c
清空历史纪录- sosreport
sosreport 命令用于收集系统配置及架构信息并输出诊断文档,格式为 sosreport。 当 Linux 系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简 单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦 或让他们能提前了解某些复杂问题
工作目录切换命令
pwd
pwd 命令用于显示用户当前所处的工作目录,格式为pwd [选项]
。cd
cd -
命令返回到上一次所处的目录,cd..
切换到上级目录。cd ~
命令切换到当前用户的家目录cd ~username
切换到其他用户的家目录- ls
ls 命令用于显示目录中的文件信息,格式为ls [选项]\[文件]
。 所处的工作目录不同,当前工作目录下的文件肯定也不同。使用 ls 命令的-a
参数看 到全部文件(包括隐藏文件),使用-l
参数可以查看文件的属性、大小等详细信息。将这 两个参数整合之后,再执行 ls 命令即可查看当前目录中的所有文件并输出这些文件的属性 - cat
cat 命令用于查看纯文本文件(内容较少的),如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数 - more
more 命令用于查看纯文本文件(内容较多的),格式为more [选项]文件
。 还可以使用空格键或回车 键向下翻页 - head
head 命令用于查看纯文本文档的前 N 行,格式为head [选项]\[文件]
。
查看前20行head -n 20 initial-setup-ks.cfg
- tail
tail 命令用于查看纯文本文档的后 N 行或持续刷新内容,格式为tail [选项]\[文件]
。 - tr
tr 命令用于替换文本文件中的字符,格式为tr [原始字符]\[目标字符]
。cat anaconda-ks.cfg | tr [a-z] [A-Z]
把某个文本英文替换为大写 wc
wc 命令用于统计指定文本的行数、字数、字节数,格式为wc [参数] 文本
。stat
stat 命令用于查看文件的具体存储信息和时间等信息,格式为stat 文件名称”
cut
cut 命令用于按“列”提取文本字符,格式为“cut [参数] 文本”。
在Linux系统中,如何准确地提取出最想要的数据,这也是我们应该重点学习的内容。一般 而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是 如果按列搜索,不仅要使用-f 参数来设置需要看的列数,还需要使用-d 参数来设置间隔符号。 passwd在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的,接下来我们使用 下述命令尝试提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容
- diff
diff 命令用于比较多个文本文件的差异,格式为“diff [参数] 文件”。
在使用 diff 命令时,不仅可以使用–brief 参数来确认两个文件是否不同,还可以使用-c 参 数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。
文件目录管理命令
- touch
touch 命令用于创建空白文件或设置文件的时间,格式为touch [选项]\[文件]
。
touch 命令的参数及其作用-a 仅修改“读取时间”(atime) -m 仅修改“修改时间”(mtime) -d 同时修改 atime 与 mtime
接下来,我们先使用ls 命令查看一个文件的修改时间,然后修改这个文件,最后再通过touch 命令把修改后的文件时间设置成修改之前的时间(很多黑客就是这样做的呢):
1 | [root@linuxprobe ~]# ls -l anaconda-ks.cfg |
mkdir
创建空白目录
-p 递归迭代参数,从而自动化创建有嵌套关系的目录mkdir -p a/b/c/d/e
cp
cp 命令用于复制文件或目录,格式为cp [选项] 源文件 目标文件
。
-p 保留原始文件的属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr(p、d、r 为上述参数)mv
rm 命令用于删除文件或目录,格式为rm [选项] 文件
。file
file 命令用于查看文件的类型,格式为file 文件名
.
打包压缩与搜索命令
- tar
1 | -c 创建压缩文件 |
通常 压缩 tar -czvf etc.tar.gz /etc
解压缩 tar -zvxf etc.tar.ge /etc
解压/解压缩到 /etc目录下
- grep
grep 命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”。 grep 命令的参数及其作用如表 2-15 所示。
1 | -b 将可执行文件(binary)当作文本文件(text)来搜索 |
- find
find 命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”。 “Linux 系统中的一切都是文件”,接下来就要见证这句话的分量了。 在 Linux 系统中,搜索工作一般都是通过 find 命令来完成的,它可以使用不同的文件特性作 为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到 屏幕上。find 命令的参数以及作用如表 2-16 所示。
表 2-16 find 命令中的参数以及作用
1 | -name 匹配名称 |
这里需要重点讲解一下-exec 参数重要的作用。这个参数用于把 find 命令搜索到的结果交 由紧随其后的命令作进一步处理,它十分类似于第 3 章将要讲解的管道符技术,并且由于 find 命令对参数的特殊要求,因此虽然 exec 是长格式形式,但依然只需要一个减号(-)。 根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux 系统中的配置文件 会保存到/etc 目录中(详见第 6 章)。如果要想获取到该目录中所有以 host 开头的文件列表, 可以执行如下命令:
1 | [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 权限的所有文件(详见第 5 章),只需使用4000 即可:
1 | [root@linuxprobe ~]# find / -perm -4000 -print /usr/bin/fusermount /usr/bin/su /usr/bin/umount /usr/bin/passwd /usr/sbin/userhelper /usr/sbin/usernetctl |
Linux 5 种进程名称和含义
➢ R(运行)进程正在运行或在运行队列中等待。
➢ S(中断)进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
➢ D(不可中断)进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
➢ Z(僵死)进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数
后将进程释放。
➢ T(停止)进程收到停止信号后停止运行。
输入输出重定向
对于输入重定向来讲,用到的符号及其作用如表 3-1 所示。
表 3-1 输入重定向中用到的符号及其作用
1 | 命令 < 文件 将文件作为命令的标准输入 |
对于输出重定向来讲,用到的符号及其作用如表 3-2 所示。
表 3-2 输出重定向中用到的符号及其作用
1 | 命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据) |
正确信息:
错误信息:
管道命令符
|
即为管道命令符:
把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命 令的标准输入。
例子:grep "/sbin/nologin" /etc/passwd | wc -l
会得到wc前一个命令的结果。
命令行的通配符
1 |
|
ls -l /dev/sda*
目录下全部以sda开头的文件
如果只想查看文件名为 sda 开头,但是后面还紧跟其他某一个字符的文件的相关信息ls -l /dev/sda?
环境变量
1 | Linux 系统中最重要的 10 个环境变量 |
我们完全可以自 行创建变量,来满足工作需求。例如设置一个名称为 WORKDIR 的变量,方便用户更轻松地 进入一个层次较深的目录:
1 | [root@linuxprobe ~]# mkdir /home/workdir |
但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。 如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了:
1 | [root@linuxprobe workdir]# su linuxprobe Last login: Fri Mar 20 20:52:10 CST 2017 on pts/0 |
vim
末行模式中可用的命令
1 | :w 保存 |
判断用户参数
1 | -d 测试文件是否为目录类型 |
下面使用文件测试语句来判断/etc/fstab 是否为一个目录类型的文件,然后通过 Shell 解释 器的内设$?变量显示上一条命令执行后的返回值。如果返回值为 0,则目录存在;如果返回值 为非零的值,则意味着目录不存在:[ -d /etc/fstab ]
,echo $?
[]的两边必须有空格
$?变量,作用是显示上一次命令的执行返回值
整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且 不能想当然地使用日常生活中的等号、大于号、小于号等来判断。因为等号与赋值命令符冲 突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突。因此一定要使用规 范的整数比较运算符来进行操作,可用的整数比较运算符
1 | -eq 是否等于 |
shell脚本
第一个简单的shell脚本,判断输入的ip是否上线
1 | #!/bin/bash |
/dev/null 是一个被称作 Linux 黑洞的文件,把输出信息重定向到这个文件等 同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁
多个if循环:
1 | #! /bin/bash |
read 是用来读取用户输入信息的命令, 能够把接收到的用户输入信息赋值给后面的指定变量,-p 参数用于向用户显示一定的提示信息
批量判断ip是否ping通(if)
1 | #!/bin/bash |
case语句
1 | #!/bin/bash |
计划任务服务程序
一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用 at 命令实现这种功能,只需要写成“at 时间”的形式就可以。如果想要查看已设置好但还未执 行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm 任务序号”。在 使用 at 命令来设置一次性计划任务时,默认采用的是交互式方法。例如,使用下述命令将系 统设置为在今晚 23:30 分自动重启网站服务
1 | [root@hu3sky ~]# at 23:30 |
或者echo "systemctl restart httpd" | at 23:30
如果我们希望 Linux 系统能够周期性地、有规律地执行某些具体的任务,那么 Linux 系统 中默认启用的 crond 服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看 当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是 以管理员的身份登录的系统,还可以在 crontab 命令中加上-u参数来编辑他人的计划任务。 在正式部署计划任务前,请先跟刘遄老师念一下口诀“分、时、日、月、星期 命令”。 这是使用 crond 服务设置任务的参数格式(其格式见表 4-6)。需要注意的是,如果有些字段 没有设置,则需要使用星号(*)占位
1 | 分 取值为 0~59 的整数 |
其中 0 与 7 均为星期日 命令 要执行的命令或程序脚本.
假设在每周一、三、五的凌晨 3 点 25 分,都需要使用 tar 命令把某个网站的数据目录进 行打包处理,使其作为一个备份文件。我们可以使用 crontab -e 命令来创建计划任务。为自己 创建计划任务无需使用-u 参数,具体的实现效果的参数如 crontab -l
用户身份与能力
useradd 命令
1 | -d 指定用户的家目录(默认为/home/username) |
groupadd 命令
创建用户组的步骤非常简单,例如使 用如下命令创建一个用户组 hu3skygroupadd hu3sky
passwd
普通用户只能使用 passwd 命令修改自身的系统密码,而 root 管理员则有权限修改其他 所有人的密码
1 | -l 锁定用户,禁止其登录 |
userdel
删除用户 格式为 userdel [选项] 用户名
。-f 强制删除用户 -r 同时删除用户及用户家目录
文件隐藏属性
chattr
chattr 命令用于设置文件的隐藏权限,格式为 chattr [参数] 文件
。。如果想要把某个隐藏 功能添加到文件上,则需要在命令后面追加+参数
,如果想要把某个隐藏功能移出文件, 则需要追加-参数
。
1 | i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容 而不能新建或删除文件 |
lsattr
查看隐藏权限
su
su,切换用户 su - 用户
,su 命令与用户名之间有一个减号(-),这意味着完全切 换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。
存储与磁盘
常见的硬件设备及其文件名称
1 | 设备名称 文件名称 |
/dev/sda,a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的。
sda3 只能表示是编号为 3 的分区,而不能判断 sda 设备上 已经存在了 3 个分区
挂载硬件设备
mount
mount 命令用于挂载文件系统,格式为mount 文件系统 挂载目录
。-a 挂载所有在/etc/fstab 中定义的文件系统
例如,要把设备/dev/sda1 挂载到/root/桌面,只需要在 mount 命令中填写设备与挂载目录 参数就行,系统会自动去判断要挂载文件的类型,因此只需要执行下述命令即可:
[root@hu3sky ~]# mount /dev/sda1 /root/桌面
umount
umount 命令用于撤销已经挂载的设备文件。[root@hu3sky ~]# umount /dev/sda1