云起实验室-冬季实战营第二期实验总结
Linux指令入门
文件管理
cat命令
cat命令描述:该命令用于连接文件并打印到标准输出设备上。
cat命令语法:
cat [参数] [文件名]
参数说明:
参数 |
说明 |
-n |
由1开始对所有输出的行数进行编号。 |
-b |
由1开始对所有输出的行数进行编号,对于空白行不编号。 |
-s |
当遇到有连续两行以上的空白行,就替换为一行的空白行。 |
-E |
在每行结束处显示$。 |
-T |
将 TAB 字符显示为^I。 |
cat命令使用示例:
a. 执行如下命令,将一个自增序列写入test1.txt文件中。
for i in $(seq 1 10); do echo $i >> test1.txt ; done
b. 执行如下命令,查看文件test1.txt内容。
cat test1.txt
返回结果如下所示。
编辑搜图
c. 执行如下命令,将test1.txt的文件内容加上行号后输入到test2.txt文件。
cat -n test1.txt > test2.txt
d. 执行如下命令,查看文件test2.txt内容。
cat test2.txt
返回结果如下所示。
编辑搜图
e. 执行如下命令,将test1.txt文件内容清空。
cat /dev/null > test1.txt
f. 执行如下命令,查看文件test1.txt内容。
cat test1.txt
返回结果如下所示,您可以看到test1.txt文件没有任何内容。
cmp命令
cmp命令描述:该命令用于比较两个文件是否有差异。当相互比较的两个文件完全一样时,该指令不会显示任何信息。否则会标示出第一个不同之处的字符和列数编号。当不指定任何文件名称,或文件名为"-",则cmp指令会从标准输入设备读取数据。
cmp命令语法:
cmp [-clsv][-i <字符数目>][--help][第一个文件][第二个文件]
参数说明:
参数 |
说明 |
-c |
除了标明差异处的十进制字码之外,一并显示该字符所对应字符。 |
-i <字符数目> |
指定一个数目。 |
-l |
标示出所有不一样的地方。 |
-s |
不显示错误信息。 |
-v |
显示版本信息。 |
--help |
在线帮助。 |
cmp命令使用示例:
a. 执行如下命令,将一个自增序列1-5写入test1.txt文件中。
for i in $(seq 1 5); do echo $i >> test1.txt ; done
b. 执行如下命令,比较test1.txt文件和test2.txt文件是否相同。
cmp test1.txt test2.txt
返回结果如下所示,您可以看到test1.txt文件和test2.txt文件第一行就有不同之处。
diff命令
diff命令描述:该命令用于比较文件的差异。diff命令以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。
diff命令语法:
diff [参数] [文件或目录1] [文件或目录2]
参数说明:
参数 |
说明 |
-<行数> |
指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。 |
-c |
显示全部内文,并标出不同之处。 |
-u |
以合并的方式来显示文件内容的不同。 |
-a |
diff预设只会逐行比较文本文件。 |
-b |
不检查空格字符的不同。 |
-d |
使用不同的演算法,以较小的单位来做比较。 |
-i |
不检查大小写的不同。 |
-y |
以并列的方式显示文件的异同之处。 |
-W<宽度> |
在使用-y参数时,指定栏宽。 |
diff命令使用示例:
执行如下命令,比较test1.txt文件和test2.txt文件,以并排格式输出。
diff test1.txt test2.txt -y -W 50
返回结果如下所示,您可以看到test1.txt文件和test2.txt文件的不同之处。
编辑搜图
file命令
file命令描述:该命令用于辨识文件类型。
file命令语法:
file [参数] [文件]
参数说明:
参数 |
说明 |
-b |
列出辨识结果时,不显示文件名称。 |
-c |
详细显示指令执行过程,便于排错或分析程序执行的情形。 |
-f<名称文件> |
指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。 |
-L |
直接显示符号连接所指向的文件的类别。 |
-v |
显示版本信息。 |
-z |
解读压缩文件的内容。 |
file命令使用示例:
a. 执行如下命令,显示test1.txt文件类型。
file test1.txt
返回结果如下所示,您可以看到test1.txt文件类型是ASCII text。
b. 执行如下命令,显示test2.txt文件类型并不显示文件名称。
file -b test2.txt
find命令
find命令描述:该命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
find命令语法:
find [参数] [文件]
参数说明:
参数 |
说明 |
-mount |
只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件。 |
-amin n |
在过去n分钟内被读取过文件。 |
-type c |
文件类型是c的文件。 |
-cmin n |
在过去n分钟内被修改过。 |
-name name |
查找文件名称为name的文件。 |
find命令使用示例:
a. 执行如下命令,将当前目录及其子目录下所有文件后缀为.txt的文件列出来。
find . -name "*.txt"
返回结果如下所示。
b. 执行如下命令,查找系统中所有文件长度为0的普通文件,并列出它们的完整路径。
find / -type f -size 0 -exec ls -l {} \;
返回结果如下所示。
编辑搜图
文件与权限
ls命令
命令描述: ls命令用于显示指定工作目录下的内容。
命令格式:ls [参数] [目录名]。
参数说明:
参数 |
说明 |
-a |
显示所有文件及目录(包括隐藏文件) |
-l |
将文件的权限、拥有者、文件大小等详细信息列出(ll等同于ls -l) |
-r |
将文件反序列出(默认按英文字母正序) |
-t |
将文件按创建时间正序列出 |
-R |
递归遍历目录下文件 |
命令使用示例:
查看当前目录下的所有文件(包括隐藏文件)。
ll -a
命令输出结果:
编辑搜图
ll命令
ll命令用于显示当前文件下非隐藏文件的详情
编辑搜图
查询结果分为7栏:
1)如' -rw-r--r--' 表示三种用户对该文件的不同权限:
r:可读;w:可写;x:可执行
其中第一个字母表示:
'-':普通文件
'd':文件夹,是dirtectory单词的缩写
''b':块设备文件
'c':字符设备文件
2)如 ' 1 ' 表示该文件或文件夹中有多少子文件,如果是文件类型自然就是1了。
3)如 ' zhengbin ' 表示该文件或目录的拥有者。若使用者目前处于自己的HOME目录,那么查询的结果大概都是它的账号名称。
4)表示所属的组(group),每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。
5)表示文件的大小,文件大小用byte表示。
6)表示最后一次修改时间。以“月 日 时间”格式表示。
7)表示文件名。
pwd命令
命令描述:获取当前工作目录的绝对路径。
命令使用示例:
cd命令
命令描述:cd命令用于切换工作目录。
命令使用示例:
编辑搜图
在路径表示中:
-
一个半角句号(.)表示当前目录,例如路径./app/log等同于app/log。
-
两个半角句号(..)表示上级目录,例如路径/usr/local/../src等同于/usr/src,其中local和src目录同级。
cd命令的默认参数为~,符号~表示当前用户的家目录,即在root用户登录时,命令cd、cd ~和cd /root执行效果相同。
touch命令
命令描述:touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
命令格式:touch [参数] [文件]。
参数说明:
参数 |
说明 |
-c |
如果指定文件不存在,不会建立新文件 |
-r |
使用参考文件的时间记录 |
-t |
设置文件的时间记录 |
命令使用示例:
-
创建两个空文件。
touch demo1.txt demo2.txt
-
修改demo1.txt的时间记录为当前系统时间。
-
更新demo2.txt的时间记录,使其和demo1.txt的时间记录相同。
mkdir命令
命令描述:mkdir命令用于新建子目录。-p参数确保目录名称存在,不存在的就新建一个。
mkdir -p a/b/c/d
命令使用示例:
新建目录a/b/c/d,并使用tree命令查看创建后的目录结构。
tree
编辑搜图
rm命令
命令描述:rm命令用于删除一个文件或者目录。
命令格式:rm [参数] [文件]。
参数说明:
参数 |
说明 |
-i |
删除前逐一询问确认 |
-f |
无需确认,直接删除 |
-r |
删除目录下所有文件 |
命令使用示例:
无需确认直接删除文件。
rm -rf demo*
编辑搜图
无需确认直接删除目录a及其目录下所有子目录和文件。
rm -rf a
慎用此命令,如不确定必须删除文件,建议先备份再删除
cp命令
命令描述: cp命令主要用于复制文件或目录。
命令格式:cp [参数] [源文件] [目标文件]。
参数说明:
参数 |
说明 |
-d |
复制时保留链接 |
-f |
覆盖已经存在的目标文件而不给出提示 |
-i |
覆盖前询问 |
-p |
除复制文件的内容外,还把修改时间和访问权限也复制到新文件中 |
-r |
复制目录及目录内的所有项目 |
命令使用示例:
将目录c/d中的所有内容复制到目录a/b下。
mv命令
命令描述: mv命令用来为文件或目录改名、或将文件或目录移入其它位置。
命令格式:mv [参数] [源文件] [目标文件]
参数说明:
参数 |
说明 |
-i |
若指定目录已有同名文件,则先询问是否覆盖旧文件 |
-f |
如果目标文件已经存在,不会询问而直接覆盖 |
命令使用示例:
-
将文件名a.txt改为b.txt。
-
-
将c目录移动到a/b/c/d/下。
-
-
将当前目录内容全部移动到/tmp目录中。
mv ./* /tmp
rename命令
命令描述:rename命令用字符串替换的方式批量改变文件名。rename命令有C语言和Perl语言两个版本,这里介绍C语言版本的rename命令,不支持正则表达式。
命令使用示例:
-
将当前目录下所有文件名中的字符串demo改为大写的字符串DEMO。
-
-
将当前目录下所有.txt文件后缀都改为text。
磁盘管理
df命令
df命令描述:该命令检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
df命令语法:
df [参数] [目录或文件名]
参数说明:
参数 |
说明 |
-a |
列出所有的文件系统,包括系统特有的/proc等文件系统。 |
-k |
以KBytes为单位,返回各文件系统容量。 |
-m |
以MBytes为单位,返回各文件系统容量。 |
-h |
以GBytes、MBytes、KBytes为单位,返回各文件系统容量。 |
-H |
以M=1000K取代M=1024K的进位方式显示各文件系统容量。 |
-T |
显示文件系统类型。 |
-i |
显示inode信息。 |
df命令使用示例:
示例一:显示磁盘使用情况。
执行如下命令,显示磁盘使用情况。
df
返回结果如下所示。
示例二:以inode模式来显示磁盘使用情况。
执行如下命令,以inode模式来显示磁盘使用情况。
df -i
返回结果如下所示。
示例三:显示系统内的所有特殊文件格式、名称及磁盘使用情况。
执行如下命令,显示系统内的所有特殊文件格式、名称及磁盘使用情况。
df -aT
返回结果如下所示。
编辑搜图
示例四:以GBytes、MBytes、KBytes等格式显示各文件系统容量。
执行如下命令,以GBytes、MBytes、KBytes等格式显示各文件系统容量。
df -h
返回结果如下所示。
du命令
du命令描述:查看磁盘使用空间。du与df命令不同点在于,du命令用于查看文件和目录磁盘的使用空间。
du命令语法:
du [参数] [文件或目录名称]
参数说明:
参数 |
说明 |
-a |
列出所有的文件与目录容量。 |
-h |
以G、M、K为单位,返回容量。 |
-s |
列出总量。 |
-S |
列出不包括子目录下的总量。 |
-k |
以KBytes为单位,返回容量。 |
-m |
以MBytes为单位,返回容量。 |
du命令使用示例:
示例一:列出当前目录下的所有文件夹的容量。
执行如下命令,列出当前目录下的所有文件夹的容量。
du
返回结果如下所示。
示例二:列出当前目录下的所有文件夹和文件的容量。
执行如下命令,列出当前目录下的所有文件夹和文件的容量。
du -a
返回结果如下所示。
编辑搜图
示例三:列出当前目录下的所有文件夹和文件的容量,并以G、M、K格式显示容量。
执行如下命令,列出当前目录下的所有文件夹和文件的容量。
du -ah
返回结果如下所示。
编辑搜图
示例四:列出根目录底下每个目录所占用的容量,并以MBytes单位显示容量。
执行如下命令,列出根目录底下每个目录所占用的容量,并以MBytes单位显示容量。
du -sm /*
返回结果如下所示。
编辑搜图
fdisk命令
fdisk命令描述:该命令用于磁盘分区。
fdisk命令语法:
fdisk [-l] 装置名称
参数说明:
参数 |
说明 |
-l |
输出后面装置名称的所有的分区内容。若仅有 fdisk -l时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。 |
fdisk命令使用示例:
示例一:列出系统所有装置的分区信息。
执行如下命令,列出系统所有装置的分区信息。
fdisk -l
返回结果如下所示。
编辑搜图
示例二:列出系统中的根目录所在磁盘,并查阅该硬盘内的相关信息。
a. 执行如下命令,找出根目录所在磁盘名。
df /
返回结果如下所示。
b. 执行如下命令,对磁盘/dev/vda进行分区操作。
fdisk /dev/vda
注意:
对磁盘进行分区操作时,磁盘名不包含数字。
返回结果如下所示。
c. 执行如下命令,获取帮助。
m
返回结果如下所示。
编辑搜图
执行如下命令,查看磁盘状态。
p
返回结果如下所示,您可以查看到磁盘的相关状态。
编辑搜图
d. 执行如下命令,不存储任何操作并离开。
q
系统管理
echo命令
命令描述:echo命令用于在终端输出字符串或变量提取后的值。
命令格式:echo [字符串 | $变量]
命令用法示例:
显示普通字符串
显示变量
首先在shell环境中定义一个临时变量name。
export name="Tom"
使用echo命令将变量name的值显示到终端。
echo $name
输出结果:
显示结果定向至文件
以下命令会将文本This is a test text.输出重定向到文件test.txt中,如果文件已存在,将会覆盖文件内容,如果不存在则创建。其中>符号表示输出重定向。
echo "This is a test text." > test.txt
如果您希望将文本追加到文件内容最后,而不是覆盖它,请使用>>输出追加重定向符号。
显示命令执行结果
以下命令将会在终端显示当前的工作路径。
echo `pwd`
使用$(command)形式可以达到相同效果。
echo $(pwd)
输出结果:
date命令
命令描述:date命令用于显示和设置系统的时间和日期。
命令格式:date [选项] [+格式]
其中,时间格式的部分控制字符解释如下:
字符 |
说明 |
%a |
当地时间的星期名缩写(例如: 日,代表星期日) |
%A |
当地时间的星期名全称 (例如:星期日) |
%b |
当地时间的月名缩写 (例如:一,代表一月) |
%B |
当地时间的月名全称 (例如:一月) |
%c |
当地时间的日期和时间 (例如:2005年3月3日 星期四 23:05:25) |
%C |
世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20) |
%d |
按月计的日期(例如:01) |
%D |
按月计的日期;等于%m/%d/%y |
%F |
完整日期格式,等价于 %Y-%m-%d |
%j |
按年计的日期(001-366) |
%p |
按年计的日期(001-366) |
%r |
当地时间下的 12 小时时钟时间 (例如:11:11:04 下午) |
%R |
24 小时时间的时和分,等价于 %H:%M |
%s |
自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 |
%T |
时间,等于%H:%M:%S |
%U |
一年中的第几周,以周日为每星期第一天(00-53) |
%x |
当地时间下的日期描述 (例如:12/31/99) |
%X |
当地时间下的时间描述 (例如:23:13:48) |
%w |
一星期中的第几日(0-6),0 代表周一 |
%W |
一年中的第几周,以周一为每星期第一天(00-53) |
命令用法示例:
-
按照默认格式查看当前系统时间
date
输出结果:
按照指定格式查看当前系统时间
date "+%Y-%m-%d %H:%M:%S"
输出结果:
查看今天是当年中的第几天
date "+%j"
输出结果:
将系统的当前时间设置为2020年02月20日20点20分20秒
date -s "20200220 20:20:20"
输出结果:
校正系统时间,与网络时间同步
a. 安装ntp校时工具
yum -y install ntp
b. 用ntpdate从时间服务器更新时间
ntpdate time.nist.gov
输出结果:
wget命令
命令描述:在终端中下载文件。
命令格式:wget [参数] 下载地址
参数说明:
参数 |
作用 |
-b |
后台下载 |
-P |
下载到指定目录 |
-t |
最大重试次数 |
-c |
断点续传 |
-p |
下载页面内所有资源,包括图片、视频等 |
-r |
递归下载 |
命令使用示例:
下载一张图片到路径/root/static/img/中,-p参数默认值为当前路径,如果指定路径不存在会自动创建。
wget -P /root/static/img/ http://img.alicdn.com/tfs/TB1.R._t7L0gK0jSZFxXXXWHVXa-2666-1500.png
输出结果:
ps命令
命令描述:ps命令用于查看系统中的进程状态。
命令格式:ps [参数]。
命令参数说明:
参数 |
作用 |
-a |
显示现行终端机下的所有程序,包括其他用户的程序 |
-u |
以用户为主的格式来显示程序状况 |
-x |
显示没有控制终端的进程,同时显示各个命令的具体路径 |
-e |
列出程序时,显示每个程序所使用的环境变量 |
-f |
显示当前所有的进程 |
-t |
指定终端机编号,并列出属于该终端机的程序的状况 |
命令使用示例:
ps -ef | grep sshd
输出结果:
top命令
命令描述:top命令动态地监视进程活动与系统负载等信息。
命令使用示例:
top
输出结果:
编辑搜图
命令输出参数解释:
以上命令输出视图中分为两个区域,一个统计信息区,一个进程信息区。
统计信息区
第一行信息依次为:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
第二行信息依次为:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第三行信息依次为:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
第四行信息依次为:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
第五行信息依次为:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、预加载内存量。
进程信息区
列名 |
含义 |
PID |
进程ID |
USER |
进程所有者的用户名 |
PR |
进程优先级 |
NI |
nice值。负值表示高优先级,正值表示低优先级 |
VIRT |
进程使用的虚拟内存总量,单位kb |
RES |
进程使用的、未被换出的物理内存大小,单位kb |
SHR |
共享内存大小,单位kb |
S |
进程状态D:不可中断的睡眠状态R:正在运行S:睡眠T:停止Z:僵尸进程 |
%CPU |
上次更新到现在的CPU时间占用百分比 |
%MEM |
进程使用的物理内存百分比 |
TIME+ |
进程使用的CPU时间总计,单位1/100秒 |
COMMAND |
命令名 |
按 q 键退出监控页面。
pidof命令
命令描述:pidof命令用于查询指定服务进程的PID值。
命令格式:pidof [服务名称]。
命令参数说明:
参数 |
说明 |
-s |
仅返回一个进程号 |
-c |
只显示运行在root目录下的进程,这个选项只对root用户有效 |
-o |
忽略指定进程号的进程 |
-x |
显示由脚本开启的进程 |
命令使用示例:
查询出crond服务下的所有进程ID。
pidof crond
输出结果:
kill命令
命令描述:kill命令用于终止指定PID的服务进程。
kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。
命令格式:kill [参数] [进程PID]。
命令使用示例:
删除pid为1247的进程。
kill -9 1247
killall命令
命令描述:killall命令用于终止指定名称的服务对应的全部进程。
命令格式:killall [进程名称]。
命令使用示例:
删除crond服务下的所有进程。
killall crond
文本处理
文本编辑工具Vim
vim的三种操作模式
vim有三种操作模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。
三种模式切换快捷键:
模式 |
快捷键 |
命令模式 |
ESC |
输入模式 |
i或a |
底线命令模式 |
: |
命令模式
在命令模式中控制光标移动和输入命令,可对文本进行复制、粘贴、删除和查找等工作。
使用命令vim filename后进入编辑器视图后,默认模式就是命令模式,此时敲击键盘字母会被识别为一个命令,例如在键盘上连续敲击两次d,就会删除光标所在行。
以下是在命令模式中常用的快捷操作:
操作 |
快捷键 |
光标左移 |
h |
光标右移 |
l(小写L) |
光标上移 |
k |
光标下移 |
j |
光标移动到下一个单词 |
w |
光标移动到上一个单词 |
b |
移动游标到第n行 |
nG |
移动游标到第一行 |
gg |
移动游标到最后一行 |
G |
快速回到上一次光标所在位置 |
Ctrl+o |
删除当前字符 |
x |
删除前一个字符 |
X |
删除整行 |
dd |
删除一个单词 |
dw或daw |
删除至行尾 |
d$或D |
删除至行首 |
d^ |
删除到文档末尾 |
dG |
删除至文档首部 |
d1G |
删除n行 |
ndd |
删除n个连续字符 |
nx |
将光标所在位置字母变成大写或小写 |
~ |
复制游标所在的整行 |
yy(3yy表示复制3行) |
粘贴至光标后(下) |
p |
粘贴至光标前(上) |
P |
剪切 |
dd |
交换上下行 |
ddp |
替换整行,即删除游标所在行并进入插入模式 |
cc |
撤销一次或n次操作 |
u{n} |
撤销当前行的所有修改 |
U |
恢复撤销操作 |
Ctrl+r |
整行将向右缩进 |
>> |
整行将向左退回 |
<< |
若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开 |
ZZ |
输入模式
在命令模式下按i或a键就进入了输入模式,在输入模式下,您可以正常的使用键盘按键对文本进行插入和删除等操作。
底线命令模式
在命令模式下按:键就进入了底线命令模式,在底线命令模式中可以输入单个或多个字符的命令。
操作 |
命令 |
保存 |
:w |
退出 |
:q |
保存并退出 |
:wq(:wq!表示强制保存退出) |
将文件另存为其他文件名 |
:w new_filename |
显示行号 |
:set nu |
取消行号 |
:set nonu |
使本行内容居中 |
:ce |
使本行文本靠右 |
:ri |
使本行内容靠左 |
:le |
向光标之下寻找一个名称为word的字符串 |
:/word |
向光标之上寻找一个字符串名称为word的字符串 |
:?word |
重复前一个搜寻的动作 |
:n |
从第一行到最后一行寻找word1字符串,并将该字符串取代为word2 |
:1,$s/word1/word2/g或 :%s/word1/word2/g |
使用示例
在本示例将使用vim在文本文件中写入一首唐诗。
1. 新建一个文件并进入vim命令模式(因为涉及中文需要您自行点击右下角进行中英文切换)。
vim 静夜思.txt
编辑搜图
2. 按下i进入输入模式,输入《静夜思》的诗名。
编辑搜图
3. 按下ECS键回到命令模式,并输入底线命令:ce,使诗名居中。
编辑搜图
4. 按下o键换行并进入输入模式,输入第一行诗。
编辑搜图
5. 按下ECS键回到命令模式,并输入底线命令:ce,使第一行诗居中。
编辑搜图
6. 按下o键换行并进入输入模式,输入第二行诗。
编辑搜图
7. 按下ECS键回到命令模式,并输入底线命令:ce,使第二行诗居中。
编辑搜图
8. 在命令模式中执行底线命令:wq离开vim。
我有话说: