• Linux系统是在Unix操作系统的基础上由Linux提供内核, 众多开源(GUN)大神不断完善出来的系统; Linux的全程是GUN/Linux
  • Linux除了使用与服务器领域, 在嵌入式领域也有很大的发展前景, 如机顶盒, 网络电视, 智能家居, 以及以后的物联网

    1. 常用快捷键

    1. Ctrl + R 搜索历史命令

    1.1 清屏快捷键

    1. Ctrl + L 清屏
    2. Ctrl + U 清空光标前面的内容(Ctrl + W也行)
    3. Ctrl + K 清空光标后面的内容
    4. Ctrl + Y 粘贴上一次删除的命令(例如使用Ctrl + U清空了当前行, 即能使用Ctrl + Y恢复)

    1.2 光标快捷键

    1. Ctrl + A 光标移动到开头
    2. Ctrl + E 光标移动到结尾
    3. Ctrl + B 光标想前移动一位
    4. Ctrl + F 光标向后移动以为

    2. 综合设置

    2.1 关机命令

  • 重启计算机之前, 先要执行一下sync命令, 将内存的数据同步到磁盘

  • 目前的reboot/shutdown/halt都会在执行前, 自动执行一下sync(手动执行一下比较靠谱, 万一有的linux版本不是这么设置的); ```bash shutdown -h now # 立刻关机 shutdown -h 1 # 1分钟后关机 halt # 立刻关机(给CPU断电进而关机, vmware执行此命令后或处于halting状态)

shutdown -r now # 重启计算机 reboot # 重启计算机

sync # 将内存的数据同步到磁盘

logout # 登出账户

  1. <a name="Aqhpg"></a>
  2. ### 2.2 运行级别
  3. - 运行级别是linux服务器的运行状态, centos7之前是通过配置文件`/etc/inittab`进行设置, centos7之后可以使用init命令指定
  4. - 0: 关机
  5. - 1: 单用户, 找回丢失的密码
  6. - 2: 多用户状态, 没有网络服务
  7. - 3: 多用户状态, 有网络服务
  8. - 4: 系统未使用保留给用户
  9. - 5: 图形界面
  10. - 6: 系统重启
  11. ```bash
  12. init 0 # 指定运行级别是关机
  13. systemctl get-default # 查看运行级别
  14. # multi-user.target: analogous to runlevel 3
  15. # graphical.target: analogous to runlevel 5

2.3 帮助指令

  1. ls --help
  2. man --help

2.4 软连接

  • 软连接也称符号链接, 类似于window中的快捷方式, 存放的时链接其他文件的路径
  • 删除软连接的时候, 不要带-rf, 容易把真正的磁盘目录给删除
    1. ln -s /root myroot 创建一个/root的软连接
    2. rm myroot 删除软连接
    3. rm myroot/ 删除软连接所指向的磁盘目录

    2.5 历史命令

    1. history 查看最近的所有历史
    2. history 10 查看最近的10条命令

    2.6 日期命令

    ```javascript date 显示日期 date +%D 显示日期(01/13/22 22年1月13号) date +%F 显示日期(2022-02-13)

date +%Y 显示年份(Y表示2020,y表示20) date +%m 显示月份(不要写M, M表示的是分钟) date +%d 显示日

date “+%Y-%m-%d %H:%M:%S” 显示日期和时间 date -s “2022-01-13 13:32:50” 设置日期

恢复网络时间

yum -y install ntp ntpdate ntpdate cn.pool.ntp.org

日历

cal 显示本月日历 cal 2020 显示2020年日历

  1. <a name="vlvHH"></a>
  2. ### 2.7 weget
  3. - [https://blog.csdn.net/qq_27870421/article/details/91951402](https://blog.csdn.net/qq_27870421/article/details/91951402)
  4. - [https://www.cnblogs.com/zhangchengxiang/p/5196534.html](https://www.cnblogs.com/zhangchengxiang/p/5196534.html)
  5. ```bash
  6. wget http://dlcdn.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz
  7. # 不验证服务器证书下载
  8. wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz

2.8 通讯测试

  • ping是一种网络检测工具, 主要是检查远程主机是否正常, 或是两台计算机之间网线/网卡的问题
    1. ping baidu.com 测试两台服务器是否可以通讯
    2. telnet 192.168.124.24 3000 测试端口是否可以使用

    2.9 切换桌面系统

    ```bash

    安装桌面系统

    yum groupinstall -y “X Window System” yum groupinstall -y “GNOME Desktop”

切换命令级别

systemctl set-default multi-user.target # 设置成命令模式 systemctl set-default graphical.target # 设置成图形模式

  1. <a name="QhdVm"></a>
  2. ## 3. 目录结构
  3. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2309174/1641833982105-010ff0d7-7fdd-4845-96c0-8a8422424d66.png#clientId=ue8b3beb2-41bc-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=440&id=u8a824f30&name=image.png&originHeight=440&originWidth=800&originalType=binary&ratio=1&rotation=0&showTitle=false&size=46937&status=done&style=none&taskId=u8a26e33d-8083-4aef-84db-760fd2a6194&title=&width=800)
  4. - **在Linux系统中, 一切都是文件; **CPU, 声卡, 显卡等外部设施也是会被映射成文件;
  5. - **/bin: binary的缩写, 存放的是经常使用的命令; /bin其实是一个软连接, 真正的存储目录其实是/usr/bin与/usr/local/bin两个目录的集合**
  6. - **/sbin: super user binary的缩写, 存储的是系统管理员使用的系统管理程序, 是/usr/sbin与/usr/local/sbin的集合**
  7. - **/boot: linx启动的相关文件**
  8. - **/dev: 类似于window下的设备管理器, 所有的硬件都被用文件形式来表示, 例如cpu的相关硬件就被映射成了/dev/cpu**
  9. - **/etc: 配置文件的目录**
  10. - **/home: 存放普通用户的主目录**
  11. - **/lib: 系统开机所需最基本的动态连接共享库, 起作用类似于window中的DLL文件, 几乎所有的应用程序都需要使用这个共享库**
  12. - **/media: linux将识别的设备挂载到这个目录下, 如硬盘, 光驱**
  13. - **/mnt: 用户临时挂载的别的文件系统, 如使用vmwaretool实现linux和window的共享磁盘就可以挂载到此目录**
  14. - **/opt: 给主机额外安装的软件包存放的目录, 如tomcat.tar.gz**
  15. - **/root: 系统管理员主目录, 和/home/lisi目录一样, 只不过root权限最高, 被单独领出来了**
  16. - **/usr/local: 主机额外安装的软件, 一般时以源码方式安装的程序**
  17. - **/var: 存放不断扩充的东西, 习惯将经常被修改的目录放在/var中, 如日志文件**
  18. - **/lost+found: 系统非法关机时, 存放的文件**
  19. - **/selinux: 安全子系统, 控制程序只能访问特定的文件, 由三种工作模式**
  20. <a name="o3oKW"></a>
  21. ### 3.1 var目录

/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 安全相关的日志信息
/var/log/maillog 邮件相关的日志信息
/var/log/cron 定时任务相关的日志信息
/var/log/spooler UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息

  1. <a name="cmbub"></a>
  2. ### 3.2 etc目录
  3. <a name="t05WP"></a>
  4. ## 4 vim命令
  5. <a name="P9aiP"></a>
  6. ### 4.1 浏览模式
  7. <a name="ppEjc"></a>
  8. #### 4.1.1 进入模式

进入一般模式

esc

  1. <a name="TbB4T"></a>
  2. #### 4.1.2 粘贴复制

yy # 复制光标所在行 5yy # 复制光标所在行以及后面的4行 p # 粘贴, 将复制的内容粘贴到光标所在行的后面

  1. <a name="xVvDG"></a>
  2. #### 4.1.3 删除命令

dd # 删除光标所在行 5dd # 删除光标所在行, 以及之后的四行 dG # 删除光标所在行之后的所有行(包括光标行) d$ # 删除光标行的内容(注意只是删除了行里的内容, 行并没有删除)

  1. <a name="vXdJ7"></a>
  2. #### 4.1.4 撤销命令

u # 撤销一步操作(可以连按, 连续撤销)

  1. <a name="j9T2M"></a>
  2. #### 4.1.5 跳转命令

跳转命令

gg # 跳转到首行 G # 跳转到尾行 5G # 跳转到第五行(也可使用:5在命令行模式下跳转)

  1. <a name="Umzid"></a>
  2. #### 4.1.6 搜索命令
  3. ```bash
  4. /user 搜所user数据
  5. # 按回车
  6. n 下一个
  7. N 上一个

4.2 编辑模式

4.2.1 进入模式

  1. i, a, o # 浏览模式按键

4.3 命令行模式

4.3.1 进入模式

  1. : # 浏览模式和编辑模式按这个建都可以

4.3.2 退出命令

  1. wq # 保存修改, 并退出
  2. q # 推出
  3. q! # 强制退出, 不做任何保存

4.3.3 行号

  1. set nu # 显示行号
  2. set nonu # 隐藏行号

4.3.4 替换命令

  1. :s/张三/zhangsan 将光标所在行的第一个张三替换成zhagnsan
  2. :s/张三/zhangsan/g 将光标所在行的全部张三替换成zhangsan
  3. :3,$s/张三/zhangsan/g 第三行到最后一行的张三全部替换成zhangsan
  4. :%s/张三/zhangsan/g 将文本所有行的张三全部替换成zhangsan

5. 文件目录指令

5.1 添加文件目录

  1. mkdir code # 创建code目录(只能创建一级目录, code/my-font就会报错)
  2. mkdir -p code/my-font # 创建层级目录
  3. touch hello.js # 创建一个空文件

5.2 查看文件目录

  1. ls # 查看文件目录
  2. ls -a # 查看所有的文件目录(包含隐藏的)
  3. ls -l # 查看详细信息
  4. ls -lh # h表示homan, 会将size转换成M,而不是kb
  5. ll -R /opt 递归显示opt中的内容
  6. ll /opt | grep "^-" 查看opt目录下的文件(这里换成^d统计的就是目录的个数)
  7. ll /opt | grep "^-" | wc -l 查看opt目录下的文件的数量
  8. ll -R /opt | grep "^-" | wc -l 查看opt目录下(包含子目录文件)的数量
  9. tree /opt 树状查看目录
  10. pwd 查看目录的绝对路径

5.3 修改文件目录

  1. vim hell.js 修改文件内容
  2. mv hell.js hello.java 更改文件名称
  3. mv hell.js /opt 移动文件到/opt目录下

5.4 删除文件目录

  • r: 递归删除
  • f: 强制删除, 不提示 ```bash

    删除目录

    rm -r haha 删除目录(删除目录的时候必须使用-r参数, -r表示将目录及目录下的文件/目录也删除) rm -rf haha 删除haha目录(-f表示不用用户确认, 直接全部删除)

删除文件

rm 01.txt 删除01.txt(需要确认) rm -f 02.txt 直接删除02.txt

删除所有

rm -rf ./* 删除当前目录下的所有目录和文件 rm -rf $(find -type d -empty) 删除当前目录下的所有空目录

  1. <a name="J2VBG"></a>
  2. ### 5.5 移动文件目录
  3. - mv命令有两个功能, 一个是重命名, 一个是移动, 如果源文件和目标文件时在同一个目录下, 就会进行重命名
  4. ```bash
  5. # mv文件
  6. mv hello.js kk.js 将hello.js文件名改成kk.js
  7. mv 01.txt doc 将01.txt移动到doc目录
  8. mv ./*/*.pdf ./ 将当前目录下的所有pdf文件, 移动到当前目录
  9. # 移动目录
  10. mv ./test /root/doc 移动文件(将test目录移动到doc目录下)
  11. mv ./test haha 重命名文件夹(将test目录重命名成haha)

5. 6 复制文件目录

  1. cp [opt] souce dest # 公式
  2. cp hello.js /home/lisi # 将hello.js复制到/home/lisi目录下(如果目标文件有同名文件, 便会提示是否覆盖, 如果选否, 则会取消此次复制)
  3. cp hello.js /home/lisi # 强制复制(同名文件会进行覆盖 )
  4. cp -r haha/* test # 将haha目录下的所有文件copy到test目录

5.7 查看文件内容

5.7.1 more

操作 含义
Spance(空格键) 向下翻一页
Enter 向下翻一行
Ctrl + F 向下翻一页
Ctrl + B 向上翻一页
= 输出当前行的行号
:f 输出文件名和当前的行号
q 退出more模式
  1. more index.js

5.7.2 cat

  1. cat hello.js
  2. cat -n hello.js # 显示行号(如果文件行数太多, 会直接显示末尾的几行)
  3. cat -n index.html | more # 从头开始看(enter移动一行, space移动一页)

5.7.3 less

less指令用来分屏查看文件内容, 比more更加强大; less在显示文件内容时, 并不是一次性将整个文件加载之后才显示, 而是根据需要加载内容, 对于显示大型文件具有较高的效率

操作 含义
空格键 向下反动一页
pagedown 向下反动一页
pageup 向上反动一页
/字符串 向下搜索; n向下查找, N向上查找
?字符串 向上搜索; n向上查找, N向下查找
q 退出

5.7.4 head

  • head用来显示文件开头的部分, 默认情况下head指令显示文件的前10行

    1. head index.html 显示前10行数据
    2. head -100 index.html 显示前100

    5.7.5 tail

  • 输出文件尾部的内容, 默认显示最后10行内容

    1. tail index.html 显示最后10行内容
    2. tail -100 index.html 显示最后100行的内容
    3. tail -f index.html 实时展示内容
    4. tail -f ./* 实时监听当前目录下的所有文件
    5. tail -f my.log | grep *** 动态展示符合条件的日志

    5.7.6 grep

    1. cat ./my.log | grep app 查询my.log中的app所在行
    2. cat ./my.log | grep -A 10 app 查询my.log中的app所在行的后10行(after)
    3. cat ./my.log | grep -B 10 app 查询my.log中的app所在行的前10行(before)
    4. cat ./my.log | grep 10 app 查询my.log中的app所在行的前与后10

    5.8 输出指令

  • 后面的文件如果没有创建, 会自动创建

    1. ll > test.txt 将终端的内容输出到文件中(采用覆盖的形式)
    2. ll >> test.txt 将终端的内容输出到文件中(采用追加的形式)

    6. 查找指令

    6.1 find

  • 将指令从指定目录向下递归遍历各个子目录查找, 将目录条件的目录或问价显示在终端 ```bash

    根据名称查找

    find -name hello.js 根据文件名查找(默认从当前目录查找) find /root -name hello.js 从/root目录下查找

根据用户查找

find -user root 根据用户查找

根据文件大小查找(单位有k, M, G)

find / -size +100M 查询大于100m的文件 find / -size -100M 查询小于100m的文件 find / -size 100M 查询等于100m的文件

find -type d -empty 查询当前目录的所有空目录

  1. <a name="vbk2a"></a>
  2. ### 6.2 locate
  3. - **locate指令可以快速定位到文件指令, 因为locate不是遍历的目录, 而是查找的文件数据库, 所以在使用locate查找之前需要使用updatedb更新文件路径数据库**
  4. ```bash
  5. updatedb
  6. locate hello.js

6.3 which

  1. which ls 查看ls在那个目录下

7. 压缩指令

7.1 gzip

  • gizp/gunzip: 用于压缩文件

    1. gzip hello.js 压缩hello.js文件(原有的hell.js文件会消失)
    2. gunzip hello.js.gz 解压文件

    7.2 zip

  • zip: 用于压缩目录

  • 压缩目录时, 指定的目标路径, 不要是./, 需要从根目录指定; ```bash zip -r /opt/docs.zip ./docs 将docs目录压缩到/opt目录下(注意先后顺序)

unzip docs.zip 将当前目录下的docs.zip解压到当前目录 unzip -d /opt ./docs.zip 将当前目录下的docs.zip解压到/opt目录

  1. <a name="HyGdI"></a>
  2. ### 7.3 tar
  3. - `-c`创建新的备份文件, 也可以写成--create
  4. - `-v`显示指令执行过程, 也可以写成--verbose
  5. - `-f`指定备份文件
  6. - `-z`通过gzip指令处理备份文件, 也可以写成--gzip或--unzip
  7. - `-x`解压tar包, 从备份文件中进行还原
  8. ```bash
  9. tar -czvf code.tar.gz ./code/ 将code目录压缩成包
  10. tar -xzvf code.tar.gz 解压文件
  11. tar -tzvf test.tar.gz 列出压缩包中的文件内容

8. 用户管理

8.1 添加用户

  • 只有root账户可以给指定用户添加密码, 其余的账户只能更改自己的密码
  • 普通用户设置密码的时候, 密码不能太简单, 否则不能通过校验 ```bash useradd lisi # 添加一个lisi账户(默认家目录也是lisi, 默认lisi用户的组就是lisi组) useradd wangwu -d /home/hhh # 添加一个王五的用户, 指定家目录是hhh(不同的用户可以使用同一个家目录) useradd -g wudang zwj # 添加张无忌武当组

passwd lisi # 给李四用户指定密码 passwd # 更改本机账户的密码

  1. <a name="TqGzL"></a>
  2. ### 8.2 查看用户
  3. ```bash
  4. id # 查看当前用户信息
  5. id lisi # 查看lisi用户信息
  6. cat /etc/passwd # 查看所有用户信息(用户的信息都存在与passwd文件中)
  1. # /etc/passwd信息
  2. 用户名:口令:用户表示号:组标识号:注释性描述:主目录:登录shell
  3. zhangsan:x:1003:1003::/home/zhangsan:/bin/bash
  4. zwj:x:1004:1005::/home/mojiao:/bin/bash
  5. # /etc/shadow信息
  6. 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
  7. 除了登录名称, 其余的信息都使用了加密的形式
  8. zhangsan:$6$6Z9NvR/R$smpP8DD8orEk/Ymr2lu4DkjBUPEgEWMsiSukjOU.p18Zhpn9VxmUK1D5nqcTfAMUxd4mOK8/gMsG7driiYfbf1:19003:0:99999:7:::
  9. # /etc/group信息
  10. 组名:口令:组标识号:组内用户列表
  11. zhangsan:x:1003:
  12. wudang:x:1004:
  13. mojiao:x:1005:

8.3 修改用户

  1. usermod -g mojiao zwj # 修改用户的组信息
  2. usermod -d mijiao zwj # 修改用户的家目录信息

8.4 删除用户

  1. userdel zhaoliu # 删除zhaoliu(但是不删除zhaoliu的家目录)
  2. userdel -r zhaoliu # 删除zhaoliu并删除家目录(如果家目录是公用的, 则不会进行删除)

8.5 用户切换

  • 高权限切换到低权限时, 不需要输入密码
  • 切换账户后, 使用who am i查看的信息是登录时的账户信息 ```bash su root # 切换到指定用户

who am i # 查看是登录的账户 whoami # 只展示用户名

logout # 等处

  1. <a name="Ij9pm"></a>
  2. ## 9. 组管理
  3. <a name="ggiTN"></a>
  4. ### 9.1 添加组
  5. ```bash
  6. groupadd wudang # 添加组

9.2 查看组

9.3 修改组

9.4 删除组

  1. groupdel wudang # 删除组(只能删除空组)
  2. groupdel -f wudang # 强制删除组(组里的用户是不会删除的)

10. 权限管理

如何查看文件属于那些组, 如何查看文件的所有者 为什么用wuji账户不能修改权限

  • 文件有所有者, 所在组, 其他组三个概念
  • 文件的所有者不一定是创建者; zhangsan创建了A文件后, 后来将A文件的所有者权限转给了lisi, 此时A文件的所有者就是李四
  • 初始的文件所在组就是文件所有者的组, 修改文件权限的时候, 并不会影响文件的组
  • 除文件的所有者和所在组用户, 其他的用户都是文件的其他组

    10.1 查看权限

  • 第0位确定文件类型

    • l: 表示连接类型文件
    • d: 表示目录
    • c: 表示字符设备文件, 如鼠标, 键盘
    • d: 表示块设备, 如硬盘
  • 第1~3位表示文件所有者的权限
    • **r**: 表示读权限, 表示数字4
      • 目录读权限: 可以读取到此目录下的子文件, 即可以使用ls命令查看目录有那些文件
      • 文件读权限: 可以通过cat命令查看文件的内容
    • **w**: 表示写权限, 表示数字2
      • 目录写权限: 可以在目录下添加文件和删除文件
      • 文件写权限: 可以对文件进行修改
    • **x**: 表示执行权限, 表示数字1
      • 目录执行权限: 可以通过cd命令进入权限
      • 文件执行权限: 可以运行文件
  • 第4~6位表示文件所在组的权限
  • 第7~9位表示文件其他组的权限

image.png

10.2 修改权限

  1. # u:所有者, g:所有组, o: 其他组, a: 所有人
  2. chmod u=rwx,g=rx,o=x hello.js 设置读写执行权限
  3. chmod 751 hello.js 简写
  4. chmod g+w 给所有组添加修改权限
  5. chmod g-w 去掉所有组的修改权限
  6. # 修改文件的所有者
  7. chown wuji hello.js 将文件的所有者改成wuji
  8. chown -R wuji code/ code目录和子文件递归改成wuji
  9. # 修改文件的所有组
  10. chgrp wudang hello.js 修改文件组(如果用户是文件的所有者, 那么就能更改文件的所有组)
  11. chgrp -R wudang code/ 递归修改code目录与子文件

11. 定时器

11.1 Crontab定时器

  • crontab定时器是重复性执行的定时器
  • 如果定时脚本有错的话, 会给用户发送一封邮件You have new mail in /var/spool/mail/root
  • *表示任何时间, * * * * *表示每天每分钟执行一次
  • ,表示不连续的时间, 0 8,12 * * *表示每天的8:00, 12:00执行一次
  • -表示连续世界, 0 5 * * 1-5表示每周一到周五的5:00执行一次
  • */n表示每个多久执行一次, */10 * * * *表示每个10分钟执行一次 | 星号 | 含义 | 范围 | | —- | —- | —- | | 第一个 | 一小时中的第几分钟 | 0~59 | | 第二个 | 一天中的第几小时 | 0~23 | | 第三个 | 一月中的第几天 | 1~31 | | 第四个 | 一年中的第几月 | 1~12 | | 第五个 | 一周中的星期几 | 0~7(0和7都表示周日) |
  1. crontab -e 创建定时器
  2. * * * * * ls -l > /tmp/test.txt 每个一分钟执行一次(不能简写成ll)
  3. 30 2 * * * /root/my.sh 每天两点半执行(需要给shell脚本添加执行权限)
  4. 0 2 * * 1 /root/my.sh 每周一2点执行
  5. 30 2 1,15 * * /root/my.sh 每月的115号的两点半执行
  6. */10 4 * * * /root/my.sh 每天凌晨4点每个10分钟执行一次(过了四点九不执行)
  7. 0 0 1 * 1 /root/my.sh 每月1号并且是周一才执行(日期和周一般不连用)
  8. crontab -l 查看定时器
  9. crontab -r 删除定时器
  10. service restart crontab 重启定时器服务

