开学之后感觉反而没有学习的动力了,学习1分钟,玩手机1小时🤣,所以决定换个新的东西学学。本来打算买个服务器折腾,但是最后还是选择了先学Linux,学的差不多了在去搞服务器,毕竟小白一个,什么都不会。

首先是安装了虚拟机,我用的是VMware,然后按照步骤,安装了CentOS7,具体的步骤这里就不说了,可以自己去Google。

一开始我选的是鸟哥的书,但是……一千多页……给跪了,然后就转了《Linux就该这么学》。

接下来就是学习笔记了:(都是是命令)

查看帮助命令

man 命令中常用按键以及用途

按键 用途
空格键 向下翻一页
PaGe down 向下翻一页
PaGe up 向上翻一页
home 直接前往首页
end 直接前往尾页
/ 从上至下搜索某个关键词,如“/linux”
从下至上搜索某个关键词,如“?linux”
n 定位到下一个搜索到的关键词
N 定位到上一个搜索到的关键词
q 退出帮助文档

man 命令帮助信息的结构以及意义

结构名称 代表意义
NAME 命令的名称
SYNOPSIS 参数的大致使用方法
DESCRIPTION 介绍说明
EXAMPLES 演示(附带简单说明)
OVERVIEW 概述
DEFAULTS 默认的功能
OPTIONS 具体的可用选项(带介绍)
ENVIRONMENT 环境变量
FILES 用到的文件
SEE ALSO 相关的资料
HISTORY 维护历史与联系方式

常用系统工作命令

echo 命令

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

例如:使用$变量的方式提取变量 SHELL 的值:

1
2
[kanxz@study ~]$ echo $SHELL
/bin/bash

date 命令

参数 作用
%t 跳格[Tab 键]
%H 小时(00~23)
%I 小时(00~12)
%M 分钟(00~59)
%S 秒(00~59)
%j 今年中的第几天
1
2
[kanxz@study ~]$ date +%j
053

reboot 命令

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

由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用 root 管理员来重启,其命令如下:

poweroff 命令

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

该命令与 reboot 命令相同,都会涉及硬件资源的管理权限,因此默认只有 root 管理员才可以关闭电脑,其命令如下:

wget 命令

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

ps 命令

ps 命令用于查看系统中的进程状态,格式为“ps [参数]”。

Linux 系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在Linux 系统中,有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。

  • R(运行):进程正在运行或在运行队列中等待。
  • S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
  • D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
  • Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。
  • T(停止):进程收到停止信号后停止运行。

top 命令

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

top 命令相当强大,能够动态地查看系统运维状态,完全将它看作 Linux 中的“强化版的Windows 任务管理器”

top命令运行界面

图中,top 命令执行结果的前 5 行为系统整体的统计信息,其所代表的含义如下。

  • 第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为 1 分钟、5分钟、15 分钟内的平均值,数值越小意味着负载越低)。

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

  • 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。 第 3 行中的数据均为 CPU 数据并以百分比格式显示,例如“97.1 id”意味着有 97.1%的 CPU 处理器资源处于空闲。

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

  • 第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。

  • PID — 进程id

    USER — 进程所有者

    PR — 进程优先级

    NI — nice值。负值表示高优先级,正值表示低优先级

    VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

    RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

    SHR — 共享内存大小,单位kb

    S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

    %CPU — 上次更新到现在的CPU时间占用百分比

    %MEM — 进程使用的物理内存百分比

    TIME+ — 进程使用的CPU时间总计,单位1/100秒

    COMMAND — 进程名称(命令名/命令行)

pidof 命令

pidof 命令用于查询某个指定服务进程的 PID 值,格式为“pidof [参数] [服务名称]”

kill 命令

kill 命令用于终止某个指定 PID 的服务进程,格式为“kill [参数] [进程 PID]”。

killall 命令

killall 命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [进程名称]”。


工作目录切换命令

pwd 命令

pwd 命令用于显示用户当前所处的工作目录,格式为“pwd [选项]”。

1
2
[kanxz@study ~]$ pwd
/home/kanxz

cd 命令

cd 命令用于切换工作路径,格式为“cd [目录名称]”。

这个命令应该是最常用的一个 Linux 命令了。可以通过 cd 命令迅速、灵活地切换到不同的工作目录。除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录,使用“cd…”命令进入上级目录,以及使用“cd ~”命令切换到当前用户的家目录,亦或使用“cd ~username”切换到其他用户的家目录。例如,可以使用“cd 路径”的方式切换进/etc 目录中:

1
2
[kanxz@study ~]$ cd /etc
[kanxz@study etc]$

同样的道理,可使用下述命令切换到/bin 目录中。

此时,要返回到上一次的目录(即/etc 目录),可执行如下命令:

