赞
踩
1991 年 Linus Torvalds 仿造 Minix 开发了与 UNIX 兼容的 Linux 操作系统内核。
1991 年 10 月发布linux0.02 版本
1993 年发布linux0.99 版本
1994 年 3 月发布linux1.0 版本,遵循GPL 协议
1994 年加入GNU 组织
…
当前最新稳定内核版本为:6.3.4
https://www.kernel.org
开放性(遵循标准)
多用户
多任务
良好的用户界面
设备独立性(把外部设备当作文件处理)
丰富的网络功能
可靠的系统安全
良好的可移植性
什么是 linux?
是一个类 UNIX 内核的可以自由发布的实现版本,是一个操作系统的底层核心(内核)
Linux => 内核
Linux 系统 => 内核 + 工具 + 配套软件
GNU GPL 全称是 GNU General Public License(自由文件许可)
GPL核心思想:
保证任何人有共享、修改、发布自由软件的自由
自由软件的衍生作品必须以 GPL 为重新发布的许可证
允许公司销售自由软件(硬件/服务),提供源代码
Linux 类型
常见的发行版本有:Centos、Ubuntu、Debian
自由软件
免费软件
商业软件
共享(试用)软件
虚拟机安装方式
云主机安装方式
稳定版
内核的特性已经固定,代码运行稳定可靠,不再增加新的特性,要改进也只是修改代码中的错误。
2.6 及以下版本(x.y.zz)
3.0 开始
次版本号不再表示一个内核是稳定版本还是测试版本,所有发布出来的正式版本都是稳定版本
Windows 下一般分了 C、D、E、F 盘等
Linux 下没有分磁盘,在根路径下存在许多系统文件,它们都有特定的用途:
系统结构图:
主要组件:
命令 | 选项 | 含义 | 常用命令例子 |
---|---|---|---|
shutdown | -h | 关闭系统并停止电源 | shutdown -h now 关闭系统并立即停止电源 |
作用:关机 | -r | 关闭系统并重新启动 | shutdown -r +5 关闭系统并在 5 分钟后重新启动 |
-c | 取消之前的关机计划 | shutdown -c 取消之前的关机计划 | |
-k | 发送警告信息而不进行关机操作 | shutdown -k +10 发送警告信息并在 10 分钟后进行关机操作 | |
init | 0 | 关闭系统并停止电源 | init 0 关闭系统并停止电源 |
作用:切换运行模式 | 6 | 关闭系统并重新启动 | init 6 关闭系统并重新启动 |
3 | 进入多用户模式,允许多个用户登录使用 | init 3 进入多用户模式,允许多个用户登录使用 | |
5 | 进入图形化界面模式,允许用户登录使用图形化界面 | init 5 进入图形化界面模式,允许用户登录使用图形化界面 | |
halt | -p | 关闭系统并停止电源 | halt -p 关闭系统并停止电源 |
作用:关机 | -d | 不要在wtmp中记录 | halt -d 关闭系统,但不留下日记记录 |
reboot | -f | 强制重启,不进行正常的系统关机操作 | reboot -f 强制重启,不进行正常的系统关机操作 |
作用:重新启动 | -d | 不要在wtmp中记录 | reboot -d 重启系统,但不留下日记记录 |
命令:man xxx(xxx为命令名)
例如:man ls
安装 man 命令:yum install -y man man-pages
Shell 是一个作为实现虚拟终端的一种程序,它允许用户向操作系统输入需要执行的命令,返回执行结果。
ash
贝尔实验室开发的Shell,bsh是对ash的符号链接
bash(GNU Linux操作系统上默认的 Shell)
是GNU的Bourne Again Shell。sh以及bash2都是对它的符号链接
tcsh
是Berkeley UNIX C Shell。csh是对它的符号链接
ksh
Korn Shell的语法与Bourne Shell相同,同时具备了C Shell的易用特点
zsh
Korn Shell 的一个增强版本,具备bash Shell的许多特点
常用快捷键:
ctrl + r
反向搜索命令历史记录
ctrl + a
ahead 移动光标到行首
ctrl + e
end 移动光标到行尾
ctrl + d
delete 删除光标所在字符
ctrl + u
光标所在位置剪切到行首
ctrl + k
光标所在位置剪切到行尾
ctrl + y
粘贴剪切板内容
输出重定向
文件不存在则创建,文件存在则覆盖
echo abc > list.txt
追加重定向
文件不存在则创建,文件存在则在末尾追加内容
echo abc >> list.txt
高级重定向
文件描述符有以下三种
# 默认情况,将正常输出和错误输出都输出到屏幕
ls /usr/abc
# 通过重定向,改变标准输出的位置
ls /usr/abc > ok.txt
# 文件描述符 1 即为标准输出
ls /usr/abc 1> ok.txt
# 指定文件描述符 2 改变标准错误输出的位置
ls /usr/abc 2> err.txt
# 同时改变标准输出和标准错误输出的位置
ls /usr/abc 1> ok.txt 2> err.txt
将第一个命令的输出传递给第二个命令
普通文件(regular file):[-]
纯文字文件(ascii)或二进制文件(binary)
目录(directory):[d]
链接文件(link):[I]
设备文件(device):
管道文件(Pipe):[p]
Socket文件(Socket):[s]
指从用户工作目录开始的路径
指从 根 开始的路径,也称为完全路径
~ 当前用户主目录
/ 根路径
用户某一时刻处在的目录,也成为当前目录
每个用户都有自己的目录。root用户在/root下,普通用户一般在/home下。
用户主目录可以用符号 ~ 表示
作用:打印内容
格式:echo [-n] 字符串
-n 表示输出字符串的最后不换行
作用:清空屏幕
格式:clear
作用:显示指定工作目录下的内容
格式:ls [选项] <路径>
选项 | 作用 |
---|---|
-a | all,列出所有文件,包含隐藏文件 |
-l | long,长格式打印 |
-i | inode,列出 inode 节点的值 |
-t | time,按时间排序 |
-S | size,按文件大小排序 |
-d | directory,如果是目录,则只显示目录,不显示目录下的内容 |
-R | recursive,递归显示目录及子目录的内容 |
作用:显示当前路径
格式:pwd
作用:切换路径
格式:cd <路径>
作用:创建目录
格式:mkdir [选项] <目录>
-p 自动创建不存在的中间目录
例子:
# 自动创建中间不存在的目录
mkdir -p dir4/dir5
作用:删除目录。(只能删除空目录)
格式:rmdir [选项] <目录>
-p 删除路径中的空目录
作用:删除文件或目录
格式:rm [选项] <路径>
-r 递归删除子目录的内容
-f 强制删除不进行提示
作用:用于改变文件的时间记录/创建一个空文件
格式:touch [选项] <文件>
-a 改变档案的读取时间记录
-m 改变档案的修改时间记录
-r 使用参考档的时间记录
-d 设定时间与日期,可以使用各种不同的格式
作用:连接文件并打印到标准输出设备上
格式:cat [选项] <文件>
-n 给每行编号
-b 除了空白行,给每行编号
作用:分页显示文件内容
格式:more [选项] <文件>
+n 从第 n 行开始显示
-S 把连续的多行空行显示为一行
基本操作:
q:退出
空格:下一页
回车:下一行
作用:分页显示文件内容
格式:less [选项] <文件>
-e 当文件显示结束后,自动退出
-f 强迫打开特殊文件
-i 忽略搜索时的大小写
-N 显示每行的行号
-S 显示连续空行为一行
基本操作:
q:退出
空格:下一页
回车:下一行
上下移动键:上下移动
命令 | 区别 |
---|---|
less | 支持向前和向后翻页,可以搜索文本,支持多种操作和快捷键。less 按需加载,速度会比 more 快一些 |
more | 只支持向前翻页,无法向后翻页,只能使用空格键翻页,不能搜索文本。 |
作用:显示文件的开头的内容。默认情况下显示文件的前 10 行内容。
格式:head [选项] <文件>
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数
-n<行数> 显示的行数
例子:
# 显示前 5 行内容
head -5 file
head -n 5 file
# 显示前 20 个字符的内容
head -c 20 file
作用:显示文件的结尾的内容。默认情况下显示文件的最后 10 行内容。
格式:tail [选项] <文件>
-f 当文件发生变化时,输出文件新增内容
-c<数目> 显示的字符数
-n<行数> 显示的行数
-v 显示详细的处理信息
例子:
# 显示最后 5 行内容
tail -5 file
tail -n 5 file
# 显示最后 20 个字符的内容
tail -c 20 file
# 实时监控文件的内容
tail -f file
作用:文件或目录的复制
格式:cp [选项] 原路径 目标路径
-a 复制目录时,保留连接、文件属性,并复制目录下的所有内容
-f 覆盖已存在的目标文件而不进行提示
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
-r 递归复制目录中的所有内容,包括子目录
作用:移动文件或目录(重命名)
格式:mv [选项] 原路径 目标路径
-i 目标路径如果同名,先询问是否覆盖
-f 覆盖已经存在的目标文件而不提示
-n 不要覆盖任何已存在的文件或目录
uid 为 0
root,有最高权限,可以对 Linux 做任何操作
uid 范围为 1001以后
权限受限,用户之间私人的资源是相互隔离的
uid 范围为 1-1000
与系统和程序服务相关的用户,默认情况下,这些特殊用户无法登录。
用户信息文件存储在 /etc/passwd
口令文件存储在 /etc/shadow
组信息文件存储在 /etc/group
作用:新增用户
格式:useradd [选项] 用户名
-d dirName 指定用户主目录。默认在 /home 下新建一个与用户名相同的用户主目录
-s shellName 指定用户登录时使用的 Shell。默认为 /bin/bash
-g groupName 指定用户所属的组名。创建用户时默认创建一个与用户同名的组
-G groupList 一个用户可以属于多个组。用户创建时属于的组成为主组,其他的叫附属组
-u uid 指定新用户的 UID。新用户默认 UID 为当前最高 UID + 1
权限:需要 root 权限
作用:修改密码
格式:passwd [用户名]
权限:普通用户只能修改自己密码。root 可以修改其他人密码。
作用:修改用户属性
格式:usermod [选项] 用户名
-d dirName 指定用户主目录。默认在 /home 下新建一个与用户名相同的用户主目录
-s shellName 指定用户登录时使用的 Shell。默认为 /bin/bash
-g groupName 指定用户所属的组名。创建用户时默认创建一个与用户同名的组
-G groupList 一个用户可以属于多个组。用户创建时属于的组成为主组,其他的叫附属组
-u uid 指定新用户的 UID。新用户默认 UID 为当前最高 UID + 1
权限:需要 root 权限
作用:删除用户
格式:userdel [-r] 用户名
权限:需要 root 权限
作用:增加用户组
格式:groupadd [-g n] 组名
-g n 指定组的 ID 为 n
权限:需要 root 权限
作用:删除用户组
格式:groupdel 组名
权限:需要 root 权限
作用:改变指定目录或文件的权限
格式:chmod [-R] 权限模式 路径
u 表示文件拥有者
g 表示同组用户
o 表示其他以外的人
a 表示这三者皆是
+表示增加权限
-表示取消权限
=表示设置特定的权限
r 表示可读取
w 表示可写入
x 表示可执行
例子:
chmod a=rx,u+w,g-x,o-rx a.txt
chmod 640 a.txt
# 递归设置
chmod -R 765 dir
作用:改变指定目录或文件的所属用户、所属组
格式:chown [-R] 用户名[:组名] 路径
权限:需要 root 权限
例子:
# 只修改用户名
chown wilson a.txt
# 同时修改用户名和组名
chown wilson:wilson a.txt
# 递归处理
chown -R wilson dir
作用:改变指定目录或文件的所属组
格式:chgrp [-R] 组名 路径
权限:需要 root 权限
作用:创建文件的快捷方式
格式:ln [-s] 源路径 目标路径(需要指定绝对路径,否则链接失效)
加 -s 就是创建软链接
作用:备份文件
格式:tar [选项] 压缩文件名 路径
-c 创建备份
-C path 切换到指定目录
-f 指定备份文件
-t 测试备份文件
-v 显示指令执行过程
-x 从备份中还原文件
-z 通过 gzip 指令处理备份文件
例子:
# 对 dir 的内容打包(没有压缩,只是打包)
tar cvf dir.tar dir
# 默认解包到当前目录下
tar xvf dir.tar
# 指定解包到 /tmp 目录下
tar xvf dir.tar -C /tmp
# 打包压缩
tar zcvf dir.tar.gz dir
作用:用于压缩文件(只对文件有效)
格式:gzip [选项] 文件
-d 解开压缩文件
-l 列出压缩文件的相关信息
-r 递归处理指定目录
-v 显示指令执行过程
-t 测试压缩文件是否有误
作用:用于解压缩 zip 文件
格式:unzip [选项] 路径
-n 解压时不要覆盖原有文件
-l 列出压缩文件的相关信息
-d dir 指定解压时存放的目录
-v 显示指令执行过程
-t 测试压缩文件是否有误
例子:
# 默认解压到当前目录
unzip a.txt.zip
# 通过 -d 指定解压目录
unzip -d /tmp a.txt.zip
作用:强大的文本数据处理工具
格式:awk [选项] ‘脚本命令’ 文件名
-F fs 指定分隔符fs,fs可以是字符串或正则表达式
-v 复制一个用户定义变量
-f scriptfile 从脚本文件中读取 awk 命令
例子:
# $1,$5 是定位符,表示取哪一列
cat /ect/passwd | awk -F: '{print $1,$5}'
awk -F: '{print $1,$5}' /etc/passwd
# -va=1 表示设置一个值为1的局部变量 a,可以在后面使用
cat /etc/passwd | awk -va=1 -F: '{print $1,$4+a}'
作用:自动编辑一个或多个文件,简化对文件的反复操作、编写转化程序等
格式:sed [选项] 处理文件路径
a 在指定行号之后插入
c 整行替换
s 匹配替换
i 在指定行号位置插入
d 删除
例子:
# 在第一行后插入内容
sed '1a Hello Unix' test.txt
# 替换第二行的内容
sed '2c Hello Unix' test.txt
# 全局替换内容
sed 's/b/B/' test.txt
注意:以上操作不会修改源文件,如果想要修改源文件,需要加上 -i 选项
作用:从指定文件中过滤或提取特定内容,并显示在当前屏幕上。
格式:cut [选项] 路径
-b 以字节为单位进行分割
-c 以字符为单位进行分割
-d 自定义分隔符,默认为制表符
-f 与 -d 一起使用,指定显示哪些列
例子:
cut -d: -f1,3,5 /etc/passwd
cut -c2-5 /etc/passwd
cut -c2,5,7 /etc/passwd
作用:用于转换或删除文件中的字符
格式:tr [-d] 字符串1 字符串2
例子:
# 小写转大写
cat /etc/passwd | tr 'a-z' 'A-Z'
# 删除所有 a/b/c 字符
tr -d 'a-c' < test.txt
作用:查找文件或者目录
格式:find 路径 [选项] 表达式
-amin n 过去n分钟内被读取过的文件
-atime n 过去n天内被读取过的文件
-cmin n 过去n分钟内被修改过的文件
-ctime n 过去n天内被修改过的文件
-type c 文件类型是c的文件
-perm p 文件权限为p的文件
-name n 文件名为n的文件
例子:
# 查找当前目录下所有以 .conf 结尾的文件(含目录)
find . -name "*.conf"
# 查找根目录下权限为765,以 .txt 结尾的文件(含目录)
find / -perm 765 -name "*.txt"
#
作用:查找文件中符合条件的字符串
格式:grep [选项] pattern [文件]
-i 忽略字符大小写的差别
-v 显示不包含匹配文本的所有行
-n 显示匹配行及行号
例子:
# 打印包含 root 的行
grep 'root' /etc/passwd
cat /etc/passwd | grep 'root'
# 打印不包含 root 的行
cat /etc/passwd | grep -v 'root'
给文件一个副本(别名),同时建立两者之间的连接关系。
产生一个特殊的文件,该文件的内容是指向另一个文件的位置。
特性 | 软链接 | 硬链接 |
---|---|---|
适用场景 | 跨文件系统的链接、可跨越不同的机器和网络 | 仅适用于同一文件系统内的链接 |
inode节点 | 不与原文件共享inode节点,有自己独立的inode节点 | 与原文件共享inode节点,与原文件的inode节点相同 |
链接数 | 链接数为 1,即使创建多个软链接,也只会计算为 1 | 链接数大于等于 2,每创建一个硬链接,链接数加 1 |
文件的属性 | 拥有自己的文件属性,如权限、时间戳等 | 与原文件共享相同的文件属性 |
对链接进行操作(修改、删除)对原文件的影响 | 不会影响原文件,只会影响软链接本身 | 修改任意一个文件都会影响其他文件。 |
对原文件进行操作(修改、删除)对链接的影响 | 原文件被删除或移动后,软链接会失效 | 原文件被删除或移动后,硬链接仍然有效 |
注:软链接也称为符号链接。
# 以长格式的形式打印/tmp目录下的所有文件,包括隐藏文件 ls -la /tmp # 把/tmp/a.txt文件的权限修改为rwxr-xr-- chmod 754 /tmp/a.txt # 把/tmp/b.txt文件的文件拥有者修改为mail,同组用户修改为games chown mail:games /tmp/b.txt # 把/tmp/c.txt重命名为/tmp/c.txt.bak mv /tmp/c.txt /tmp/c.txt.bak # 把当前时间追加到当前用户主目录下的d.txt文件 date >> d.txt # 把系统当前用户的个数追加到当前用户主目录下的d.txt文件 wc -l /etc/passwd >> ~/d.txt # 创建当前用户主目录下d.txt的软链接,链接到/tmp/e.txt ln -s ~/d.txt /tmp/e.txt # 利用tar打包/tmp目录,生成 tmp.tar压缩包,并保存在当前目录下 tar -zcvf ./tmp.tar /tmp # 查看进程名为vsftpd 的进程信息 ps -ef | grep vsftpd # 查找/usr目录下以xml结尾的所有文件 find /usr -name "*.xml"
作用:打印日期
格式:cal
-3 显示最近三个月的日历
-s 将星期天作为月的第一天
-m 将星期一作为月的第一天
-y 显示当年日历
作用:显示或设定系统的日期与时间
格式:date [选项] 时间格式
%H 小时(00-23)
%M 分钟(00-59)
%S 秒(00-60)
%Y 完整年份(0000-9999)
%m 月份(01-12)
%d 日(01-31)
命令 | 作用 |
---|---|
date | 显示当前的日期和时间 |
date -s | 设置系统时间为指定的时间 |
date +% | 按照指定的格式显示当前的日期和时间 |
date -d | 显示指定字符串所表示的日期和时间 |
例子:
date "+%Y-%m-%d %H:%M:%S"
作用:默认统计文件内的行/字和字节数
格式:wc [选项] 文件路径
-c 按字节统计
-l 按行数统计
-m 按字符统计
-w 按单词统计
作用:对内容排序
格式:sort [选项] 文件路径
-f 排序时,将小写字母视为大写字母
-n 按照数值大小排序
-u 去重排序
-o file 将排序后的结果存入指定的文件
-r 以相反的顺序来排序
cat a.txt
# a
# c
# b
# c
sort a.txt
# a
# b
# c
# c
作用:查找文件
格式:which | whereis 命令
例子:
which useradd
whereis useradd
作用:变更为其他使用者的身份。除 root 外,需要键入该使用者的密码。
格式:su [选项] [用户名]
例子:
su -c "whoami" wilson
# 保存&退出 :q # 正常退出 :q! # 强制退出 :w # 写入文件 :w filename # 另存为 :wq # 写入后退出 :wq! # 写入后强制退出 :x # 与:wq一样 # 临时显示行号 :set nu | :set number # 显示所有行号 :nu | :number # 显示光标所在行号 :set nonu | :set nonumber # 取消行号显示 # 长期显示行号 vi ~/.vimrc # 修改当前用户的vim配置文件 # 搜索 /<pattern> # 从光标所在文件往下搜索 ?<pattern> # 从光标所在位置往上搜索 # n -> 向下搜索下一个匹配项 N -> 向上搜索上一个匹配项 # 替换 :s/x/y # 把光标所在行第一个匹配的 x 替换为 y :n,m s/x/y # 把第n行到m行每行中第一个匹配的x替换为y :% s/x/y # 把当前文件中所有行的第一个匹配的x替换为y g # 全局匹配 :s/x/y/g # 删除 :n,m d # 删除第n行到m行之间的内容
h左 j下 k上 l后,也可以使用键盘上下左右键
$ 移动到行末
0,^ 定位到行首
gg 定位到第一行行首
G 定位到末行行首
nG 定位到第n行行首
n+ 向下移动n行
n- 向上移动n行
w | nw (word) 移动到下一/n个字首
e | ne (end) 移动到下一/n个字尾
b | nb (back) 移动到上一/n个字首
( 上一句
) 下一句
{ 上一段
} 下一段
ctrl + b 上翻一页
ctrl + f 下翻一页
ctrl + u 上翻半页
ctrl + d 下翻半页
x | nx 删除一/n个字符
dd | ndd 删除一/n行
dG 删除所有内容
d[w|e|b|$|^|G|gg…] 删除光标移动范围内的内容
u 撤销上一步操作
U 撤销对当前行的所有操作
yy | nyy 复制一/n行
d[w|e|b|$|^|G|gg…] 复制光标移动范围内的内容
p 粘贴到光标所在位置下一个字符位置
vi下的删除操作,删除的内容会缓存到粘贴板上,可以通过p来重新粘贴
r | nr 替换光标所在字符(相同字符)
R 进入替换模式,替换光标所在字符,直到按下ESC
s #删除光标所在字符后插入
i #在光标左侧插入
I #在光标所在行首插入
a #在光标右侧插入
A #在光标所在行尾插入
o #在光标所在行的下一行插入
O #在光标所在行的上一行插入
S #删除光标所在行
ZZ 与末行模式 :wq 效果一样
# 默认定位第一行
vi /path/to/file
# 打开文件后把光标置于第n行
vi +n filename
# 打开文件后把光标置于最后一行
vi + filename
vi filename1 filename2 filename3
# 末行模式下进行切换
# :e filename2
在末行模式下,用 ! 符号来访问 Linux 的 Shell
:!cat /etc/passwd | more
每次打开文件会创建一个 *.swp 的临时文件
当多界面编辑、vi异常退出时会导致异常
删除 *.swp 即可
Window 换行结束符号有两个控制字符,一个是归位字符^M
,另一个是换行字符^J
Linux 中只使用一个换行字符 \n
使用工具进行格式转换
yum install -y dos2unix unix2dos
使用
unix2dos | dos2unix filename 格式转换后覆盖更新原文件
unix2dos | dos2unix -n newFilename filename 格式转换后存为新文件
# 执行 man ls > out.txt ,生成out.txt文件 man ls > out.txt # 使用 vi 打开 out.txt vi out.txt # 显示所有行号 :set number # 光标移动到100行,向右移动10个字符 100G 10l(或10键盘右方向键) # 移动到第一行,往下搜索“1024”,定位到第二个匹配项 gg /1024 n(向下查找第二个) # 将50行到100行之间的小写“o”改写为大写"O :50,100 s/o/O/g # 修改完了,突然反悔,如何恢复修改前? 多次执行u # 复制65到73行之间这9行的内容,粘贴到最后一行 65gg 9yy G p # 删除21到42行之间的所有内容 20G 22dd # 把当前文档另存为 out.txt.bak :w out.txt.bak # 定位到28行,删除3个单词 28G d3w # 在第一行新增一行,输入"I am a Student!" gg O I am a Student! # 保存退出 :wq
ifconfig ens33 up / ifup ens33
ifconfig ens33 down / ifdown ens33
文件 | 作用 |
---|---|
/etc/sysconfig/network | 最基本的网络信息,系统启动时读取该文件 |
/etc/sysconfig/network-scripts/ ** | 此目录下的文件是系统启动时用来初始化网络的一些信息。 |
/etc/host.conf | 域名解析的配置文件 |
/etc/resolv/conf | 域名服务器配置文件 |
/etc/protocols | 定义使用的网络互联协议及协议号 |
/etc/services | 设定主机的不同端口的网络服务 |
/etc/rc.d/rc.local
赋予脚本可执行权限
chmod +x /opt/script/autostart.sh
在 /etc/rc.d/rc.local 末尾增加想要执行的脚本内容
echo “/opt/script/autostart.sh” >> /etc/rc.d/rc.local
给 /etc/rc.d/rc.local 赋予可执行权限
chmod +x /etc/rc.d/rc.local
chkconfig
将脚本移动到 /etc/rc.d/init.d 目录下
mv /opt/script/autostart.sh /etc/rc.d/init.d
赋予脚本可执行权限
chmod +x /etc/rc.d/init.d/autostart.sh
添加脚本到开机自启动项目中
cd /etc/rc.d/init.d
chkconfig -add autostart.sh
chkconfig autostart.sh on
systemctl
以 mysql 为例
systemctl enable mtsql.service
systemctl start mysql
命令 | 作用 |
---|---|
ping | 向指定主机发送 ICMP 回显请求 |
ping -c | 向指定主机发送指定数量的 ICMP 回显请求 |
ping -i | 指定发送 ICMP 回显请求的时间间隔 |
ping -s | 指定 ICMP 回显请求的数据包大小 |
ping -t | 指定 ICMP 回显请求的生存时间 |
ping -v | 显示 ICMP 回显请求和回应的详细信息 |
其中 <host>
是要测试的目标主机的 IP 地址或域名。
Linux系统中的网络服务模型有两种:
独立的守护进程工作模式(stand-alone)
守护进程的工作就是打开一个端口,并且等待(Listen)进入连接
如果客户端发起一个连接请求,守护进程就创建(Fork)一个子进程响应这个连接,而主进程继续监听其他的服务请求
基于 xinetd 的工作模式(Internet Super Server)
xinetd能够同时监听多个指定的端口,在接受用户请求时,它能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求
可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给哪个程序处理,然后就启动相应的守护进程
工作模式 | 优点 | 缺点 |
---|---|---|
独立的守护进程工作模式 | - 不需要安装 xinetd 服务 - 相对简单,易于管理和维护 - 可以独立地控制每个服务的访问权限 | - 每个服务都需要独立地监听端口,占用系统资源 - 容易受到网络攻击 - 无法限制并发连接数 |
基于 xinetd 的工作模式 | - 可以集中管理所有服务的访问权限 - 可以限制并发连接数,防止 DoS 攻击 - 可以根据需要启动和停止服务,减少系统资源占用 | - 需要安装 xinetd 服务,增加系统复杂性 - 需要编写 xinetd 配置文件,增加配置难度 - xinetd 进程本身可能成为系统安全漏洞 |
主动指的是FTP服务器“主动”去连接客户端的数据端口来传输数
客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口(即tcp 21端口)
客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器
服务器会从它自己的数据端口(20)“主动”连接到客户端指定的数据端口(N+1)
客户端就可以和ftp服务器建立数据传输通道了
被动:指的是FTP服务器“被动”等待客户端来连接自己的数据端口
客户端打开两个任意的非特权本地端口(N >1024和N+1)
第一个端口连接服务器的21端口,提交PASV命令
服务器会开启一个任意的非特权端口(P > 1024),并发送给客户端
客户端发起从本地端口N+1到服务器的端口的连接用来传送数据。(注意此模式下的FTP服务器不需要开启tcp 20端口了)
shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行
不同的shell解释器使用不同的shell命令语法
shell程序解释执行,不生成可以执行的二进制文件
可以帮助用户完成特定的任务,提高使用、维护系统的效率
了解shell程序可以更好的配置和使用Linux,实现自动化运维
变量的特点:
格式:变量=值(等号两边不能有空格)
使用:
注意:
使用 read 可以将用户的输入赋值给变量
# 将输入赋值给x(单个输入)
read x
# 将输入转换成数组赋值给arr(多个输入)
read -a arr
read可以接收选项,例如:
-a,表示将输入转换成数组(read
命令默认会以空格、制表符和换行符作为分隔符)
-r,不将输入中的 \
视作转义字符
-p,指定一段提示语,如:read -p "提示..." x
bash在解释用户命令时,会把所输入的命令后面的参数使用位置变量传递给bash脚本程序
$0,代表脚本的名字
$1、 2 … 2… 2…n,分别代表参数1、参数2…参数n
$*,包括参数的列表(字符串)
$@,包括参数的列表(数组)
$#,包括参数的个数
环境变量 | 说明 |
---|---|
$HOME | 用户的主目录 |
$IFS | 内部的域分隔符,一般为空格符、制表符或换行符 |
$PATH | 寻找命令或可执行文件的搜索路径列表,路径以冒号分隔 |
$$ | Shell脚本的进程号 |
$? | 紧邻的前驱命令的返回值 0=成功 1=失败 |
$TERM | 使用的终端类型 |
$SHELL | 查看当前用户所使用的的shell |
整数的算术运算符:
+、-、*、/、%;
赋值运算符:
=、+=、-=、*=、/=、%=
位运算符:
<<、>>、&、|、~、^;
位运算赋值运算符:
<<=、>>=、&=、|=、~=、^=;
逻辑运算符:
&&,||,!,>,>=,<,<=,!=,==
计算表达式的值有三种方法:
expr 命令
格式:expr arg
例:
expr 2 + 3
expr $s \* 4
注意:
let 命令
例:
注意:
$((数学表达式))
例:echo $((2*3+4))
常见的条件:
判断结果:
格式:
常用的文件属性条件判断 | |
---|---|
-f fn | 如果fn存在且fn为普通文件则返回真,否则返回假。 file |
-b fn | 如果fn存在且fn为块设备则返回真,否则返回假。 block |
-e fn | 如果fn存在则返回真,否则返回假。 exist |
-d fn | 如果fn 存在且fn为目录则返回真,否则返回假。 directory |
-r fn | 如果fn存在且fn可读则返回真,否则返回假。 read |
-w fn | 如果fn存在且fn可写则返回真,否则返回假。 write |
-x fn | 如果fn存在且fn可执行则返回真,否则返回假。 execute |
-O fn | 如果fn存在且被当前用户拥有则返回真,否则返回假。 |
-L fn | 如果fn存在且fn为符号链接则返回真,否则返回假。 |
常用字符串属性条件判断 | |
---|---|
string_1 = string_2 | 如果string_1和string_2两个字符串相等则返回真,否则返回假; |
string_1 != string_2 | 如果string_1和string_2两个字符串不相等则返回真,否则返回假; |
-z string | 如果字符串string的长度为0则返回真,否则返回假; zero |
-n string | 如果字符串string长度不为0则返回真,否则返回假; |
string | 同-n string,如果字符串string长度不为0返回真,否则返回假。 |
常用的整数关系条件判断 | |
---|---|
mum_1 –eq num_2 | 如果num_1和num_2相等则返回真,否则返回假; |
mum_1 –ne num_2 | 如果num_1不等于num_2则返回真,否则返回假; |
mum_1 –gt num_2 | 如果num_1大于num_2则返回真,否则返回假; |
mum_1 –lt num_2 | 如果num_1小于num_2则返回真,否则返回假; |
mum_1 –le num_2 | 如果num_1小于等于num_2则返回真,否则返回假; |
mum_1 –ge num_2 | 如果num_1大于等于num_2则返回真,否则返回假; |
逻辑与-a:condition1 -a condition2,如果两个条件都为真,则结果为真
逻辑或-o:condition1 -o condition2,如果两个条件有一个为真,则结果为真
逻辑非!:! condition,结果与condition相反
控制结构可以分为分支和循环两种:
常见的分支结构:
常见的循环结构:
输入:1 2 3 4 5 输出:20
#!/bin/bash while true do echo 'Input a list of number:' read -a nums if [ ${nums[0]} = 'q' ]; then exit fi total=0 for num in ${nums[@]} do let total=${total}+${num} done echo "the result is ${total}" done
根据输入执行命令
#!/bin/bash func() { echo -e echo "Use one of the following options:" echo "P:To display current directory" echo "S:To display the name of running file" echo "D:To display today's date and present time" echo "L:To see the list of files in your present working directory" echo "W:To see who is logged in" echo "I:To see the ip address of this local machine" echo "Q:To quit this program" echo "Enter your option and hit:" } while true do func read input case ${input} in p|P) pwd ;; s|S) echo $0 ;; d|D) date "+%Y-%m-%d %H:%M:%S" ;; l|L) ls ;; w|W) who ;; i|I) ifconfig ;; q|Q) exit ;; *) echo "usage error!" ;; esac done
根据输入判断成绩
#!/bin/bash while true do echo 'Please enter your score:' read score if [ "$score" -lt 0 ]; then exit elif [ "$score" -lt 60 ]; then echo 'Failed!' elif [ "$score" -ge 60 -a "$score" -lt 70 ]; then echo 'Passed!' elif [ "$score" -ge 70 -a "$score" -lt 80 ]; then echo 'Medium!' elif [ "$score" -ge 80 -a "$score" -lt 90 ]; then echo 'Good!' elif [ "$score" -ge 90 -a "$score" -le 100 ]; then echo 'Excellent!' else echo 'error score!' fi done
main.o部分的命令应为:gcc -c main.c -o main.o -L f1 -L f2
前两个字母表示分区所在设备的类型:
第三个字母表示分区在哪个设备上:
数字表示分区的次序:
查看硬盘及分区情况:
fdisk -l
常见的文件系统
FAT、NTFS、ExtFAT、ext2、ext3、ext4、xfs、APFS
VFS是 Linux 内核中的软件层,它在内核中提供了一组标准的、抽象的文件操作,允许不同的文件系统实现共存,并向用户空间程序提供统一的文件系统接口。
VFS并不是一个实际的文件系统,它只存在于内存,系统启动时建立,关闭时消亡。
计算机系统中,所有的存储设备都是以目录树的形式对文件进行管理的
在Linux系统中,所有的文件都是在以“/”目录为根的一棵“大”目录树中进行管理。如果要使用USB存储设备、光盘或软盘等存储设备,必须将这些设备中的“小”目录树像嫁接一样挂载(mount)到Linux系统的“大”目录树中。
挂载点
Linux系统中有一个**/mnt**目录,专门用作挂载点(mount Point)目录
在挂载设备时首先查看挂载点目录是否存在,如果不存在必须首先创建该目录,否则mount命令无法正常执行
Linux系统上所有运行的东西都可以称之为一个进程,如每个用户任务、每个系统管理任务
进程是一个程序的运行
进程与程序的区别:
Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性:
进程在启动形态上分为两类:
前台进程
后台进程
常用操作
作用:启动、停止、重启或查询服务状态
命令 | 作用 |
---|---|
service start | 启动指定服务 |
service stop | 停止指定服务 |
service restart | 重启指定服务 |
service status | 查询指定服务状态 |
作用:指定在将来某个时刻执行某些命令
格式:at [选项] [时间]
执行方式:
注意:
作用:设定周期性任务。
格式:crontab [-u user] 文件 / crontab [-u user] {-l | -r | -e}
-e 执行文字编辑器来设定时间表
-r 删除目前的时程表
-l 列出目前的时程表
crontab文件编写格式
* * * * * 开头,分别代表分钟、小时、日、月、星期几
# 每天凌晨12点重启app.js
0 0 * * * /usr/local/bin/pm2 restart /root/project/centos/app/app.js
作用:显示当前进程的状态
格式:ps [选项]
-A 列出所有的进程
-w 显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程
-e 显示所有进程
-f 采用全格式显示
作用:删除执行中的程序或工作
格式:kill [-s <信息名称或编号>] [程序] / kill [-l <信息编号>]
1 重新加载进程
9 杀死一个进程
15 正常停止一个进程
注意:kill命令是向进程发送信号,不是杀死的意思,-9表示无条件退出,但由进程自行决定是否退出。这就是为什么kill -9终止不了系统进程和守护进程的原因
作用:显示内存状态,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
格式:free [选项]
b | 以Byte为单位显示内存使用情况 |
---|---|
k | 以KB为单位显示内存使用情况 |
m | 以MB为单位显示内存使用情况 |
h | 以合适的单位显示内存使用情况,最大为三位数 |
o | 不显示缓冲区调节列 |
s<间隔描述> | 持续观察内存使用状况 |
t | 显示内存总和列 |
作用:发送邮件
例子:
# 给root用户发送邮件 -s指定主题
echo "这是邮件内容" | mail -s "邮件主题" root
Docker 是一个应用打包、分发、部署的工具
Docker与普通虚拟机的区别:
Docker:可理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要。
普通虚拟机:一个完整而庞大的系统,包含各种不管你要不要的软件。
特性 | 普通虚拟机 | Docker |
---|---|---|
跨平台 | 通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行 | 支持的系统非常多,各类 Windows 和 Linux 都支持 |
性能 | 性能损耗大,内存占用高,因为把整个完整系统都虚拟出来了 | 性能好,只虚拟软件所需运行环境,最大化减少没用的配置 |
自动化 | 需要手动安装所有东西 | 一个命令就可以自动部署好所需环境 |
一致性 | 环境一致性不高,不同系统差异大 | 一致性好,不同系统都一样部署方式 |
集中存放镜像文件的地方,分为公开仓库和私有仓库两类。最大的公开仓库是DockerHub,用户可以在本地搭建私有仓库。
一个只读模板,包含一个完整的Linux OS环境和用户所需的应用程序,用以新建Docker容器。类似Java中的类。
基于某个镜像创建的实例。可以想象成一个精简版的Linux OS环境和其下(包括root用户权限和用户空间、进程空间等)运行的应用程序空间。部分高权限内容无法使用。
打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包。
分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装。
部署:拿着“安装包”,就可以使用一个命令把应用运行起来,自动模拟出一摸一样的运行环境,且跨平台Windows/Mac/Linux。
docker search 镜像名 [-no-trunc]
-no-trunc 不截断过长的描述
标准输出的结果:
NAME 镜像名
DSECRIPTION 描述
STARS 收藏数
OFFICIAL 是否是官方镜像
AUTOMATED 是否自动构建
docker pull [选项] [仓库地址[:端口号]/]仓库名[:标签]
缺省仓库地址为 DockerHub
私有仓库地址格式一般为 <域名/IP>[:端口号]
docker images [选项] [REPOSITORY]
标准输出的结果:
REPOSITORY 镜像下载仓库源
TAG 镜像标记
IMAGE_ID 镜像唯一ID号
CREATED 创建时间
SIZE 镜像大小
docker image rm [选项] <镜像1> [<镜像2> …]
<镜像>可以填写镜像短ID / 镜像长ID / 镜像名
-f表示强制删除,一般用于被占用镜像的删除
docker ps [选项]
-a 显示所有容器,包括未启动的容器
-f:根据条件过滤显示的内容
-n:列出最近创建的n个容器
-q:静默模式,只显示容器编号
docker stop CONTAINER
CONTAINER 可以是 ID 也可以是 NAME
docker restart CONTAINER
CONTAINER 可以是 ID 也可以是 NAME
docker rm [选项] CONTAINER
-f 强制删除一个运行中的容器
启动容器有三种方式:
基于镜像新建一个容器并启动
docker run [选项] NAME[:TAG]
-name=“”:为容器指定一个新名字(唯一,不指定则随机)
-d:后台运行容器,并返回ID
-t:为容器分配一个伪输入终端
-i:以交互模式运行容器(一般与-t一起用,进入后台)
-p:端口映射,<host端口>:<容器端口>
-v:目录映射,<host目录>:<容器目录>
-e:设置环境变量
例:docker run -it centos:7 /bin/bash
重新启动
docker start <容器>
<容器>可以填写容器ID / 容器名
daemon 守护态运行
attach
docker attach CONTAINER
连接到容器后台,所有窗口都会同步显示,exit会退出容器
exec
docker exec [选项] CONTAINER COMMAND [参数]
在运行的容器中执行命令exit不会退出容器
-d:后台运行
-i:保持STDIN 打开
-t:分配一个伪终端
docker commit [选项] 容器名 [REPOSITORY[:TAG]]
-a:提交的镜像作者
-m:提交时的说明文字
-c:创建文件时使用Dockerfile指令
–docker build [选项] path
path:dockerfile所在目录
-t:镜像的名字及标签,如:REPOSITORY[:TAG]
用来构建镜像的文本文件,包含所需的指令和说明。
Dockerfile结构:
基础镜像信息(centos ubuntu …… nginx ……)
维护者信息(docker search可查看)
镜像操作指令(tar yum make)
容器启动时执行指令(系统启动时,第一个加载的程序/脚本/命令)
FROM centos:7
MAINTAINER scau
RUN yum install -y vim
CMD ["echo","hello dockerfile"]
Dockerfile操作指令 | |
---|---|
FROM [镜像] | 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令,例如centos:7。from有两层含义:①开启一个新的镜像②必须写的一行指令 |
MAINTAINER [名字] | 说明新镜像的维护人信息(可写可不写) |
RUN命令 | 每一条RUN后面跟一条命令,在所基于的镜像上执行命令,并提交到新的镜像中,RUN必须大写 |
CMD [“要运行的程序”,“参数1”、“参数2”] | 指定启动容器时需要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能执行最后一条,“bin/bash”也是一条CMD,并且会覆盖image镜像里面的cmd。 |
EXPOSE [端口号] | 指定新镜像加载到Docker时要开启的端口暴露端口,就是这个容器暴露出去的端口号。 |
ENV [环境变量] [变量值] | 设置一个环境变量的值,会被后面的RUN使用。容器可以根据自己的需求创建时传入环境变量,镜像不可以。 |
ADD [源文件/目录] [目标文件/目录] | ①将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,②或者是一个URL,③若源文件是压缩包则会将其解压缩。 |
COPY [源文件/目录] [目标文件/目录] | 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中,copy只能用于复制,add复制的同时,如果复制的对象是压缩包,ADD还可以解压,copy比add节省资源。 |
VOLUME [“目录”] | 在容器中创建一个挂载点,简单来说就是-v,指定镜像的目录挂载到宿主机上(由容器创建和管理)。 |
USER [用户名/UID] | 指定运行容器时的用户 |
WORKDIR [路径] | 为后续的RUN、CMD、ENTRYPOINT指定工作目录,相当于是一个临时的"CD",否则需要使用绝对路径,例如workdir /opt。移动到opt目录,并在这下面的指令都是在opt下执行。 |
例子:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
例:docker tag ubuntu:20.04 172.26.30.14:5000/myubuntu:v3
docker push [选项] NAME[:TAG]
注意:这是从本地镜像上传到镜像仓库(要先登陆到镜像仓库)
例:docker push scau/mycentos:v1(登录dockerhub,假设ID为scau)
docker export [选项] CONTAINER
-o:将输出内容写到文件
例:
docker export -o mycentosv1.tar 37cdf85196fc
将id为37cdf85196fc的容器保存为tar文件
docker import [选项] file|URL [REPOSITORY[:TAG]]
-c:应用docker指令创建镜像
-m:提交时的说明文字
例:
docker import mycentosv1.tar mycentos:v2
从镜像归档文件mycentosv1.tar创建镜像,命名为mycentos:v4
X Window系统由三个基本元素组成
X服务端
是控制输入及输出设备并维护相关资源的程序,它接收输入设备的信息,并将其传给X Client,而将X Client传来的信息输出到屏幕上(在屏幕上构造方块(窗口),然后画出里面的元素)
X客户端
是应用程序的核心部分,它与硬件无关,每个应用程序就是一个X Client
X通信通道
X通信通道的主体是xlib(X函数库)
X Client调用xlib,利用相应的通信功能向X Server发出请求
X Server完成任务之后,同样调用xlib把结果显示到指定的设备上去
init n 或 telinit n
startx
长期
CentOS7之前
CentOS7及之后
CentOS7及之后,systemd替代了init进程
与init类似:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。