11.2 At定时任务

  • at命令是一次性定时任务, 守护进程是atd, 想要使用at定时任务, 必须启动atd后台守护进程
  • 默认情况下, atd守护进程每60s检查一下作业队列, 有作业会检查作业的运行时间, 如果时间与当前时间匹配, 则运行此作业

image.png

  1. ps -ef | grep atd 检测atd后台进程是否启动, ps -ef 显示所有的后台进程
  2. systemctl start atd.service 启动atd后台守护进程
  3. # 创建任务 连按两次Ctrl + D确定, 连按两次Ctrl + C退出, Ctrl + Basck删除
  4. at now + 1 minutes 一分钟后执行定时任务(需要先yum下载at命令)
  5. # 查看任务
  6. atq
  7. # 删除任务
  8. atrm

12. 硬盘管理

  • 对Linux来说, 无论有多少分区, 它只有一个根目录, 这一点和Widow是不同的; Linux采用载入的方法, 将一个分区和一个目录联系起来
  • Linux的硬盘主要分IDE和SCSI两种, 如今主要使用的SCSI硬盘
    • IDE硬盘的标识符为hdx~, hd表示的是硬盘类型为IDE, x是盘号(a表示基本盘, b表示基本从属盘, c表示辅助主盘, d表示辅助从属盘); ~表示分区, 前四个分区用数字1~4表示, 他们是主分区或者扩展分区, 从5开始就是逻辑分区; 例如: had3表示第一个ide硬盘上的第三个主分区或扩展分区
    • SCSI硬盘的标识符为sdx~, 其他和IDE硬盘一样
  • 对linux添加磁盘的时候, 一定要对linux使用快照功能; 磁盘分区很容易出错, 出错之后整个操作系统都会崩溃

    12.1 查看磁盘

    ```bash lsblk # 查看硬盘信息 lsblk -f # 会显示出磁盘的UUID

df -h # 查看磁盘使用率(-h可以换算单位, 便于查看)

du -h # 查看磁盘目录统计信息(默认查看的是当前目录) du -h /opt # 指定目录查看 du -h —max-depth=1 # 只统计第一层目录

  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2309174/1642729403365-46648162-72ed-469e-ac80-9e37f3f3a2a5.png#clientId=ua6fd9aba-77c0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=232&id=u2e72a926&name=image.png&originHeight=232&originWidth=949&originalType=binary&ratio=1&rotation=0&showTitle=false&size=32370&status=done&style=none&taskId=ub1e0cf5f-52c8-498a-8df1-cc9187400dc&title=&width=949)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/2309174/1642732496745-265f6576-b9fd-4108-a13a-74afd2299440.png#clientId=ua6fd9aba-77c0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=324&id=u2b649508&name=image.png&originHeight=324&originWidth=1322&originalType=binary&ratio=1&rotation=0&showTitle=false&size=48427&status=done&style=none&taskId=uaaa8cb51-1341-462b-91a6-93bfc6e201b&title=&width=1322)
  2. <a name="IDgiI"></a>
  3. ### 12.2 添加硬盘
  4. ```bash
  5. # 使用vmware添加虚拟硬盘, 然后重启计算机
  6. # 查看新添加的硬盘
  7. lsblk
  8. # 给硬盘分区(sdb是我们新添加硬盘的名称, linux映射成了文件)
  9. fdisk /dev/sdb
  10. # 格式化硬盘分区(sdb1是是我们指定的分区)
  11. mkfs -t ext4 /dev/sdb1
  12. # 挂载磁盘
  13. mount /dev/sdb1 /newdisk/ (命令行挂载如果重启Linux就会失效)
  14. # 卸载磁盘
  15. umount /dev/sdb1
  16. umount /newdisk
  17. # 永久挂载磁盘
  18. vim /etc/fstab
  19. UUID=d2e567ec-98af-46ba-b299-1a078a99e91d /newdisc ext4 defaults 0 0