1
2
3
[kanxz@study bin]$ cd -
/etc
[kanxz@study etc]$

还可以通过下面的命令快速切换到用户的家目录:

1
2
[kanxz@study etc]$ cd ~
[kanxz@study ~]$

ls 命令

ls 命令用于显示目录中的文件信息,格式为“ls [选项] [文件] ”。

所处的工作目录不同,当前工作目录下的文件肯定也不同。使用 ls 命令的“-a”参数看到全部文件(包括隐藏件),使用“-l”参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行 ls 命令即可查看当前目录中的所有文件并输出这些文件的属性信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[kanxz@study ~]$ ls -al
总用量 32
drwx------. 15 kanxz kanxz 4096 2月 22 23:05 .
drwxr-xr-x. 3 root root 19 2月 22 22:58 ..
-rw-------. 1 kanxz kanxz 48 2月 22 23:08 .bash_history
-rw-r--r--. 1 kanxz kanxz 18 8月 8 2019 .bash_logout
-rw-r--r--. 1 kanxz kanxz 193 8月 8 2019 .bash_profile
-rw-r--r--. 1 kanxz kanxz 231 8月 8 2019 .bashrc
drwx------. 15 kanxz kanxz 4096 2月 22 23:36 .cache
drwxr-xr-x. 14 kanxz kanxz 261 2月 22 23:02 .config
drwx------. 3 kanxz kanxz 25 2月 22 23:01 .dbus
-rw-------. 1 kanxz kanxz 16 2月 22 23:01 .esd_auth
-rw-------. 1 kanxz kanxz 620 2月 22 23:05 .ICEauthority
drwx------. 3 kanxz kanxz 19 2月 22 23:01 .local
drwxr-xr-x. 4 kanxz kanxz 39 2月 22 22:50 .mozilla
drwxr-xr-x. 2 kanxz kanxz 6 2月 22 23:01 公共
drwxr-xr-x. 2 kanxz kanxz 6 2月 22 23:01 模板
drwxr-xr-x. 2 kanxz kanxz 6 2月 22 23:01 视频
drwxr-xr-x. 2 kanxz kanxz 6 2月 22 23:01 图片
drwxr-xr-x. 2 kanxz kanxz 6 2月 22 23:01 文档
drwxr-xr-x. 2 kanxz kanxz 6 2月 22 23:01 下载
drwxr-xr-x. 2 kanxz kanxz 6 2月 22 23:01 音乐
drwxr-xr-x. 2 kanxz kanxz 6 2月 22 23:01 桌面

第1字段: 文件属性字段

drwxr-xr-x:

  • 第一位表示文件类型。d是目录文件,l是链接文件,-是普通文件,p是管道
  • 第2-4位表示这个文件的属主拥有的权限,r是读,w是写,x是执行。
  • 第5-7位表示和这个文件属主所在同一个组的用户所具有的权限。
  • 第8-10位表示其他用户所具有的权限。

第2字段:文件硬链接数或目录子目录数

第3字段:文件拥有者

第4字段:文件拥有者所在的组

第5字段:文件文件大小(以字节为单位)

第6字段:文件创建月份

第7字段:文件创建日期

第8字段:文件创建时间

第9字段:文件名 (如果是一个符号链接,那么会有一个 “->” 箭头符号,后面根一个它指向的文件)

如果想要查看目录属性信息,则需要额外添加一个-d 参数。例如,可使用如下命令查看 /etc 目录的权限与属性信息:

1
2
[kanxz@study ~]$ ls -ld /etc
drwxr-xr-x. 140 root root 8192 2月 22 23:01 /etc

文本文件编辑命令

cat 命令

cat 命令用于查看纯文本文件(内容较少的),格式为“cat [选项] [文件]”。

more 命令

more 命令用于查看纯文本文件(内容较多的),格式为“more [选项]文件”。

head 命令

head 命令用于查看纯文本文档的前 N 行,格式为“head [选项] [文件]”。

tail 命令

tail 命令用于查看纯文本文档的后 N 行或持续刷新内容,格式为“tail [选项] [文件]”。

tail 命令的操作方法与 head 命令非常相似,只需要执行“tail -n 20 文件名”命令就可以达到这样的效果。tail 命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”

tr 命令

tr 命令用于替换文本文件中的字符,格式为“tr [原始字符] [目标字符]”。

想要快速地替换文本中的一些词汇,又或者把整个文本内容都进行替换,如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时,就可以先使用 cat 命令读取待处理的文本,然后通过管道符把这些文本内容传递给 tr 命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:

cat anaconda-ks.cfg | tr [a-z] [A-Z]

wc 命令

wc 命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。

