这个笔记比较全面的记录了本人学习Linux的过程,内容还是比较系统、全面的。学习参考的文档以及教程来源繁多,但都吸取了其中比较好的精华,并在此基础上有所拓展深入。本次笔记更多还是在于Linux命令使用上的总结,对于日后的运维学习必定有所帮助…
¶一、概念
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。但大体上分类为RedHat系列和Debian系列。所以本文档主要是使用CentOS并辅助性地掺杂Ubuntu一起进行讲述的。
¶1. 终端命令格式
Linux 刚面世时并没有图形界面,所有的操作全靠命令完成。对于命令的使用需要注意其格式。
1 | command [-options] [parameter] |
说明:
-
command
:命令名,相应功能的英文单词或单词的缩写 -
[-options]
:选项,可用来对命令进行控制,也可以省略 -
parameter
:传给命令的参数,可以是 零个、一个 或者 多个 -
[]
代表可选
¶2. 查阅命令的帮助文档信息
可通过在命令后加--help
选项或者在命令的前面添加man
命令来查看相关命令的帮助文档信息。
¶2.1 --help
1 | #显示command命令的帮助信息 |
¶2.2 man
1 | #查阅command命令的使用手册 |
man
是 manual 的缩写,是 Linux 提供的一个 手册,包含了绝大部分的命令、函数的详细使用说明
使用 man
时的操作键:
操作键 | 功能 |
---|---|
空格键 | 显示手册页的下一屏 |
Enter 键 | 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出 |
/word | 搜索 word 字符串 |
💡 提示:
初级阶段只需要 知道 通过以下两种方式可以查询命令的帮助信息
先学习常用命令及常用选项的使用即可,工作中如果遇到问题可以借助 网络搜索
¶二、基础命令
由于Linux命令实在太多,下面先介绍最最常用的通用基本操作命令。后面章节会扩展性地讲述其他命令。
1 | 查看当前文件夹下的内容,list |
¶三、关机和重启
¶1. 关机
shutdown
命令可以 安全 关闭 或者 重新启动系统
1 | 选项: -r 重新启动 |
提示:
不指定选项和参数,默认表示 1 分钟之后 关闭电脑
远程维护服务器时,最好不要关闭系统,而应该重新启动系统
常用命令示例
1 | #不指定选项和参数,默认表示1分钟之后关闭电脑 |
¶2. 重启
立即重启系统
1 | reboot |
¶四、操作命令小技巧
在使用终端命令的过程中,一些操作小技巧可以辅助我们更有效率地完成工作。
¶1. 放大终端窗口的字体显示
ctrl + shift + =
¶2. 缩小终端窗口的字体显示
ctrl + -
¶3. 自动补全
在敲出 文件
/目录
/命令
的前几个字母之后,按下 tab
键。如果输入的没有歧义,系统会自动补全,如果还存在其他 文件
/目录
/命令
,再按一下 tab
键,系统会提示可能存在的命令。
¶4. 终端历史命令切换
按 上
/下
光标键可以在曾经使用过的命令之间来回切换
¶5. 退出执行中的命令
如果想要退出选择,并且不想执行当前选中的命令,可以按 ctrl + c
¶五、文件管理
¶1. 文件和目录
¶1.1 单用户操作系统和多用户操作系统
- 单用户操作系统:指一台计算机在同一时间 只能由一个用户使用,一个用户独自享用系统的全部硬件和软件资源,Windows XP之前的版本都是单用户操作系统
- 多用户操作系统:指一台计算机在 同一时间可以由多个用户使用 ,多个用户共同享用系统的全部硬件和软件资源,Unix 和 Linux的设计初衷就是多用户操作系统
¶2 Windows
和 Linux
文件系统区别
¶2.1 Windows
下的文件系统
- 在
Windows
下,打开 “计算机”,我们看到的是一个个的驱动器盘符:
- 每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形,如图所示:
¶2.2 Linux
下的文件系统
- 在
Linux
下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):
Ubuntu
没有盘符这个概念,只有一个根目录/
,所有文件都在它下面
¶2.3 用户目录
如用户user,则其用户目录位于 /home/user
,称之为用户工作目录或家目录,表示方式:
1 | /home/user |
¶2.4 Linux
主要目录速查表
-
/
:根目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始,当在终端里输入/home
,其实是在告诉电脑,先从/
(根目录)开始,再进入到home
目录。 -
/bin
、/usr/bin
:可执行二进制文件的目录,如常用的命令ls
、tar
、mv
、cat
等。 -
/boot
:放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz
,系统引导管理器:/boot/grub
。 -
/dev
:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱。 -
/etc
:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有:/etc/inittab
/etc/fstab
/etc/init.d
/etc/X11
/etc/sysconfig
/etc/xinetd.d
-
/home
:系统默认的用户主目录,新增用户账号时,用户的主目录都存放在此目录下:~
表示当前用户的家目录~edu
表示用户edu
的家目录 -
/lib
、/usr/lib
、/usr/local/lib
:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。 -
/lost+fount
:系统异常产生错误时,会将一些遗失的片段放置于此目录下。 -
/mnt
、/media
:光盘默认挂载点,通常光盘挂载于/mnt/cdrom
下,但也不一定,可以选择任意位置进行挂载。 -
/opt
:给主机额外安装软件所摆放的目录 -
/proc
:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的文件有:/proc/cpuinfo
/proc/interrupts
/proc/dma
/proc/ioports
/proc/net/
-
/root
:系统管理员root的主要目录。 -
/sbin
、/usr/sbin
、/usr/local/sbin
:放置系统管理员使用的可执行命令,如fdisk
、shutdown
、mount
等。与/bin
不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用。 -
/tmp
:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。 -
/srv
:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在/srv/www
内。 -
/usr
:应用程序存放目录:/usr/bin
:存放应用程序/usr/share
:存放共享数据/usr/lib
:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件/usr/local
:存放软件升级包/usr/share/doc
:系统说明文件存放目录/usr/share/man
:程序说明文件存放目录 -
/var
:放置系统执行过程中经常变化的文件:/var/log
:随时更改的日志文件/var/spool/mail
:邮件存放的目录/var/run
:程序或服务启动后,其 PID 存放在该目录下
¶3. 列出目录的内容
¶3.1 ls
ls
是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS下的 dir
命令
常用选项
参数 | 含义 |
---|---|
-a | 显示指定目录下所有子目录与文件,包括隐藏文件 |
-l | 以列表方式显示文件的详细信息 |
-h | 配合 -l 以人性化的方式显示文件大小 |
ls 通配符的使用
通配符 | 含义 |
---|---|
* | 代表任意个数个字符 |
? | 代表任意一个字符,至少 1 个 |
[] | 表示可以匹配字符组中的任一一个 |
[abc] | 匹配 a、b、c 中的任意一个 |
[a-f] | 匹配从 a 到 f 范围内的的任意一个字符 |
Linux 下文件和目录的特点
- Linux 文件 或者 目录 名称最长可以有
256
个字符- 以
.
开头的文件为隐藏文件,需要用-a
参数才能显示.
代表当前目录..
代表上一级目录
计算机中文件大小的表示方式(科普)
单位 | 英文 | 含义 |
---|---|---|
字节 | B(Byte) | 在计算机中作为一个数字单元,一般为 8 位二进制数 |
千 | K(Kibibyte) | 1 KB = 1024 B,千字节 (1024 = 2 ** 10) |
兆 | M(Mebibyte) | 1 MB = 1024 KB,百万字节 |
千兆 | G(Gigabyte) | 1 GB = 1024 MB,十亿字节,千兆字节 |
太 | T(Terabyte) | 1 TB = 1024 GB,万亿字节,太字节 |
拍 | P(Petabyte) | 1 PB = 1024 TB,千万亿字节,拍字节 |
艾 | E(Exabyte) | 1 EB = 1024 PB,百亿亿字节,艾字节 |
泽 | Z(Zettabyte) | 1 ZB = 1024 EB,十万亿亿字节,泽字节 |
尧 | Y(Yottabyte) | 1 YB = 1024 ZB,一亿亿亿字节,尧字节 |
¶3.2 tree
可以以树状图列出文件目录结构
1 | tree |
选项 | 含义 |
---|---|
-d | 只显示目录 |
¶4. 切换目录
¶4.1 cd
cd
是英文单词 change directory 的简写,其功能为更改当前的工作目录,也是用户最常用的命令之一
注意:Linux 所有的 目录 和 文件名 都是大小写敏感的
1 | 切换到当前用户的主目录(/home/用户目录) |
¶4.2 相对路径和绝对路径
- 相对路径 在输入路径时,最前面不是 / 或者 ~,表示相对 当前目录 所在的目录位置
- 绝对路径 在输入路径时,最前面是 / 或者 ~,表示从 根目录/家目录 开始的具体目录位置
¶5. 创建和删除操作
¶5.1 touch
创建文件或修改文件时间,如果文件不存在,可以创建一个空白文件,如果文件已经存在,可以修改文件的末次修改日期。
1 | 创建一个为filename.txt的文件 |
¶5.2 mkdir
创建一个新的目录
1 | 在当前目录里创建一个名称为demo新的目录 |
选项 | 含义 |
---|---|
-p | 可以递归创建目录 |
新建目录的名称 不能与当前目录中 已有的目录或文件 同名
¶5.3 rm
删除文件或目录
1 | 强制删除filename.txt文件 |
选项 | 含义 |
---|---|
-f | 强制删除,忽略不存在的文件,无需提示 |
-r | 递归地删除目录下的内容,删除文件夹 时必须加此参数 |
使用
rm
命令要小心,因为文件删除后不能恢复
¶6. 拷贝和移动文件
¶6.1 cp
cp
命令的功能是将给出的 文件 或 目录 复制到另一个 文件 或 目录 中,相当于 DOS 下的 copy
命令
1 | 复制文件或者目录,cp对应英文copy |
选项 | 含义 |
---|---|
-i | 覆盖文件前提示 |
-r | 若给出的源文件是目录文件,则 cp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名 |
¶6.2 mv
mv
命令可以用来 移动 文件 或 目录,也可以给 文件或目录重命名
1 | 移动文件或者目录/文件或者目录重命名,mv对应英文move |
选项 | 含义 |
---|---|
-i | 覆盖文件前提示 |
¶7. 查看文件内容
¶7.1 cat 查看文件的所有内容
cat
(concatenate)命令可以用来 查看文件内容、创建文件、文件合并、追加文件内容 等功能。
cat
会一次显示所有的内容,适合 查看内容较少 的文本文件。
1 | 查看hello.txt文件的所有内容 |
选项 | 含义 |
---|---|
-b | 对非空输出行编号 |
-n | 对输出的所有行编号 |
Linux 中还有一个
nl
的命令和cat -b
的效果等价
¶7.2 more 分屏显示文件内容
more
命令可以用于分屏显示文件内容,每次只显示一页内容
适合于 查看内容较多的文本文件
1 | 分屏显示hello.txt文件内容 |
使用 more
的操作键:
操作键 | 功能 |
---|---|
空格键 | 显示手册页的下一屏 |
Enter 键 | 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出 |
/word | 搜索 word 字符串 |
¶7.3 grep 搜索文本文件内容
Linux 系统中 grep
命令是一种强大的文本搜索工具。
grep
允许对文本文件进行 模式查找,所谓模式查找,又被称为正则表达式。
1 | 显示匹配包含qcmoke字符串的行及行号 |
选项 | 含义 |
---|---|
-n | 显示匹配行及行号 |
-v | 显示不包含匹配文本的所有行(相当于求反) |
-i | 忽略大小写 |
- 常用的两种模式查找
参数 | 含义 |
---|---|
^a | 行首,搜寻以 a 开头的行 |
ke$ | 行尾,搜寻以 ke 结束的行 |
¶7.6 tail 取出文件后面几行
1 | 取出文件后面10行 |
选项 | 含义 |
---|---|
-n | 后面接数字,代表显示几行的意思 |
-f | 侦测文件尾部,要等到按下[ctrl]-c才会结束tail的侦测即,如果文件尾部内容被更改,也会随着显示最新尾部内容,常用于查看日志。 |
¶8. 查找文件(find)
¶8.1 find
find
命令功能非常强大,通常用来在 特定的目录下 搜索 符合条件的文件
1 | 搜索主目录下,文件名包含hello的文件 |
序号 | 命令 | 作用 |
---|---|---|
01 | find [路径] -name “*.py” | 查找指定路径下扩展名是 .py 的文件,包括子目录 |
- 如果省略路径,表示在当前文件夹下查找
- 之前学习的通配符,在使用
find
命令时同样可用
¶9. 链接(ln)
¶9.1 软链接
1 | 建立文件的软链接,用通俗的方式讲类似于Windows下的快捷方式。 |
软链接的特点:
(1)软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
(2)软链接可以 跨文件系统 ,硬链接不可以
(3)软链接可以对一个不存在的文件名进行链接
(4)软链接可以对目录进行链接
注意:
(1)没有
-s
选项建立的是一个 硬链接文件(对于硬链接文件,两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接)(2)被链接的源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用
¶9.2 硬链接简介
1 | 删除硬链接,不会影响源文件,同样的删除源文件也不会影响硬链接 |
软链接的特点:
(1)硬链接,以文件副本的形式存在。但不占用实际空间。
(2)不允许给目录创建硬链接
(3)硬链接只有在同一个文件系统中才能创建
¶9.3 文件软硬链接的示意图
提示:
在 Linux 中,文件名 和 文件的数据 是分开存储的
在 Linux 中,只有文件的
硬链接数 == 0
才会被删除使用
ls -l
可以查看一个文件的硬链接的数量在日常工作中,几乎不会建立文件的硬链接,知道即可
¶10. 打包压缩
打包压缩 是日常工作中备份文件的一种方式。
在不同操作系统中,常用的打包压缩方式是不同的:
Windows
常用rar
Mac
常用zip
Linux
常用tar.gz
¶11. 打包 / 解包
¶11.1 tar
tar
是 Linux 中最常用的 备份工具,此命令可以 把一系列文件 打包到 一个大文件中,也可以把一个 打包的大文件恢复成一系列文件
tar
的命令格式如下:
1 | # 打包文件(不压缩) |
tar
选项说明
选项 | 含义 |
---|---|
c | 生成档案文件,创建打包文件 |
x | 解开档案文件 |
v | 列出归档解档的详细过程,显示进度 |
f | 指定档案文件名称,f 后面一定是 .tar 文件,所以必须放选项最后 |
注意:
f
选项必须放在最后,其他选项顺序可以随意
¶12 压缩/解压缩
¶12.1 gzip
gzip 是linux中常见的压缩/解压工具,最常见的使用对象是*.gz格式的文件。
OPTIONS
-c --stdout --to-stdout 结果写到标准输出,原文件保持不变
-d --decompress --uncompress 解压
-k --keep 压缩或者解压过程中,保留原文件
-r --recursive
-t --test 检查压缩文件的完整性
-v --verbose 显示每个文件的名子和压缩率
-<压缩效率> 压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。
- –best 此参数的效果和指定"-9"参数相同。
- –fast 此参数的效果和指定"-1"参数相同。
示例1,压缩文件
原文件名为file1.txt,压缩后原文件消失,压缩后文件名为file1.txt.gz
1 | root@ubuntu:/tmp# ls -l file1.* |
示例2,解压文件
1 | root@ubuntu:/tmp# gzip -d file1.txt.gz |
示例3,压缩的时候,显示压缩率
1 | root@ubuntu:/tmp# gzip -v file1.txt |
示例4,一条命令压缩多个文件,压缩之后,是各自分开的:
1 | root@ubuntu:/tmp# gzip file1.txt file2.txt |
示例5,压缩过程中,保留原文件
1 | root@ubuntu:/tmp# gzip -k file1.txt |
示例6,压缩到标准输出中
可以连接两个文件
1 | root@ubuntu:/tmp# cat file1.txt file2.txt | gzip > foo.gz |
¶12.2 gunzip
解压gz格式文件(不保留压缩文件)
1 | [root@localhost test]# ls |
¶12.3 tar
与gzip
命令结合可以使用实现文件打包和压缩
tar
只负责打包文件,但不压缩- 用
gzip
压缩tar
包后,其扩展名一般用xxx.tar.gz
在
Linux
中,最常见的压缩文件格式就是xxx.tar.gz
- 在
tar
命令中有一个选项 -z 可以调用gzip
,从而可以方便的实现压缩和解压缩的功能 - 命令格式如下:
1 | #压缩文件 |
选项 | 含义 |
---|---|
-C | 解压缩到指定目录,注意:要解压缩的目录必须存在 |
¶12.4 bzip2(two)
tar
与bzip2
命令结合可以使用实现文件 打包和压缩(用法和gzip
类似)tar
只负责打包文件,但不压缩,- 用
bzip2
压缩tar
打包后的文件,其扩展名一般用xxx.tar.bz2
- 在
tar
命令中有一个选项 -j 可以调用bzip2
,从而可以方便的实现压缩和解压缩的功能 - 命令格式如下:
1 | # 压缩文件 |
¶12.5 zip/unzip指令
zip压缩文件
案例:压缩 test1.txt test2.txt成test.zip压缩包
1 | zip test.zip test1.txt test2.txt |
zip压缩目录
zip常用选项
-r:递归压缩,即压缩目录
案例:递归压缩test目录
1 | [root@localhost ~]# tree test/ |
-
unzip解压文件
案例:解压缩test.zip文件
1
unzip test.zip
¶13. 其他
¶13.1 echo 文字内容
echo
会在终端中显示参数指定的文字,通常会和 重定向 联合使用
¶13.2 重定向 >
和 >>
- Linux 允许将命令执行结果 重定向到一个 文件
- 将本应显示在终端上的内容 输出/追加 到指定文件中
其中
>
表示输出,会覆盖文件原有的内容>>
表示追加,会将内容追加到已有文件的末尾
¶13.3 管道 |
- Linux 允许将 一个命令的输出 可以通过管道 做为 另一个命令的输入
- 可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里
|
的左右分为两端,左端塞东西(写),右端取东西(读)
常用的管道命令有:
more
:分屏显示内容grep
:在命令执行结果的基础上查询指定的文本
¶六、软件包管理
¶1 软件包管理简介
¶1.1 包全名与包名
◆包全名:操作的包是没有安装的软件包时,使用包全名。
◆包名:操作已经安装的软件包时使用的包名。linux安装后包名都存在/var/lib/rpm/中的数据库
¶1.2 Linux包依赖性
◆树形依赖:a>b>c
◆环形依赖:a>b>c>a
◆模块依赖:模块依赖
软件安装的过程:
1.cp类库到系统目录中
2.cp可执行程序和配置文件到系统目录中
3.根据需要选择性配置和启动服务(程序)
对于windows系统还会多出一个步骤,那就是到把启动配置或者程序依赖的配置放到注册表中。
¶1.3 linux包命名原则
软件包apache2_2.4.18-2ubuntu3_amd64.deb
apache2 软件包名
2.4.18 软件版本
2 软件发布的次数
ubuntu3 适合的Linux平台
amd64 适合的硬件平台
deb 包扩展名
比如一个文件httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6.centos 适合的Linux平台
i686 适合的硬件平台
rpm rpm包扩展名
¶1.4 linux软件包优先级
Required | 该级别软件包是保证系统正常运行所必须的,如果缺失,系统将毁坏 | 系统工具,比如bash,mount… |
---|---|---|
Important | 若缺少该软件包,系统讲运行困难 | 实现系统底层功能的一些程序,比如aptitude,apt-get |
Standard | linux系统的标准件 | 常规安装软件,如telnet.tp |
Optional | 该软件包是否安装不影响linux运行 | 用于用户特定的需求,比如×11,mysql,openofice,自开发软件等 |
Extra | 该级别可能与高级软件包存冲突 |
¶2 Debain系列软件包管理
¶2.1 dpkg本地管理
¶(1)安装
1 | dpkg -i 软件包全名 |
i install
¶(2)卸载
1 | dpkg -r 软件包名 #移除包不移除配置文件 |
1 | dpkg -P 软件包名 #移除包和配置文件 |
-r remove
-P
等价于--purg
移除包和配置文件
¶(3)查询
1 | dpkg -l 软件包名 #列出当前系统中已经安装的包,包括软件的版本,可以使用dpkg -l | grep 关键字来查询 |
¶2.2 APT在线管理
apt-get install
工作步骤
-
扫描本地软件列表(apt-get update 刷新软件包列表)
-
软件包依赖检查
-
从软件包指定的apt源中下载软件包
-
解压软件包并完成配置
apt-get:用于管理安装,卸载,升级等操作
apt-cache:用于查询软件包信息
¶(1) APT软件源
1 | vim /etc/apt/sources.list |
通过apt-get update
更新软件源到本地并在本地建立新远程软件库所有软件包对应的索引表(数据库形式),所有存放在/var/lib/apt/lists/*
#####(2) 安装
1 | apt-get -f install #修复依赖关系 |
apt下载到的软件包(缓存)都放在/var/cache/apt/archives/
,如果不需要可以删除掉
¶(3) 获得源码包
1 | sudo apt-get source 软件包名 |
¶(4) 更新
1 | apt-get update #更新软件源到本地 |
¶(5) 卸载
1 | apt-get remove 软件包名 #卸载软件包(不含配置文件) |
¶(6)查询
1 | apt-cache search 软件包关键字 #从source里查询某个软件包 |
¶3 Redhat系列软件管理
¶3.1 rpm本地管理
¶(1) 安装
1 | rpm -ivh 包全名 |
选项:
-i(install)安装
-v(verbose)显示详细信息
-h(hash)显示进度
-nodeps 不检测依赖性
¶(2) 升级
1 | rpm -Uvh 包全名(下载好的版本更高的包) |
选项:
-U(upgrade)升级
¶(3) 卸载
1 | rpm -e 包名 |
选项:
-e(erase)卸载
-nodeps 不检查依赖性
¶(4) 查询是否安装
1 | rpm -q 包名 #查询已经安装的具体包 |
选项:
-q 查询(query)
-a 所有(all)
¶(5) 查询软件包详细信息
1 | rpm -qi 包名 |
选项:
-q 查询(query)
-i 查询软件信息(information)
-p 查询未安装包信息(package)
¶(6) 查询包中文件安装位置
1 | rpm -ql 包名 #查询已安装的软件安装到了哪些目录里 |
选项:
-q 查询(query)
-l 列表(list)
-p 查询未安装包信息,用来查看未安装的软件包打算安装到哪些目录里
如果忘记包名,可以通过rpm -qa | grep 包名
关键字先查看系统中已经安装的相关软件,然后再执行rpm -ql 包名
来查看具体路径
¶(7)查询系统文件属于哪个RPM包
1 | rpm -qf 系统文件名 |
选项:
-f 查询系统文件属于哪个软件包(file)
¶(8) 查询软件包的依赖性
1 | rpm -qR 包名 #查询已安装包信息 |
选项:
-R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package)
¶(9) RPM包校验
1 | rpm -V 已安装的包名 |
选项:
-V校验指定RPM包中的文件(verify)
验证内容中的8个信息的具体内容如下:
◆S文件大小是否改变
◆M文件的类型或文件的权限(rwx)是否被改变
◆5文件MD5校验和是否改变(可以看成文件内容是否改变)
◆D设备的中,从代码是否改变
◆L文件路径是否改变
◆U文件的属主(所有者)是否改变
◆G文件的属组是否改变
◆T文件的修改时间是否改变
文件类型
◆c配置文件(config file)
◆d普通文档(documentation)
◆g“鬼”文件(ghostfile),很少见,就是该文件不应该被这个RPM包包含
◆l授权文件(license file)
◆r描述文件(read me)
¶(10)RPM包中文件提取
主要用来解决误删除系统文件后修补的方法
1 | 通过rpm2cpio命转换httpd-2.2.15-15.el6.centos.1.i686.rpm为cpio格式后再通过cpio将/usr/sbin/httpd(这是httpd-2.2.15-15.el6.centos.1.i686.rpm要安装到系统中的某个文件)文件提取到当前目录 |
rpm2cpio是将rpm包转换为cpio格式的命令
cpio是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
提取到当前目录后没有看到文件的话,可以通过
dir
命令来显示
案例:
1 | [root@localhost~]#rpm-qf/bin/ls |
¶3.2 yum在线管理
yum也是用来管理rpm软件包的管理工具。它能够解决软件安装的依赖问题。如果存在依赖,yum会统一一并安装依赖。
¶(1)网络yum源
1 | vim /etc/yum.repos.d/CentOS-Base.repo |
1 | CentOS-Base.repo |
[base] 容器名称,一定要放在[ ]中,从以上文件可以看出centos7默认配置有4个容器,一般是第一个起作用
name 容器说明,可以自己随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl 我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址
enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效
gpgkey 数字证书的公钥文件保存位置。不用修改
centos7 修改yum源为阿里源
1.安装base reop源
1 | cd /etc/yum.repos.d |
接着备份旧的配置文件
1 | mv CentOS-Base.repo CentOS-Base.repo.bak |
下载阿里源的文件
1 | wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo |
2 安装epel repo源:
1 | wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo |
3.清理缓存
1 | yum clean all |
4.重新生成缓存
1 | yum makecache |
¶(2))查询
1 | yum list #查询所有可用软件包列表 |
¶(3)安装
1 | yum -y install 包名 |
选项:
install 安装
-y 自动回答yes
¶(4)升级
1 | yum -y update 包名 |
选项:
update 升级
-y 自动回答yes
不带包名的update,即yum -y update
会默认升级所有系统软件,包括系统内核,慎重使用不带包名的update。
¶(5) 卸载
1 | yum -y remove 包名 |
选项:
remove 卸载
-y 自动回答yes
¶(6) 列出所有可用的软件组列表
1 | yum grouplist |
1 | [root@VM_0_13_centos ~]# yum grouplist |
¶(7) 安装指定软件组
组名可以由grouplist查询出来
1 | yum groupinstall 软件组名 |
¶(8) 卸载指定软件组
1 | yum groupremove 软件组名 |
¶4 源码包安装卸载(待续···)
¶5 设置环境变量及生效方法
方法一:
在/etc/profile
文件中添加变量**【对所有用户生效(永久的)】**
用VI在文件/etc/profile
文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
要让刚才的修改马上生效,需要执行以下代码
1 | vim /etc/profile |
1 | 在文件最后加入如下代码 |
1 | source /etc/profile #使配置文件生效 |
方法二:
在用户目录下的.bash_profile文件中增加变量**【对单一用户生效(永久的)】**
用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
要让刚才的修改马上生效,需要在用户目录下执行以下代码
1 | vim ~/.bash_profile |
1 | 在文件最后加入如下代码 |
1 | source ~/.bash_profile #使配置文件生效 |
方法三:
直接运行export命令定义变量**【只对当前shell(BASH)有效(临时的)】**
在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
例如:export PATH=/usr/local/webserver/php/bin:$PATH
¶七、用户管理
¶1. 基本概念
在 Linux 系统中,不论是本机或是远程登录系统,每个系统都必须拥有至少一个用户。用户是 Linux 系统工作中重要的一环,用户管理包括用户与组管理。为了方便用户管理,Linux有组的概念,组的意义在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限。
¶2. 超级用户
Linux 系统中的 root
账号通常 用于系统的维护和管理,对操作系统的所有资源 具有所有访问权限,在大多数版本的 Linux 中,都不推荐 直接使用 root 账号登录系统,在 Linux 安装的过程中,系统会自动创建一个用户账号,而这个默认的用户就称为**“标准用户”**。
su
是 substitute user
的缩写,表示 使用另一个用户的身份
sudo
命令用来以其他身份来执行命令,预设的身份为 root
用户使用 sudo
时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入密码
¶3. 用户组管理
1 | 添加组 |
提示:用户组信息保存在
/etc/group
文件中。在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限。
¶4. 用户管理
¶4.1 创建用户
1 | 添加新用户,-m 自动建立用户家目录-g 指定用户所在的组,否则会建立一个和同名的组 |
注意添加用户命令在redhat类系统和debain类系统之间的区别。
在redhat下useradd与adduser是没有区别的,两个命令等价,在home下自动创建目录,没有设置密码,需要使用passwd命令修改密码。
在debain中,useradd
与adduser
有所不同,useradd 是添加用户底层的命令,而adduser 是上层的命令
(1)
useradd
在使用该命令创建用户是不会在/home
下自动创建与用户名同名的用户主目录的,如果一定使用这个命令也无碍,可以加-m
选项添加用户主目录。另外useradd
默认选择的shell
版本是sh
而不是通常用的bash
(可以在创建用户后使用chsh
命令修改或者修改/etc/passwd
中该用户的shell
版本,选项:-s /bin/bash
指定shell版本为bash
;-g
指定用户组),此外useradd
默认没有设置密码,所以创建的用户是不能登录的,另需要在创建用户后使用passwd
命令修改密码。(2)
adduser
在使用该命令创建用户是会在/home
下自动创建与用户名同名的用户目录,系统shell
版本,会在创建时会提示输入密码,更加友好。
¶4.2 设置密码
1 | 设置用户密码,如果是普通用户,直接用 passwd 可以修改自己的账户密码 |
¶4.3 查看新增的用户信息
1 | 新建用户后,用户信息会保存在 /etc/passwd 文件中 |
提示:
/etc/passwd
是用于保存用户信息的文件;而/usr/bin/passwd
是用于修改用户密码的程序。
/etc/passwd
文件存放的是用户的信息,由 6 个分号组成的 7 个信息,分别是
用户名
密码(x,表示加密的密码)
UID(用户标识)
GID(组标识)
用户全名或本地帐号
家目录
登录使用的 Shell,就是登录之后,使用的终端命令,
ubuntu
默认是dash
¶4.4 删除用户
1 | 删除用户,-r 选项会自动删除用户家目录 |
¶4.5 查看系统用户信息
1 | 查看用户 UID 和 GID 信息,默认当前用户 |
¶4.6 修改用户组和登录的Shell
usermod命令可以用来设置 用户的主组、附加组和登录的Shell,命令格式如下:
1 | # 修改用户的主组,通常在新建用户时指定,在/etc/passwd的第4列GID对应的组 |
提示:设置了用户的附加组之后,需要重新登录才能生效!
¶4.7 普通用户添加sudo组权限
注意:默认使用 useradd
添加的用户是没有权限使用 sudo
以 root
身份执行命令的。对于ubuntu可以使用以下命令快速将用户添加到 sudo
附加组中
1 | $ usermod -G sudo 用户名 |
这个命令在centos7中不适用
下面是所有linux系统通用的方法,可以使用修改/etc/sudoers
配置文件来实现。
1 | $ su root |
在root ALL=(ALL) ALL
这一行下面,加入一行: 用户名 ALL=(ALL) ALL
1 | root ALL=(ALL) ALL |
1 | 收回写权限 |
¶4.8 切换用户
序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | su - 用户名 | 切换用户,并且切换目录 | - 可以切换到用户家目录,否则保持位置不变 |
02 | exit | 退出当前登录账户 |
su
不接用户名,可以切换到root
,但是不推荐使用,因为不安全exit
示意图如下:
¶5. 系统用户维护
¶5.1 查看最近系统登录信息
1 | $ lastlog |
案例:
1 | [root@VM_0_6_centos ~]# lastlog |
¶5.2 列出当前和曾经登入系统的用户信息
1 | $ last |
案例:
1 | [root@VM_0_6_centos ~]# last |
¶5.3 踢出登录用户
1 | #选择登录终端并强制踢出,例如选择踢出使用终端pts/1登录的用户。 |
案例
1 | 先列举当前登录的系统用户 |
¶八、文件权限管理
在 Linux 系统中,不同的用户对于不同的系统资源拥有不同的使用权限。在 Linux 中,可以指定每一个用户针对不同的文件或者目录的不同权限。文件(目录)的权限包括如下:
序号 | 权限 | 英文 | 缩写 | 数字代号 |
---|---|---|---|---|
01 | 读 | read | r | 4 |
02 | 写 | write | w | 2 |
03 | 执行 | excute | x | 1 |
¶1. 文件的详细信息
1 | 查看文件夹下文件的详细信息(目录也是一种文件) |
打印结果从左到右依次是:
-
权限,第 1 个字符如果是
d
表示目录 -
硬链接数,通俗地讲,就是有多少种方式,可以访问到当前目录/文件
-
拥有者,家目录下 文件/目录 的拥有者通常都是当前用户
-
组,在 Linux 中,很多时候,会出现组名和用户名相同的情况,后续会讲
-
大小
-
最后修改时间
-
名称
¶2. 修改文件权限
1 | # 修改文件|目录的拥有者 |
chmod
在设置权限时,可以简单地使用三个数字分别对应 拥有者 / 组 和 其他 用户的权限
1 | # 直接修改文件|目录的 读|写|执行 权限,但是不能精确到 拥有者|组|其他 |
常见数字组合有(u
表示用户/g
表示组/o
表示其他):
777
===>u=rwx,g=rwx,o=rwx
755
===>u=rwx,g=rx,o=rx
644
===>u=rw,g=r,o=r
¶3. 文件属性模式
¶3.1 lsattr
lsattr 命令用于显示文件的属性,使用方式如下
1 | 查看file.sh 文件的属性 |
详细说明请参考:
📚https://www.runoob.com/linux/linux-comm-lsattr.html
¶3.2 chattr
chattr 用于修改文件属性。
语法
1 | chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] |
选项
-R 递归处理,将指定目录下的所有文件及子目录一并处理。
-v<版本编号> 设置文件或目录版本。
-V 显示指令执行过程。
+<属性> 开启文件或目录的该项属性。
-<属性> 关闭文件或目录的该项属性。
=<属性> 指定文件或目录的该项属性。
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下几种模式:
a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。
该命令请切换至 root 用户下使用。
1 | 为 file.sh 文件增加 i 标识 |
详细说明请参考:
📚https://baike.baidu.com/item/chattr/9841067?fr=aladdin
📚https://www.runoob.com/linux/linux-comm-chattr.html
¶3.3 文件属性模式相关问题
Linux 文件/文件夹无法删除问题解决方案
服务器黑客攻击后,如果他们对某些文件(例如病毒文件)的属性模式进行修改,导致我们无法轻易删除这些文件,同时采用 root 用户也可能无法使用rm命令删除,那么这就会带来巨大的隐患问题。
案例:
假设黑客使用如下命令对文件的属性模式进行了修改。
1 | chattr +ia file.sh |
那么使用如下rm命令是没有权限删除的。即使是 root 用户也无法删除。
1 | rm -rf file.sh |
这种情况就涉及到chattr命令相关的文件属性模式了。
由上文中得知当文件设置 i 和 a 任意一个属性我们就无法对文件进行删除操作,那么只要我们移除掉 i, a 属性,然后执行rm命令删除就可以了。
1 | 移除 i, a 属性 |
如果文件还未删除成功,则我们需要考虑文件所属的文件夹是否设置了 i 或 a 属性(这一点确实很难发现)
1 | 退回上一级 |
如果文件夹被设置则对文件夹的属性执行移除操作,然后再删除文件夹里面的文件
¶九、进程管理
所谓 进程,通俗地说就是当前正在执行的一个程序。
¶1. 查看当前进程的详细状况
1 | process status |
提示:ps 默认只会显示当前用户通过终端启动的应用程序。
¶2. 动态显示运行中的进程并且排序
1 | 要退出可以直接输入q |
¶3. 终止指定代号的进程
1 | -9表示强行终止 |
提示:使用
kill
命令时,最好只终止由当前用户开启的进程,而不要终止root
身份开启的进程,否则可能导致系统崩溃。
¶4. 查看执行命令所在位置
1 | $ which ls |
在 Linux
中,绝大多数可执行文件都是保存在 /bin
、/sbin
、/usr/bin
、/usr/sbin
/bin
(binary
)是二进制执行文件目录,主要用于具体应用
/sbin
(system binary
)是系统管理员专用的二进制代码存放目录,主要用于系统管理
/usr/bin
(user commands for applications
)后期安装的一些软件
/usr/sbin
(super user commands for applications
)超级用户的一些管理程序
提示:
cd
这个终端命令是内置在系统内核中的,没有独立的文件,因此用which
无法找到cd
命令的位置
¶十、网络管理
¶1. ifconfig
ifconfig
可以查看当前的网卡配置信息
1 | # 查看网卡配置信息 |
提示:一台计算机中有可能会有一个 物理网卡 和 多个虚拟网卡,在 Linux 中物理网卡的名字通常以
ensXX
表示
网卡是一个专门负责网络通讯的硬件设备。IP 地址是设置在网卡上的地址信息。每台联网的电脑上都有 P 地址,是保证电脑之间正常通讯的重要设置。
我们可以把 电脑 比作 电话,网卡 相当于 SIM 卡,IP 地址 相当于 电话号码
注意:每台电脑的 IP 地址不能相同,否则会出现 IP 地址冲突,并且没有办法正常通讯
127.0.0.1
被称为 本地回环/环回地址,一般用来测试本机网卡是否正常
¶2. ping
ping
一般用于检测当前计算机到目标计算机之间的网络 是否通畅,time数值越大,速度越慢
1 | # 检测到目标主机是否连接正常 |
ping
的工作原理与潜水艇的声纳相似,ping
这个命令就是取自 声纳的声音网络管理员之间也常将
ping
用作动词 —— ping 一下计算机X,看他是否开着
原理:网络上的机器都有 唯一确定的 IP 地址,我们给目标 IP 地址发送一个数据包,对方就要返回一个数据包,根据返回的数据包以及时间,我们可以确定目标主机的存在
提示:在 Linux 中,想要终止一个终端程序的执行,绝大多数都可以使用
CTRL + C
¶3. 配置ip
以vmware centos7最小安装为例,假设已经设置自动配置网络ip的情况下,系统的ip是由物理主机动态分配ip的,有可能这个ip会发生变化。如果希望配置固定的ip的话可以通过下面的方式解决:
(1)配置物理主机的VMnet8网卡
(2)然后需要修改vmware虚拟网络配置
记住这个网关ip,后面用到。
(3)设置vmware对centos系统虚拟机系统设置的网络连接方式为NAT连接。
(3)进入centos虚拟机终端,编辑centos网卡配置文件,该配置文件名称就是"ifcfg-"+“网卡的名称”,对于不同系统网卡的名称可能不一样,可以通过ifconfig
命令来查看网卡名称,比如下面的显示出来的网卡名称是eno16777736,那么网卡配置文件是ifcfg-eno16777736。
1 | [root@localhost ~]# ifconfig |
然后编辑网卡配置文件
1 | vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 |
修改为以下:
1 | HWADDR="00:0C:29:34:1D:18" |
💡 提示:网卡配置文件里的变量可能不同系统的也不同。但是以上修改的部分是必须的。
📚 主要变量说明:
- HWADDR:表示mac地址
- TYPE:网络类型
- BOOTPROTO:表示为网卡配置静态还是动态IP地址(none:表示无须启动协议;bootp:表示使用BOOTP协议;dhcp :使用dhcp协议动态获取ip地址; static:表示手工设置静态IP地址)
- ONBOOT:表示启动系统时是否激活网卡,yes为激活,no不激活(如果默认为no需要改成yes)
- HWADDR:表示网卡的MAC地址
- GATEWAY:表示该网关地址。填虚拟虚拟机网卡VMnet8对应的网关ip。
- NETMASK:表示子网掩码。填填和VMnet8对于的子网掩码
- IPADDR:表示网卡的固定IP地址。比如上面的网关是192.168.60.2并且子网掩码是255.255.255.0,那么表示固定ip的值需要是192.168.60.x(这个x是除了网关外3~254的任意数填,其中0表示网络,255一般用来做掩码,而1和2已经被VMnet8使用,所以0、1、2和255不用)
- DNS1:表示第一个DNS服务器的地址。值可以是任意能使用的dns ip地址(用于解析域名)。这里使用google通过的dns ip
8.8.8.8
即可
(4)重启网络就OK了
1 | service network restart |
1、执行后如果报如下错误:
Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See “systemctl status network.service” and “journalctl -xe” for details.💁♂ 出现上面错误的大概率是mac地址和vmware配置的不一致。如下一定要一致:
¶4. 防火墙设置
¶(1)查看firewall服务状态
1 | systemctl status firewalld |
¶(2)查看firewall的状态
1 | firewall-cmd --state |
¶(3)开启、重启、关闭、firewalld.service服务
1 | 开启 |
¶(4)查看防火墙规则
1 | firewall-cmd --list-all |
¶(5)查询、开放、关闭端口
1 | 查询端口是否开放 |
- 参数解释
(1)firwall-cmd:是Linux提供的操作firewall的一个工具;
(2)–permanent:表示设置为持久;
(3)–add-port:标识添加的端口;
¶5. 网络监控netstat
般用于检验本机各端口的网络连接情况
1 | netstat #命令用于显示各种网络相关信息,如网络连接, 路由表, 接口状态等等 |
¶十一、远程操作
¶1. 网络基础
域名:由一串“”用点分隔“”的名字组成,例如:www.baidu.com
;是IP 地址的别名,方便用户记忆。
IP地址:IP 地址是网络中计算机的唯一网络标识。
端口号:是某台计算机上运行的应用程序的唯一网络标识。常见服务端口号列表:
序号 | 服务 | 端口号 |
---|---|---|
01 | SSH 服务器 | 22 |
02 | Web 服务器 | 80 |
03 | HTTPS | 443 |
04 | FTP 服务器 | 21 |
windows系统可以打开cmd输入以下命令检测网络互连的其他主机的端口号是否放行。
1 | $ telnet ip 端口 |
提示:有关 端口号的详细内容,待续补充······
ssh协议: SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。特点:利用SSH协议可以有效防止远程管理过程中的信息泄露;通过SSH 协议可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗;此外它还具有一个优点,就是是传输的数据可以是经过压缩的,所以可以加快传输的速度。
要搭建ssh环境,需要分别安装服务端和客户端程序。SSH服务端是安装在服务器中提供ssh协议远程操控的服务软件。只有ssh服务端运行了才能通过ssh客户端连接服务器。
¶2. 远程登录
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | ssh 用户名@ip | secure shell | 关机/重新启动 |
02 | scp 用户名@ip:文件名或路径 用户名@ip:文件名或路径 | secure copy | 远程复制文件 |
¶2.1 ssh服务端安装
以ubuntu操作系统作为服务端为例:
1 | 关闭防火墙或者放行ssh默认的22端口(关闭防火墙不同linux发行版可能不同) |
¶2.2 ssh客户端使用
SSH 客户端是一种使用SSH协议连接到远程计算机的软件程序,通过SSH 客户端我们可以连接到运行了 SSH 服务器的远程机器上。
1 | 默认系统已经安装,如果没有可通过命令来安装 |
(1) Linux下SSH 客户端的简单使用
1 | ##ssh远程连接服务器 |
注意:如果在 Windows
系统中,可以安装 PuTTY
或者 XShell
客户端软件即可。
提示:使用
exit
退出当前用户的登录
(2) Windows 下 SSH 客户端的安装
-
Putty
http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html -
XShell
http://xshellcn.com建议从官方网站下载正式的安装程序
¶2.3 ssh免密码登录
实现方式:使用公钥认证进行登录。
原理:使用非对称加密原理进行登录认证。首先由ssh客户端生成密钥对,然后用户将公钥添加到服务端的某认证配置文件里。当用户登陆时,会通过私钥对请求数据进行签名,并将已经签名的数据发送给ssh服务端,ssh服务端会去认证配置文件拿到公钥并进行验签,如果验签成功则允许登入,否则拒绝。由于私钥只有保存在用户自己的客户端中,因此入侵者就算得到用户公钥,也不能登陆到服务器。
非对称加密算法:
使用 公钥 加密的数据,只能使用 私钥 解密
使用 私钥 加密的数据,只能使用 公钥 解密
实现步骤
①SSH客户端生成密钥对
1 | 生成密钥对,一路回车即可。会在~/.ssh下生成一个私钥文件(id_rsa)和一个公钥文件(id_rsa.pub) |
终端会提示一些问题:
第一个问题是设置私钥和公钥的文件名,如果不设置默认是
id_rsa
和id_rsa.pub
第二个问题是要不要对私钥设置口令(passphrase),如果担心私钥的安全,可以设置一个。
②上传公钥到服务器
方式1:直接copy客户端的~/.ssh/id_rsa.pub
内容直接追加到服务端的~/.ssh/authorized_keys
里。
方式2:SSH客户端执行以下命令上传 到服务端:
1 | 执行完命令即可上传客户端公钥到指定的服务器的~/.ssh/authorized_keys里(其实就是追加了id_rsa.pub的内容) |
执行完以上操作后,远程服务器即可认证客户端,客户端也有了ssh免密登录的权限。
示意图:
¶3.4 配置ssh服务别名
客户端每次都输入 ssh -p port user@remote
,时间久了会觉得很麻烦,特别是当 user
, remote
和 port
都得输入,而且还不好记忆。
而给客户端配置别名可以解决这个问题,譬如用:ssh myserver
来替代上面这么一长串。要实现这个功能需要在客户端的 ~/.ssh/config
(没有这个文件则手动创建)里面追加以下内容:
1 | Host myserver |
例如:
1 | Host myserver |
保存之后,即可用 以下命令实现快速远程登录了
1 | ssh myserver |
注意:ssh客户端会把你每次登陆过的计算机的公钥(public key)都记录在~/.ssh/known_hosts
中。当下次登陆相同计算机时,ssh服务端会核对公钥。如果公钥不同,ssh服务端会发出警告给客户端。
一台客户端连接多个Linux系统,会经常切换,但客户端使用同一个ip,客户端登录过一次后就会把ssh信息记录在客户端本地的~/.ssh/known_hsots
文件中,客户端切换其他系统后再用ssh访问原来登陆的系统就会出现冲突警告。
解决办法: 客户端直接把~/.ssh/known_hosts
文件删除即可。
¶3. 远程文件传输
通过使用ssh客户端可以登录控制服务器了,但是想要在客户端和服务器之间进行文件传输还得需要其他的传输工具。有的是基于ssh协议的,有的基于ftp协议的,还有的是基于sftp协议等的,各有千秋。下面介绍三种工具:即SCP、FileZilla、Xftp 。
¶3.1 scp
scp 就是 secure copy
,是基于ssh
登陆进行安全的远程文件拷贝命令。只要服务器安装有ssh服务软件,客户端安装有ssh客户端软件,并建立起了连接,则可以直接使用。它的地址格式与 ssh 基本相同,需要注意的是,在指定端口时用的是大写的 -P
而不是小写的。
1 | # 把本地当前目录下的 01.py 文件 复制到 远程 家目录下的 Desktop/01.py |
选项 | 含义 |
---|---|
-r | 若给出的源文件是目录文件,则 scp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名 |
-P | 若远程 SSH 服务器的端口不是 22,需要使用大写字母 -P 选项指定端口 |
注意:
scp
这个终端命令只能在Linux
或者UNIX
系统下使用如果在
Windows
系统中,可以安装PuTTY
,使用pscp
命令行工具或者安装FileZilla
使用FTP
进行文件传输
¶3.2 FileZilla
官方网站:https://www.filezilla.cn/download/client
FileZilla
在传输文件时,使用的是 FTP 服务
而不是 SSH 服务
,因此端口号应该设置为 21
。使用FTP服务的时候,我们都知道默认是21号端口,其实还有一个20号端口。FTP使用两个TCP连接,21号端口负责控制连接,20号端口负责数据连接。
¶3.3 Xftp
官方网站:https://www.netsarang.com/products/xfp_overview.html
Xftp除了使用FTP服务还使用了SFTP服务,通过使用SFTP协议连接服务器传输文件会更安全。SFTP是SSH的一部分,在SSH软件包中,已经包含了一个SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作。由于这种传输方式使用了加密/解密技术,文件传送相对来说是很安全的,但是是有代价的,它的传输效率比FTP要低得多。
¶3.4 lrzsz
基于命令操作的上传下载的工具 lrzsz
,目前主流的SSH连接工具 ( SecureCRT、XShell 等 ) 都支持这些协议。
1 | 服务器安装 |
¶十二、磁盘管理
¶1. 查看磁盘剩余空间
1 | disk free 查看磁盘剩余空间 |
¶2. 查看目录或文件大小
1 | disk usage 显示目录下的文件大小 |
参数 | 含义 |
---|---|
-h | 以人性化的方式显示文件大小 |
¶十三、其他系统命令
序号 | 命令 | 作用 |
---|---|---|
01 | date | 查看系统时间 |
02 | cal | calendar 查看日历,-y 选项可以查看一年的日历 |
¶十四、系统监控
¶1. iftop
iftop可测量通过每一个套接字连接传输的数据。iftop使用pcap库来捕获进出网络适配器的数据包,然后汇总数据包大小和数量,搞清楚总的带宽使用情况。
虽然iftop报告每个连接所使用的带宽,但它无法报告参与某个套按字连接的进程名称/编号(ID)。不过由于基于pcap库,iftop能够过滤流量,并报告由过滤器指定的所选定主机连接的带宽使用情况。
1 | 安装 |
n选项可以防止iftop将IP地址解析成主机名,解析本身就会带来额外的网络流量。
¶2. nload
nload是一个命令行工具,让用户可以分开来监控入站流量和出站流量。它还可以绘制图表以显示入站流量和出站流量,视图比例可以调整。用起来很简单,不支持许多选项。
1 | 安装 |
¶3. htop
htop是top的扩展版本,有更丰富的概貌(例如全命令、可视化、图形用户界面gui和用户界面ui),有鼠标点击交互(译者注:看下面的截图,指的是最上面的列标题如CPU%、MEM%等可以通过鼠标点击切换以显示不同的功能),也有许多的指导教你如何做进程管理。
1 | 安装 |
¶4. iotop
iotop – 简单的类似top的I/O监控器。
iotop是IO实时监控器。使用它们附属的详细输入输出(IO)使用方法可以展示出你系统中每个进程线程的信息。
该命令可以与$ tcpdump(响应网络流量的命令)一起使用。如果你发现你的web服务器上有程序在运行,你可以,比如运行$ tcpdump port 80检查端口80(标准的http端口)的网络流量来观察细节。
最有用的信息可能是DISK WRITE这一列,从该列你可以准确的看到每个IO使用了多少个进程,单位为K/s。
1 | 安装 |
¶5. glances
glances是一款由python开发的系统监控工具,可以实时查看CPU、内存、网络、IO、进程、磁盘空间使用率的使用情况,并且支持三种运行模式,个人感觉比top命令使用更便捷,有三种运行模式:Standalone、Client/Server、Web server。
¶安装
1 | CentOS |
¶Standalone模式
可以查看系统运行详细情况。
在运行
glances
时可以使用h
键来查看glances
快捷键使用方法。
运行过程中,直接按回车键可以对进程进行过滤,查看指定进程。
¶Client/Server模式
Server端:glances -s -B 192.168.1.1
Client端:glances -c 192.168.1.1
无须去指定服务器上运行,通过Client/Server端模式快速查看。-B:指定绑定的IP地址,如果不指定Server端运行端口默认端口为:61209,如果使用默认端口则用-c指定客户端时不需要额外使用-P参数来指定Server端的端口号。需要注意的是防火墙设置,确认两台主机之间端口可通。
¶Web server模式
glances -w
这个功能就很贴心了,我可以将集群中所有服务器上后台运行Web Server端,后续防火墙开放指定IP查看集群中服务器的运行状态,美滋滋。
如果启动Web Server端时出现**“Bottle module not found. Glances cannot start in web server mode.”**报错,执行安装bottle即可解决。
1 | pip install bottle |
¶配置文件
glances是支持设置配置文件的,但是不一定要有配置文件才能使用glances,Linux中配置文件可以新建位置到
/etc/glances/glances.conf
,窗口中的不同颜色是由阈值来设定的,我们可以在配置文件中修改各监控项的阈值来实现不同级别不同颜色的展示情况。
¶颜色级别定义
- 绿色:正常(OK)
- 蓝色:小心(CAREFUL),需要注意
- 紫色:警告(WARNING)
- 红色:问题严重(CRITICAL)
¶配置文件示例
1 | vim /etc/glances/glances.conf |
这里我们为了展示出颜色的差异,特别修改了几个为1的值,实际使用中修改到需要的值即可。
最终展示界面如上图所示。
¶十五、时间管理
¶1. 查看时间
1 | 查看当前系统时间 |
¶2. 修改时间
1 | 修改时分秒 |
¶3.设置时区
1 | 显示系统的所有时区 |
¶4. 时间同步
¶4.1 单机版
1 | 安装ntpdate |
¶4.2 集群版
方案:集群中,要求有一台能访问外网的服务器作为时间服务器,其余内网服务器通过这台时间服务器来实现时间同步。有两种常用的服务工具实现:ntp和chrony
注意:这里ntp和chrony相比于ntpdate的区别在于,ntpdate只能手动单次同步时间(除非编写cronp配置),其同步时间的速度是很快的。而ntp和chrony本身就可以自己定时同步时间,其同步时间的速度可能需要几分钟以上。
全球相关ntp时间服务器:https://www.ntppool.org/zh/
¶4.2.1 ntp
(1)安装和环境准备
1 | 安装ntp |
(2)修改ntp参数配置文件
🙆♂对于ntpd,发现这里不做配置也可以自动同步硬件时间。
1 | vim /etc/sysconfig/ntpd |
修改或者追加如下配置
1 | #同步时间后,写到硬件中 |
(3)修改ntp配置文件
1 | 修改ntp配置文件(只做以下相关配置修改,其余保持不变) |
服务端配置
1 | #允许192.168.60.0网段内所有机器从本机同步时间 |
客户端配置
1 | #从node1中同步时间 |
(4)启动和测试
1 | ntpd进程进行同步时,可能需要5-10分钟的时间才能同步,另外ntpd开启后,则无法使用ntpdate,所以可以提前先手动同步 |
¶4.2.2 chrony
(1)安装和环境准备
1 | 安装chrony |
(2)修改chrony配置文件
1 | 修改配置文件(只做以下相关配置修改,其余保持不变) |
服务端配置
假设服务端ip为192.168.60.101
1 | #外网ntp时间服务器地址 |
客户端配置
1 | # 删除其它server,并添加如下server |
(3)启动和测试
1 | 启动服务 |
¶十六、常用命令一览
查看内存使用情况:
free -h
,其中-h
:显示可用mb单位修改文件权限:
chmod 777 *
切换用户:
su root
解压 tar包:
tar -xvf file.tar
解压tar.gz:
tar -xzvf file.tar.gz
解压tar.xz:
tar xvJf file.tar.xz
解压rar:
unrar e file.rar
解压zip:
unzip file.zip
下载网络文件
wget http://file.zip
改变文件所有者:
chown [选项] [所有者]:[组] file
,其中选项-R
: 处理指定目录以及其子目录下的所有文件查看进程 :
ps -ef | grep java
或ps -aux | grep java
,其中-aux
:显示所有状态查看端口:
netstat -nap|grep 端口号
终止进程:
kill -9 [PID]
安装软件:
yum -y install 包名
,其中选项y表示自动选择,包名支持*卸载软件:
yum remove 包名
,包名不支持*安装rpm包:
rpm -ivh 包名
,包名支持*卸载rpm包:
rpm -e 包名
,包名不支持*
¶十七、shell编程重要命令总结
¶1. sed命令工具
-
偏向场景是以流处理的方式编辑文档
-
处理方式:以行处理
sed是一种几乎包括在所有 UNIX 平台(包括 Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
¶1.1 格式
1 | sed [选项] '[ 匹配地址 [!] 动作]' 文件名 |
!
表示对匹配地址的行不执行动作匹配地址可以是:
(1)模式匹配地址,即正则表达式
(2)行数范围,写数字
常用选项
-n
: 一般sed命令会把所有
数据都输出到屏幕 ,如果加入此选择,则只会把经过sed命令处理的行
输出到屏幕。
-e
: 允许对输入数据应用多条sed命令编辑
-i
: 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出(即会修改源数据)
动作(作用于行)
a \
: 追加,在当前行后添加一行或多行。添加多行时,除最后 一行
外,每行末尾需要用“\”代表数据未完结。
c \
: 行替换,用c后面的字符串替换原数据行,替换多行时,除最
后一行外,每行末尾需用“\”代表数据未完结。
i \
: 插入,在当期行前插入一行或多行。插入多行时,除最后 一行
外,每行末尾需要用“\”代表数据未完结。
d
: 删除,删除指定的行。
p
: 打印,输出指定的行。
s
:字串替换,用一个字符串替换另外一个字符串。格式为“行范。(作用于行中的字符串)
围s/
旧字串/新字串/g”
(和vim中的替换格式类似)
¶1.2 在第二行后追加一行内容
1 | sed -i '2a s003,\tlisi,\tjava,\t100,\tok,' student.txt #不加-i则会输出到屏幕(即不修改原文件的内容),加了-i则会输出会原文件以覆盖原内容 |
¶1.2 在第二行前追加两行内容
1 | sed '2i \ |
\
表示输入未结束
¶1.3 打印行
1 | sed -n '2 p' student.txt #只打印第二行,-n防止打印第二行后还会打印所有行 #此处的2是行数匹配地址 |
¶1.4 删除行
删除第二行到第三行(不改变源文件的数据,只输出删除后剩余的结果)
1 | sed '2,3d' student.txt |
删除第一行并修改文本源数据(将输出结果覆盖作用的文件内容)
1 | sed -i '1d' student.txt |
¶1.5 字符串替换
sed ' 匹配地址 s/旧字串/新字串/g' 文件名
此处匹配地址如果是正则匹配地址,那么一定要加/ /
以表示正则模式
把第二行的wen
改成xuan
¶2. awk 命令工具
-
偏向场景是以流处理的格式化报表输出
-
处理方式:以行处理
¶2.1 格式
1 | awk '条件1{动作1} 条件2{动作2} …' 文件名 |
条件(Pattern):
一般使用关系表达式作为条件
x > 10 判断变量 x是否大于10
x>=10 大于等于
x<=10 小于等于
动作(Action):
格式化输出
流程控制语句如果没有指定条件,每行都执行相应的动作
所有的动作或者命令都要用{}括起来
测试文件:student.txt:
1 | s001, wen, java, 90, ok, |
¶2.1.1 输出第一列和第二列
1 | awk '{print $1$2}' student.txt |
¶2.2 BEGIN
BEGIN是在所有的数据读取之前的命令语句,以是否执行成功为条件结果,满足BEGIN才执行{}里的内容
¶2.2.1 测试BEGIN
1 | awk 'BEGIN{print "hello"} {print $1 "\t" $2}' student.txt |
¶2.3 FS
内置对象
作用:给awk命令设置识别的分隔符
1 | awk '{FS=","} {print $1 "\t" $2}' student.txt |
awk默认是先读入一行数据才开始处理后面的动作,故在指定分隔符后,从第二行开始才生效,而第一行无效。
处理:
¶2.3.1 测试FS
使用BEGIN,让awk读取第一行数据前就先指定分隔符。
1 | awk 'BEGIN{FS=","} {print $1 "\t" $2}' student.txt |
¶2.4 END
作用:在所有数据都读取并执行完所有动作之后再执行某个动作,以是否成功为条件结果。
¶2.4.1 测试END
1 | awk '{print $1$2}END{print "ending over !"}' student.txt |