image.png
image.png
image.png

13. 网络管理

13.1 静态IP

  • 自动获取IP: ip地址会变, 不会引起ip地址冲突
  • 指定IP: ip地址不会变, 可能会引起ip冲突 ```bash

    修改网络

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

重启网络服务

service network restart

  1. ```bash
  2. TYPE="Ethernet"
  3. PROXY_METHOD="none"
  4. BROWSER_ONLY="no"
  5. # dhcp表示自动分配, static表示静态指定
  6. BOOTPROTO="dhcp"
  7. DEFROUTE="yes"
  8. IPV4_FAILURE_FATAL="no"
  9. IPV6INIT="yes"
  10. IPV6_AUTOCONF="yes"
  11. IPV6_DEFROUTE="yes"
  12. IPV6_FAILURE_FATAL="no"
  13. IPV6_ADDR_GEN_MODE="stable-privacy"
  14. NAME="ens33"
  15. UUID="960455ae-468e-4f45-9976-72b73b01201f"
  16. DEVICE="ens33"
  17. # 开启网络
  18. ONBOOT="yes"
  19. # 指定IP的地址
  20. IPADDR=192.168.254.128
  21. # 网关
  22. GATEWAY=192.168.254.2
  23. # 域名解析器
  24. DNS1=192.168.254.2