参数 作用
-l 只显示行数
-w 只显示单词数
-c 只显示字节数

在 Linux 系统中,passwd 是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询:

1
2
[kanxz@study ~]$ wc -l /etc/passwd
43 /etc/passwd

stat 命令

stat 命令用于查看文件的具体存储信息和时间等信息,格式为“stat 文件名称”。

cut 命令

cut 命令用于按“列”提取文本字符,格式为“cut [参数] 文本”。

在 Linux 系统中,如何准确地提取出最想要的数据,这也是我们应该重点学习的内容。一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按列搜索,不仅要使用-f 参数来设置需要看的列数,还需要使用-d 参数来设置间隔符号。passwd 在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的,接下来我们使用下述命令尝试提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[kanxz@study ~]$ head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[kanxz@study ~]$ cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
libstoragemgmt
colord
rpc
saslauth
abrt
rtkit
gluster
chrony
radvd
qemu
unbound
rpcuser
nfsnobody
tss
usbmuxd
geoclue
pulse
setroubleshoot
saned
gdm
gnome-initial-setup
sshd
avahi
postfix
ntp
tcpdump
kanxz

diff 命令

diff 命令用于比较多个文本文件的差异,格式为“diff [参数] 文件”。

在使用 diff 命令时,不仅可以使用–brief 参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。


文件目录管理命令

touch 命令

touch 命令用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”。

参数 作用
-a 仅修改“读取时间”(atime)
-m 仅修改“修改时间”(mtime)
-d 同时修改 atime 与 mtime

mkdir 命令

mkdir 命令用于创建空白的目录,格式为“mkdir [选项] 目录”。

在 Linux 系统中,文件夹是最常见的文件类型之一。除了能创建单个空白目录外,mkdir命令还可以结合-p 参数来递归创建出具有嵌套叠层关系的文件目录。

1
2
3
4
5
6
[kanxz@study ~]$ mkdir new
[kanxz@study ~]$ cd new
[kanxz@study new]$ mkdir -p a/b/c/d/e
[kanxz@study new]$ cd a
[kanxz@study a]$ cd b
[kanxz@study b]$

cp 命令

cp 命令用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”。

在 Linux 系统中,复制操作具体分为 3 种情况:

  • 如果目标文件是目录,则会把源文件复制到该目录中

  • 如果目标文件也是普通文件,则会询问是否要覆盖它

  • 如果目标文件不存在,则执行正常的复制操作

参数 作用
-p 保留原始文件的属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr(p、d、r 为上述参数)

接下来,使用 touch 创建一个名为 install.log 的普通空白文件,然后将其复制为一份名为x.log 的备份文件,最后再使用 ls 命令查看目录中的文件:

1
2
3
4
[kanxz@study ~]$ touch install.log
[kanxz@study ~]$ cp install.log x.log
[kanxz@study ~]$ ls
install.log x.log

mv 命令

mv 命令用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”。

剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名:

1
2
3
[kanxz@study ~]$ mv x.log linux.log
[kanxz@study ~]$ ls
install.log linux.log

rm 命令

rm 命令用于删除文件或目录,格式为“rm [选项] 文件”。

在 Linux 系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在 rm 命令后跟上-f 参数来强制删除。另外,想要删除一个目录,需要在 rm 命令后面一个-r 参数才可以,否则删除不掉。

dd 命令

dd 命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]”。

dd 命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero 的设备文件,这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为 dd命令的输入文件,来生成一个指定大小的文件。

参数 作用
if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要复制“块”的个数
1
2
3
4
[kanxz@study ~]$ dd if=/dev/zero of=560_file count=1 bs=560M
记录了1+0 的读入
记录了1+0 的写出
587202560字节(587 MB)已复制,6.2972 秒,93.2 MB/秒

file 命令

file 命令用于查看文件的类型,格式为“file 文件名”。

在 Linux 系统中,由于文本、目录、设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用 file 命令来查看文件类型了。

1
2
3
4
[kanxz@study ~]$ file new
new: ASCII text
[kanxz@study ~]$ file /dev/sda
/dev/sda: block special

打包压缩与搜索命令

tar 命令

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:

1
[kanxz@study ~]$ tar -czvf etc.tar.gz /etc 

接下来将打包后的压缩包文件指定解压到/root/etc 目录中(先使用 mkdir 命令来创建/root/etc 目录):

1
2
[kanxz@study ~]$ mkdir /root/etc 
[kanxz@study ~]$ tar xzvf etc.tar.gz -C /root/etc

grep 命令

grep 命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”。

参数 作用
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择—仅列出没有“关键词”的行

find 命令

find 命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”

在 Linux 系统中,搜索工作一般都是通过 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 …… {}; 后面可跟用于进一步处理搜索结果的命令