本篇文章主要是参考《Linux就该这么学》的,如想更多的了解请《Linux就该这么学》官网!
Linux就该这么学官网地址:https://www.linuxprobe.com/chapter-00.html
一、执行查看帮助命令
1、常见执行linux命令的格式:
命令名称 [命令参数] [命令对象]
注意:命令名称、命令参数、命令对象之间是用空格分隔开的。
命令对象:一般是指要处理的文件、目录、用户等资源,而命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用--与-作为前缀。
长格式 | man --help |
短格式 | man -h |
2、使用man man 命令查看man命令自身的帮助信息:
man man
2.1、man命令中常用按键及用途 :
按键 | 用途 |
空格键 | 向下翻一页 |
PaGe down | 向下翻一页 |
PaGe up | 向上翻一页 |
home | 直接前往首页 |
end | 直接前往尾页 |
/ | 从上至下搜索某个关键词,如“/linux” |
? | 从下至上搜索某个关键词,如“?linux” |
n | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
q | 退出帮助文档 |
2.2、man命令帮助信息的结构及意义:
结构名称 | 代表意义 |
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
二、常用系统工作命令
1、echo命令
echo命令用于在终端输出字符串或变量提取后的值,格式为:
echo [字符串| $变量]
1.1、把指定字符串“hello world”输出到终端屏幕的命令为:
[root@localhost ~]# echo hello world
1.2、使用$变量的方式提取变量SHELL的值,并将其输出到屏幕上:
[root@localhost ~]# echo $SHELL
/bin/bash
2、date命令
date命令用于显示及设置系统的时间或日期,格式为:
date [选项] [+指定的格式]
date命令中的参数以及作用
参数 | 作用 |
%t | 跳格[Tab键] |
%H | 小时(00~23) |
%I | 小时(00~12) |
%M | 分钟(00~59) |
%S | 秒(00~59) |
%j | 今年中的第几天 |
2.1、查看当前系统时间:
[root@localhost ~]# date
Sat Dec 29 00:32:19 PST 2018
2.2、按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间:
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2018-12-29 16:33:25
2.3、将系统的当前时间设置为2019年1月1日12点12分12秒:
[root@localhost ~]# date -s "20190101 12:12:12"
2.4、使用%j可用来查看今天是当年中的第几天:
[root@localhost ~]# date "+%j"
3、reboot命令
reboot命令用于重启系统,其格式为:
reboot
由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用root管理员来重启。命令如下:
[root@localhost ~]# reboot
4、poweroff 命令
poweroff命令用于关闭系统,其格式为:
poweroff
该命令与reboot命令相同,都会涉及硬件资源的管理权限,因此默认只有root管理员才可以关闭电脑。命令如下:
[root@localhost ~]# poweroff
5、wget命令
wget命令用于在终端中下载网络文件,格式为:
wget [参数] 下载地址
wget命令的参数以及参数的作用:
参数 | 作用 |
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片、视频等 |
-r | 递归下载 |
5.1、以下载《Linux就该这么学》的PDF文件为例:
[root@localhost ~]# wget http://www.linuxprobe.com/docs/LinuxProbe.pdf
5.2、使用wget命令递归下载www.linuxprobe.com网站内的所有页面数据以及文件,下载完成后保存在名www.linuxprobe.com的目录中:
[root@localhost ~]# wget -r -p http://www.linuxprobe.com
6、ps命令
ps命令用于查看系统中的进程状态,格式为:
ps [参数]
PS命令是用来抓取与某个指定服务进程相对应的PID号码
PS命令的参数及作用:
参数 | 作用 |
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示:
- R(运行):进程正在运行或在运行队列中等待;
- S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态;
- D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断;
- Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放;
- T(停止):进程收到停止信号后停止运行。
当执行ps aux命令后通常会看到如图所示的进程状态,图中只是列举了部分输出值,而且正常的输出值中不包括中文注释。
6.1、显示所有运行中的进程:
[root@localhost ~]# ps aux | less
6.2、查询tomcat的运行情况:
[root@localhost ~]# ps -ef | grep tomcat
7、top命令
top命令用于动态地监视进程活动与系统负载等信息,其格式为:
top
top命令相当强大,能够动态地查看系统运维状态,完全将它看作Linux中的“强化版的Windows任务管理器”,运行命令:
[root@localhost ~]# top
在图中,top命令执行结果的前5行为系统整体的统计信息,其所代表的含义为:
- 第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低);
- 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数;
- 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等;
- 第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量;
- 第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
注意:第3行中的数据均为CPU数据并以百分比格式显示,例如“99.8 id”意味着有99.8%的CPU处理器资源处于空闲。
8、pidof 命令
pidof命令用于查询某个指定服务进程的PID值,格式为:
pidof [参数] [服务名称]
每个进程的进程号码值(PID)是唯一的,因此可以通过PID来区分不同的进程。例如,可以使用如下命令来查询本机上sshd服务程序的PID:
[root@localhost ~]# pidof sshd
2153
9、kill命令
kill命令用于终止某个指定PID的服务进程,格式为:
kill [参数] [进程PID]
使用kill命令把上面用pidof命令查询到的PID所代表的进程终止掉:
[root@localhost ~]# kill 2153
10、killall命令
killall命令用于终止某个指定名称的服务所对应的全部进程,格式为:
killall [参数] [进程名称]
一些复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程。
[root@localhost ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@localhost ~]# killall httpd
[root@localhost ~]# pidof httpd
[root@localhost ~]#
三、系统状态检测命令
1、ifconfig 命令
ifconfig命令用于获取网卡配置与网络状态等信息,格式为:
ifconfig [网络设备] [参数]
使用ifconfig 命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量:
[root@localhost ~]# ifconfig
2、uname 命令
uname命令用于查看系统内核与系统版本等信息,格式为:
uname [-a]
在使用uname命令时,一般会固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
[root@localhost ~]# uname -a
Linux mocun 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
如果要查看当前系统版本的详细信息,则需要查看redhat-release文件:
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
3、uptime 命令
uptime用于查看系统的负载信息,格式为:
uptime
uptime命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。
[root@localhost ~]# uptime
22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
4、free 命令
free用于显示当前系统中内存的使用量信息,格式为:
free [-h]
为了保证Linux系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。在使用free命令时,可以结合使用-h参数以更人性化的方式输出当前内存的实时使用量信息。
[root@localhost ~]# free -h
5、who 命令
who用于查看当前登入主机的用户终端信息,格式为:
who [参数]
这三个简单的字母可以快速显示出所有正在登录本机的用户的名称以及他们正在开启的终端信息。
[root@localhost ~]# who
6、last 命令
last命令用于查看所有系统的登录记录,格式为:
last [参数]
使用last 命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!
[root@localhost ~]# last
7、history 命令
history命令用于显示历史执行过的命令,格式为:
history [-c]
history命令应该是作者最喜欢的命令。执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,还可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,如果使用-c 参数则会清空所有的命令历史记录。
[root@localhost ~]# history
历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用cat命令查看其文件内容。
[root@localhost ~]# cat ~/.bash_history
要清空当前用户在本机上执行的Linux命令历史记录信息,可执行如下命令:
[root@localhost ~]# history -c
8、sosreport 命令
sosreport命令用于收集系统配置及架构信息并输出诊断文档,格式为:
sosreport
当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。在下面的输出信息中,加粗的部分是收集好的资料压缩文件以及校验码,将其发送给技术支持人员即可:
[root@localhost ~]# sosreport
四、工作目录切换命令
1、pwd 命令
pwd命令用于显示用户当前所处的工作目录,格式为
pwd [选项]
[root@localhost etc]# pwd
/etc
2、cd 命令
cd命令用于切换工作路径,格式为:
cd [目录名称]
这个命令应该是最常用的一个Linux命令了。可以通过cd命令迅速、灵活地切换到不同的工作目录。除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd ~”命令切换到当前用户的家目录,亦或使用“cd ~username”切换到其他用户的家目录。例如,可以使用“cd 路径”的方式切换进/etc目录中:
[root@localhost ~]# cd /etc
同样的道理,可使用下述命令切换到/bin目录中:
[root@localhost etc]# cd /bin
此时,要返回到上一次的目录(即/etc目录),可执行如下命令:
[root@localhost bin]# cd -
/etc
[root@localhost etc]#
还可以通过下面的命令快速切换到用户的家目录:
[root@localhost etc]# cd ~
[root@localhost ~]#
3、ls 命令
ls命令用于显示目录中的文件信息,格式为:
ls [选项] [文件]
所处的工作目录不同,当前工作目录下的文件肯定也不同。使用ls命令的“-a”参数看到全部文件(包括隐藏文件),使用“-l”参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行ls 命令即可查看当前目录中的所有文件并输出这些文件的属性信息:
[root@localhost ~]# ls -al
如果想要查看目录属性信息,则需要额外添加一个-d参数。例如,可使用如下命令查看/etc目录的权限与属性信息:
[root@localhost ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc
五、文本文件编辑命令
1、cat 命令
cat命令用于查看纯文本文件(内容较少的),格式为:
cat [选项] [文件]
Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个cat命令就是用于查看内容较少的纯文本文件的。
如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数:
[root@localhost ~]# cat -n initial-setup-ks.cfg
2、more 命令
more命令用于查看纯文本文件(内容较多的),格式为:
more [选项]文件
如果需要阅读长篇小说或者非常长的配置文件,那么“cat”可就真的不适合了。因为一旦使用cat命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,导致自己还没有来得及看到,内容就已经翻篇了。因此对于长篇的文本内容,推荐使用more命令来查看。more命令会在最下面使用百分比的形式来提示您已经阅读了多少内容。您还可以使用空格键或回车键向下翻页:
[root@localhost ~]# more initial-setup-ks.cfg
3、head 命令
head命令用于查看纯文本文档的前N行,格式为:
head [选项] [文件]
在阅读文本内容时,谁也难以保证会按照从头到尾的顺序往下看完整个文件。如果只想查看文本中前20行的内容,该怎么办呢?head命令可以派上用场了:
[root@localhost ~]# 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 ~]#
4、tail 命令
tail命令用于查看纯文本文档的后N行或持续刷新内容,格式为:
tail [选项] [文件]
我们可能还会遇到另外一种情况,比如需要查看文本内容的最后20行,这时就需要用到tail命令了。tail命令的操作方法与head命令非常相似,只需要执行“tail -n 20 文件名”命令就可以达到这样的效果。tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”:
[root@localhost ~]# tail -f /var/log/messages
5、tr 命令
tr命令用于替换文本文件中的字符,格式为:
tr [原始字符] [目标字符]
在很多时候,我们想要快速地替换文本中的一些词汇,又或者把整个文本内容都进行替换,如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时,就可以先使用cat 命令读取待处理的文本,然后通过管道符(“|”)把这些文本内容传递给tr 命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:
[root@localhost ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
6、wc 命令
wc命令用于统计指定文本的行数、字数、字节数,格式为:
wc [参数] 文本
每次我在课堂上讲到这个命令时,总有同学会联想到一种公共设施,其实这两者毫无关联。Linux系统中的wc命令用于统计文本的行数、字数、字节数等。如果为了方便自己记住这个命令的作用,也可以联想到上厕所时好无聊,无聊到数完了手中的如厕读物上有多少行字。
wc的参数以及相应的作用如下:
参数 | 作用 |
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
在Linux系统中,passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询,是不是很神奇:
[root@localhost ~]# wc -l /etc/passwd
38 /etc/passwd
7、stat 命令
stat命令用于查看文件的具体存储信息和时间等信息,格式为:
stat 文件名称
stat命令可以用于查看文件的存储信息和时间等信息,命令stat anaconda-ks.cfg会显示出文件的三种时间状态(已加粗):Access、Modify、Change。这三种时间的区别将在下面的touch命令中详细详解:
[root@localhost ~]# stat anaconda-ks.cfg
8、cut 命令
cut命令用于按“列”提取文本字符,格式为:
cut [参数] 文本
在Linux系统中,如何准确地提取出最想要的数据,这也是我们应该重点学习的内容。一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按列搜索,不仅要使用-f 参数来设置需要看的列数,还需要使用-d 参数来设置间隔符号。
passwd在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的,接下来我们使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
[root@localhost ~]# head -n 2 /etc/passwd
9、diff 命令
diff命令用于比较多个文本文件的差异,格式为:
diff [参数] 文件
在使用diff命令时,不仅可以使用--brief 参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:
[root@localhost ~]# cat diff_A.txt
接下来使用diff --brief命令显示比较后的结果,判断文件是否相同:
[root@localhost ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ
最后使用带有-c参数的diff命令来描述文件内容具体的不同:
[root@localhost ~]# diff -c diff_A.txt diff_B.txt
六、文件目录管理命令
在Linux系统的日常运维工作中,还需要掌握对文件的创建、修改、复制、剪切、更名与删除等操作。
1、touch 命令
touch命令用于创建空白文件或设置文件的时间,格式为:
touch [选项] [文件]
在创建空白的文本文件方面,这个touch命令相当简捷,简捷到没有必要铺开去讲。比如,touch linuxprobe命令可以创建出一个名为linuxprobe的空白文本文件。对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)上 面 。
touch命令的参数及其作用:
参数 | 作用 |
-a | 仅修改“读取时间”(atime) |
-m | 仅修改“修改时间”(mtime) |
-d | 同时修改atime与mtime |
接下来,我们先使用ls命令查看一个文件的修改时间,然后修改这个文件,最后再通过touch命令把修改后的文件时间设置成修改之间的时间:
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1213 May 4 15:44anaconda-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:26anaconda-ks.cfg
[root@localhost ~]# touch -d "2017-05-04 15:44" anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1260 May 4 15:44anaconda-ks.cfg
2、mkdir 命令
mkdir命令用于创建空白的目录,格式为:
mkdir [选项] 目录
在Linux系统中,文件夹是最常见的文件类型之一。除了能创建单个空白目录外,mkdir命令还可以结合-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]#
3、cp 命令
cp命令用于复制文件或目录,格式为:
cp [选项] 源文件 目标文件
在Linux系统中,复制操作具体分为3种情况:
- 如果目标文件是目录,则会把源文件复制到该目录中;
- 如果目标文件也是普通文件,则会询问是否要覆盖它;
- 如果目标文件不存在,则执行正常的复制操作。
cp命令的参数及其作用:
参数 | 作用 |
-p | 保留原始文件的属性 |
-d | 若对象为“链接文件”,则保留该“链接文件”的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于-pdr(p、d、r为上述参数) |
接下来,使用touch创建一个名为install.log的普通空白文件,然后将其复制为一份名为x.log的备份文件,最后再使用ls命令查看目录中的文件:
[root@localhost ~]# touch install.log
[root@localhost ~]# cp install.log x.log
[root@localhost ~]# ls
install.log x.log
4、mv 命令
mv命令用于剪切文件或将文件重命名,格式为:
mv [选项] 源文件[目标路径|目标文件名]
剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名:
[root@localhost ~]# mv x.log linux.log
[root@localhost ~]# ls
install.log linux.log
5、rm 命令
rm命令用于删除文件或目录,格式为:
rm [选项] 文件
在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f参数来强制删除。另外,想要删除一个目录,需要在rm命令后面一个-r参数才可以,否则删除不掉。我们来尝试删除前面创建的install.log和linux.log文件:
[root@localhost ~]# rm install.log
rm: remove regular empty file ‘install.log’? y
[root@localhost ~]# rm -f linux.log
[root@localhost ~]# ls
[root@localhost ~]#
6、dd 命令
dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为:
dd [参数]
dd命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero 的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。
dd命令的参数及其作用
参数 | 作用 |
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个“块”的大小 |
count | 设置要复制“块”的个数 |
例如我们可以用dd命令从/dev/zero 设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件。在理解了这个命令后,以后就能随意创建任意大小的文件了:
[root@localhost ~]# 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系统中需要借助于第三方软件才能做到,但在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它编程一个可立即使用的iso镜像:
[root@localhost ~]# 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
考虑到有些读者会纠结bs块大小与count块个数的关系,下面举一个吃货的例子进行解释。假设小明的饭量(即需求)是一个固定的值,用来盛饭的勺子的大小即bs块大小,而用勺子盛饭的次数即count 块个数。小明要想吃饱(满足需求),则需要在勺子大小(bs块大小)与用勺子盛饭的次数(count块个数)之间进行平衡。勺子越大,用勺子盛饭的次数就越少。有上可见,bs与count都是用来指定容量的大小,只要能满足需求,可随意组合搭配方式。
7.file 命令
file命令用于查看文件的类型,格式为:
file 文件名
在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用file命令来查看文件类型了。
[root@localhost ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
[root@localhost ~]# file /dev/sda
/dev/sda: block special
七、打包压缩与搜索命令
1、tar 命令
tar命令用于对文件进行打包压缩或解压,格式为:
tar [选项] [文件]
在Linux系统中,常见的文件格式比较多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式,我们不用担心格式太多而记不住,其实这些格式大部分都是由tar 命令来生成的。
tar命令的参数及其作用:
参数 | 作用 |
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用Gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。
用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v 参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。
先使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:
[root@localhost ~]# tar -czvf etc.tar.gz /etc
接下来将打包后的压缩包文件指定解压到/root/etc 目录中(先使用mkdir命令来创建/root/etc目录):
[root@localhost ~]# mkdir /root/etc
[root@localhost ~]# tar xzvf etc.tar.gz -C /root/etc
2、grep 命令
grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为:
grep [选项] [文件]
grep命令的参数及其作用:
参数 | 作用 |
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择—仅列出没有“关键词”的行 |
在Linux系统中,/etc/passwd 文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息:
[root@localhost ~]# grep /sbin/nologin /etc/passwd
3、find 命令
find命令用于按照指定条件来查找文件,格式为:
find [查找路径] 寻找条件 操作
在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。
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 | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
-prune | 忽略某个目录 |
-exec ……{}\; | 后面可跟用于进一步处理搜索结果的命令(下文会有演示) |
如果要想获取到该目录中所有以host开头的文件列表,可以执行如下命令:
[root@localhost ~]# 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即可:
[root@localhost ~]# find / -perm -4000 -print
在整个文件系统中找出所有归属于admin用户的文件并复制到/root/findresults目录。这里的重点是“-exec {} \;”参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“\;”。完成该实验的具体命令如下:
[root@localhost ~]# find / -user admin -exec cp -a {} /root/findresults/ \;
八、输入输出重定向
输入重定向是把文件导入到命令中的,而输出重定向则是把 原本要输出到屏幕的内容信息写入到指定文件中。输出重定向分为标准输出重定向和错误输出重定向两种。
- 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入;
- 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕;
- 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。
1、输入重定向中用到的符号及其作用:
符号 | 作用 |
命令< 文件 | 将文件作为命令的标准输入 |
命令<< 分界符 | 从标准输入中读入,直到遇见分界符才停止 |
命令< 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
2、输出重定向中用到的符号及其作用:
符号 | 作用 |
命令> 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令>> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令>> 文件2>&1 或 命令&>> 文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
通过标准输出重定向将man bash命令原本要输出到屏幕的信息写入到文件readme.txt中,然后显示readme.txt文件中的内容:
[root@localhost ~]# man bash > test.txt
[root@localhost ~]# cat test.txt
注意:对于重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2是必须要写的。
覆盖写入模式向test.txt文件写入一行数据, 会覆盖源文件的的内容:
[root@localhost ~]# echo "hello" > test.txt
[root@localhost ~]# echo "hello world" >> test.txt
[root@localhost ~]# cat test.txt
hello
hello world
输入重定向把test.txt文件导入给wc -l命令,统计一下文件中的内容行数:
[root@localhost ~]# wc -l < test.txt
2
九、管道命令符、命令行的通配符、常用的转义字符、重要的环境变量
1、 管道命令符
管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”。
1.1、如用翻页的形式查看/etc目录中的文件列表及属性信息:
[root@localhost ~]# ls -l /etc/ | more
total 1400
drwxr-xr-x. 3 root root 97 Jul 10 17:26 abrt
-rw-r--r--. 1 root root 16 Jul 10 17:36 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Jul 10 09:38 aliases.db
drwxr-xr-x. 2 root root 49 Jul 10 17:26 alsa
drwxr-xr-x. 2 root root 4096 Jul 10 17:31 alternatives
-rw-------. 1 root root 541 Jan 28 2017 anacrontab
-rw-r--r--. 1 root root 55 Jan 29 2017 asound.conf
-rw-r--r--. 1 root root 1 Jan 29 2017 at.deny
drwxr-xr-x. 2 root root 31 Jul 10 17:27 at-spi2
drwxr-x---. 3 root root 41 Jul 10 17:26 audisp
drwxr-x---. 3 root root 79 Jul 10 17:37 audit
drwxr-xr-x. 4 root root 94 Jul 10 17:26 avahi
--More--
1.2、通过把管道符和passwd命令的--stdin参数相结合,我们可以用一条命令来完成密码重置操作:
[root@localhost ~]# echo "123456" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
2、命令行的通配符
如果只想查看文件名为tes开头,但是后面还紧跟其他某一个字符的文件的相关信息,该怎么操作呢?这时就需要用到问号来进行通配了。
2.1、星号(*)代表匹配零个或多个字符:
[root@localhost ~]# ls -l /dev/test*
brw-rw----. 1 root disk 8, 0 May 4 15:55 /dev/test
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/test1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/test2
2.2、问号(?)代表匹配单个字符:
[root@localhost ~]# ls -l /dev/test?
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/test1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/test2
2.3、中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符:
[root@localhost ~]# ls -l /dev/test[0-9]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/test1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/test2
2.4、中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符:
[root@localhost ~]# ls -l /dev/test[258]
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/test2
3、常用的转义字符
- 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串;
- 单引号(''):转义其中所有的变量为单纯的字符串;
- 双引号(""):保留其中的变量属性,不进行转义处理;
- 反引号(``):把其中的命令执行后返回结果。
先定义一个名为PRICE的变量并赋值为5,然后输出以双引号括起来的字符串与变量信息,最后希望能够输出“Price is $5”:
[root@localhost ~]# PRICE=5
[root@localhost ~]# echo "Price is $PRICE"
Price is 5
[root@localhost ~]# echo "Price is $$PRICE"
Price is 3767PRICE
但是碰巧美元符号与变量提取符号合并后的$$作用是显示当前程序的进程ID号码,于是命令执行后输出的内容并不是我们所预期的。要想让第一个“$”乖乖地作为美元符号,那么就需要使用反斜杠(\)来进行转义:
[root@localhost ~]# echo "Price is \$$PRICE"
Price is $5
4、重要的环境变量
变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都是大写的,这是一种约定俗成的规范。我们可以直接通过变量名称来提取到对应的变量值。
Linux系统中最重要的10个环境变量:
变量名称 | 作用 |
HOME | 用户的主目录(即家目录) |
SHELL | 用户在使用的Shell解释器名称 |
HISTSIZE | 输出的历史命令记录条数 |
HISTFILESIZE | 保存的历史命令记录条数 |
邮件保存路径 | |
LANG | 系统语言、语系名称 |
RANDOM | 生成一个随机数字 |
PS1 | Bash解释器的提示符 |
PATH | 定义解释器搜索用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |
4.1、使用下述命令来查看HOME变量在不同用户身份下都有哪些值 :
[root@localhost ~]# echo $HOME
/root
4.2、设置一个名称为WORKDIR的变量,方便用户更轻松地进入一个层次较深的目录:
[root@localhost ~]# mkdir /home/workdir
[root@localhost ~]# WORKDIR=/home/workdir
[root@localhost ~]# cd $WORKDIR
[root@localhost workdir]# pwd
/home/workdir
十、强大好用的 Shell与Vim 编辑器
1、Shell 命令脚本
计算机硬件主要由运算器、存储器、输入/输出设备等组成的,而让各种设备各司其职又能协同运行的东西就是系统内核。Linux系统的内核负责完成对硬件资源的分配、调度等管理任务。由此可见,系统内核对计算机的正常运行来讲是太重要了,因此一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机,以满足日常工作的需要。
Shell是一个命令行工具,也称为终端或壳,充当的是人与内核(硬件)之间的翻译官,用户把一些命令告诉终端,他就会调用相应的程序去完成某些工作。
1.1、Shell脚本命令的工作方式有两种:交互式和批处理。
- 交互式(Interactive):用户每输入一条命令就立即执行。
- 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。
2、Vim 编辑器
Vim之所以能得到广大厂商与用户的认可,原因在于Vim编辑器中设置了三种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。
- 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
- 输入模式:正常的文本录入。
- 末行模式:保存或退出文档,以及设置编辑环境。
在每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。
2.1、Vim中常用的命令:
命令 | 作用 |
dd | 删除(剪切)光标所在整行 |
5dd | 删除(剪切)从光标处开始的5行 |
yy | 复制光标所在整行 |
5yy | 复制从光标处开始的5行 |
n | 显示搜索命令定位到的下一个字符串 |
N | 显示搜索命令定位到的上一个字符串 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
2.2、末行模式中可用的命令:
命令 | 作用 |
:w | 保存 |
:q | 退出 |
:q! | 强制退出(放弃对文档的修改内容) |
:wq! | 强制保存退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:命令 | 执行该命令 |
:整数 | 跳转到该行 |
:s/one/two | 将当前光标所在行的第一个one替换成two |
:s/one/two/g | 将当前光标所在行的所有one替换成two |
:%s/one/two/g | 将全文中的所有one替换成two |
?字符串 | 在文本中从下至上搜索该字符串 |
/字符串 | 在文本中从上至下搜索该字符串 |