13.2 域名解析

  1. hostname 查看计算机名称
  2. hostname -I 查看计算机IP地址
  3. vim /etc/hostname 修改计算机名称
  4. vim /etc/hosts 修改本地hosts文件地址映射

image.png

14. 进程管理

  • 每个执行程序都是一个进程, 每一个进程都会有一个pid进程号
  • 前台进程: 程序启动后会占据屏幕, 如mysql客户端
  • 后台进程: 程序启动后后台运行, 如mysqld服务器; 后台进程又被成为服务或守护进程, 通常都会监听某个端口, 等待其他程序的请求, 如msqld, sshd等服务

    14.1 查看进程

  • USER进程执行的用户名称

  • PID进程ID
  • PPID父进程ID
  • %CPU进程占用cpu的百分比
  • %MEM进程占用物理内存的百分比
  • VSZ进程占用虚拟内存的大小, 单位KB
  • RSS进程占用物理内存的大小, 单位KB
  • TTY终端名称缩写
  • STARTED 进程的启动时间
  • TIME进程使用CPU的时间
  • COMMAND启动进程所使用的命令和参数, 如果过长会被截断
  • STAT进程状态
    • S: 睡眠
    • s: 该进程是会话的先导进程
    • N: 表示此进程比普通进程的优先级更低
    • R: 正在运行的进程
    • D: 短期等待
    • Z: 僵死进程; 程序已经死掉, 但是内存没有释放, 需要定时清除
    • T: 被耿总或者被停止 ```bash ps 查看进行信息 ps -a 显示当前终端所有进程信息 ps -u 以用户的格式显示进程信息 ps -x 显示后台进程运行的参数 ps -e 显示所有进程 ps -f 全格式显示进程

pstree 树状显示进程 pstree -p 显示进程ID pstree -u 显示用户

  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2309174/1642752315627-cd3fc31e-976f-4282-a261-1e3ce182d73c.png#clientId=ua6fd9aba-77c0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=352&id=uc37c5dae&name=image.png&originHeight=352&originWidth=1534&originalType=binary&ratio=1&rotation=0&showTitle=false&size=61176&status=done&style=none&taskId=u5db031fd-3e72-41e2-b15c-c1d0a367315&title=&width=1534)
  2. <a name="TzCX0"></a>
  3. ### 14.2 终止进程
  4. ```bash
  5. kill 345 终止345进程
  6. kill -9 345 强制终止345进程

14.3 service

  • Centos7.0之后, 很多服务不在使用service管理, 而是使用systemctl
  • /etc/init.d目录下的命令, 可以使用service命令管理 ```bash service network status 查看服务的状态 service network stop 停止服务 service network start 启动服务 service network restart 重新启动

ll /etc/init.d 查看service可以管理服务

  1. <a name="my2cW"></a>
  2. ### 14.4 chkconfig
  3. - chkconfig可以指定服务在不同`Linux运行级别`是否自动启动, 例如network在1运行级别下是关闭的, 在3运行级别下就是启动的
  4. - chkconfig管理的服务在centos7之后大部分都被systemctl替代了, 只有在`/etc/init.d`目录下的文件是使用chkconfig设置的
  5. ```bash
  6. chkconfig --list 查看服务在不同的运行级别下的开关
  7. chkconfig --level 3 network off 当运行级别是3时, 关闭network服务(Xshell就连接不上服务器了)

14.5 systemctl

systemctl list-unit-files 查看服务自启状态 systemctl list-unit-files | grep crond 查看程序的自启动状态 systemctl is-enabled crond.service 查看程序的自启状态(.service可以省略)

systemctl enable docker 开机启动 systemctl disable docker 关闭开机启动

  1. <a name="AunMK"></a>
  2. ### 14.6 防火墙端口
  3. ```bash
  4. # 查看端口使用的协议
  5. netstat -anp | grep 3000
  6. # 查看端口是否对外暴漏
  7. firewall-cmd --query-port=3000/tcp
  8. # 添加端口
  9. firewall-cmd --permanent --add-port=3000/tcp
  10. # 关闭端口(此端口不对外暴漏, 开启防火墙)
  11. firewall-cmd --permanent --remove-port=3000/tcp
  12. # 重新载入
  13. firewall-cmd --reload

14.7 监控线程

  1. top 动态查看cpu等信息(默认3s刷新)
  2. P CPU排序
  3. M 按内存排序
  4. N PID排序
  5. u 查找用户开启的线程
  6. k 删除线程
  7. top -d 5 5秒刷新
  8. top -i 不显示闲置和僵死进程(zombie就是僵死进程)
  9. top -i 111 监控pid111的进程
  10. free -h 查看总体内存情况

image.png

14.8 监控网络

  1. netstat 查看网络
  2. netstat -a 显示所有活动的TCP连接, 以及正在监听的TCPUDP端口
  3. netstat -n 以数字形式表示地址和端口号, 不试图去解析其名称
  4. netstat -p 列出与端口监听或连接相关的进程
  5. netstat -anp

15. 日志管理

image.png

16. 软件管理

16.1 rpm

  • rpm是下载包的打包和安装工具, 扩展名是.rpm; rmp是RedHad Package Manager的缩写; 但是不单单只使用在RedHad系统中, centod, suse等操作系统也在使用
  • nginx-release-centos-7-0.el7.ngx.noarch
    • nginx: 表示包名称
    • release: 表示版本
    • centos-7-0: 表示使用的操作系统
    • norach: 表示32位和64位都能使用; x86_64表示适用于64位操作系统; i686, i636表示使用与32位操作系统 ```bash

      光盘镜像rpm包

      mount /dev/cdrom /mnt/cdrom 挂载本地镜像 cd /mnt/cdrom/Package 查看本地rpm包

安装操作(使用rpm安装的时候, 需要先安装依赖包)

rpm -ivh 包路径或url 安装软件(i安装, v提示, h进度条)

查询操作

rpm -qa 查询所有安装的rmp软件 rpm -qa | grep nginx 查询有没有安装nginx
rpm -q nginx 查询有没有安装nginx rpm -qi nginx 查询nginx的详细信息 rpm -ql nginx 查询安装路径信息 rpm -qf /etc/passwd 查询文件属于那个包

更新软件

rpm -Uvh 包路径或url 更新软件

删除软件

rpm -e nginx 删除软件(如果由其他软件依赖与nginx, 则会删除失败) rpm -e —nodeps nginx 强制删除nginx

  1. <a name="iNLgE"></a>
  2. ### 16.2 yum
  3. - **yum是一个shell前端软件安装包工具, 基于rpm, 能够从指定的服务器下载rpm包并安装, 可自动处理依赖的软件包**
  4. - **yum只能安装开软的软件, 所以OracleJDK是不能使用yum安装的, 只能安装OpenJDK**
  5. - [http://yum.baseurl.org/wiki/Guides.html](http://yum.baseurl.org/wiki/Guides.html)
  6. ```bash
  7. # 查询操作(远程仓库)
  8. yum list | grep nginx 查询远程仓库的nginx信息
  9. yum search ifconfig 查询ifconfig(发现在net-tool包中), 这里使用list命令是查询不到的
  10. yum info nginx 查询远程仓库中ngin的详细信息
  11. # 查询本地原件
  12. yum list installed | grep nginx 查询本地软件
  13. yum info installed nginx 查询本地软件
  14. yum repolist 统计源信息
  15. # 下载软件
  16. yum install -y nginx 下载软件
  17. # 卸载软件
  18. yum remove -y git

16.2.1 mian配置

  1. [main]
  2. # yum缓存的目录, yum在此存储下载的rpm包和数据库, 默认设置为/var/cache/yum
  3. cachedir=/var/cache/yum
  4. # 安装完成后是否保留软件包, 0为不保留(默认为0), 1为保留
  5. keepcache=0
  6. # Debug信息输出等级, 范围为0-10, 缺省为2
  7. debuglevel=2
  8. # yum日志文件位置; 用户可以到/var/log/yum.log文件去查询过去所做的更新;
  9. logfile=/var/log/yum.log
  10. # 包的策略: newest和last; 当多个远程仓库都有此安装包时: newest会安装最新的版本, last: 将服务器id以字母表排序, 并选择最靠后的服务器上的软件源下载
  11. pkgpolicy=newest
  12. # 指定一个软件包, yum会根据这个包判断你的发行版本, 默认是redhat-release, 也可以是安装的任何针对自己发行版的rpm包;
  13. distroverpkg=redhat-release
  14. # 有1和0两个选项, 表示yum是否容忍命令行发生与软件包有关的错误, 比如你要安装A B C三个包, 而其中C此前已经安装了, 如果你设为1,则yum不会出现错误信息; 默认是0;
  15. tolerant=1
  16. # 有1和0两个选项, 设置为1, 则yum只会安装和系统架构匹配的软件包, 例如, yum不会将i686的软件包安装在适合i386的系统中; 默认为1;
  17. exactarch=1
  18. # 网络连接发生错误后的重试次数, 如果设为0, 则会无限重试; 默认值为6.
  19. retries=6
  20. # 这是一个update的参数, 具体请参阅yum(8), 简单的说就是相当于upgrade, 允许更新陈旧的RPM包;
  21. obsoletes=1
  22. # 是否启用插件, 默认1为允许, 0表示不允许; 我们一般会用yum-fastestmirror这个插件;
  23. plugins=1
  24. bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
  25. metadata_expire=1
  26. hinstallonly_limit=5
  27. # in/etc/yum.repos.d
  28. #允许保留多少个内核包
  29. installonly_limit=3
  30. #屏蔽不想更新的RPM包, 可用通配符, 多个RPM包之间使用空格分离
  31. exclude=selinux*

16.2.2 配置源

  • RHEL以及他的衍生发行版如CentOS, Scientific Linux为了稳定, 官方的rpm repository提供的rpm包往往是很滞后的, 另外官方的rpm repository提供的rpm包也不够丰富, 由写软件的包根本就没有, 在下载Nginx的时候, 还需要配置单独的Nginx源
  • EPEL(Extra Packages for Enterprise Linux), 由Fedora社区打造, 为RHEL及衍生发行版如CentOS, Scientific Linux 等提供高质量软件包的项目, 仓库中的源多且新
    1. # 切换目录
    2. cd /etc/yum.repos.d
    3. # 备份文件
    4. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    5. # 获取阿里源
    6. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    7. #
    8. # 获取阿里EPEL源
    9. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    10. # 清除缓存
    11. yum clean all
    12. # 生成缓存
    13. yum makecache

    16.3 apt