Linux学习总结

Linux笔记

Linux目录结构

1. /bin目录

/ bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些命令都是二进制文件的可执行程序( bin是binary - -二进制的简称),多是系统中重要的系统文件。

2. /sbin目录
/ sbin目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。

3. /etc目录
/ etc目录存放着各种系统配置文件。l i n u x正是这些文件才得以正常地运行。

4. /root目录
/root 目录是超级用户的目录。

5. /lib目录
/ lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。

6. /lib/modules 目录
/lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引导系统所需的模块(例如网络和文件系统驱动)。

7. /dev目录

/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用户可以通过访问/dev/mouse来访问鼠标的输入,就像访问其他文件一样。

8. /tmp目录
/tmp 目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用/var /tmp来代替/tmp ,因为前者可能拥有一个更大的磁盘空间。

9. /boot目录
/boot目录存放引导加载器(bootstrap loader)使用的文件,如l i lo,核心映像也经常放在这里,而不是放在根目录中。但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的文件系统会更好一些。还有一点要注意的是,要确保核心映像必须在i d e硬盘的前1 0 2 4柱面内。

10. /mnt目录
/ mnt目录是系统管理员临时安装( mount )文件系统的安装点。程序并不自动支持安装到/mnt 。/mnt 下面可以分为许多子目录,例如/mnt/dosa 可能是使用m s d o s文件系统的软驱,而/mnt/exta 可能是使用e x t 2文件系统的软驱,/mnt/cdrom 光驱等等。

11./proc目录
/proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

12./run目录

/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

13./srv目录

该目录存放一些服务启动之后需要提取的数据。

14./var目录

var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

15./home目录

用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

16./media目录

linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

17./opt目录

opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

18./sys目录

这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

该文件系统是内核设备树的一个直观反映。

当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

19./usr目录

usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

Vim

  1. 命令行 -> 一般模式 vim xxx
  2. 一般模式 -> 编辑模式 i
  3. 一般模式 -> 命令模式 :或者 /
  4. 编辑模式 -> 一般模式 ESC
  5. 命令模式 -> 一般模式 ESC
  6. 在命令行下 :wq 保存退出; :q 退出; :q! 强制退出,不保存

常用快捷键

  1. 拷贝当前行 yy
  2. 拷贝当前行向下5行 5yy
  3. 删除当前行 dd
  4. 删除当前行向下5行 5dd
  5. 查找关键字 /关键字 n 找下一个
  6. 开启/关闭行号 :set nu/:set nonu
  7. 跳转到首行 gg
  8. 跳转到尾行 G
  9. 撤销 u
  10. 跳转到指定行 行号+shift+g

关机/重启

  1. 把内存的数据同步到磁盘 sync
  2. 立刻关机 shutdown -h now
  3. 一分钟后关机 shutdown -h 1
  4. 立刻重启 shutdown -r now
  5. 立刻关机 halt
  6. 立刻重启 reboot

用户管理

  1. 添加一个用户: useradd 用户名【每个用户有自己的文件夹,默认为 /home/用户名】
  2. 可以通过 useradd 用户名 -d 目录 【不使用默认生成的家目录,自己指定用户的家目录】
  3. 更改用户密码: password 用户名
  4. 显示当前用户所在目录: pwd
  5. 删除用户
    1. 删除用户,但保留家目录 userdel 用户名
    2. 删除用户以及家目录 userdel -r 用户名
  6. 一般情况建议保留家目录

用户登录/注销

  1. 切换用户 su - 用户名
  2. 注销用户 logout

查询用户信息

  1. 查询用户信息: id 用户名
  2. whoami 只显示用户名,且su后将显示切换后的用户名
  3. who am i 则显示用户名、登陆时间和ip,且su后仍显示首次登陆的用户

用户组

  • 类似于角色,系统可以对同一组(同一权限)的用户统一操作
  1. 新增组: groupadd 组名

  2. 删除组: groupdel 组名

  3. 添加用户到指定组: useradd -g 用户组 用户名

    【不指定组会直接生成 以用户名为组名的组,并将该用户加入到组中】

  4. 修改用户组: usermod -g 用户组 用户名

  5. /etc/passwd文件 用户(user)的配置文件,记录用户的各种信息

    每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

  6. /etc/shadow文件 口令的配置文件

    每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

  7. /etc/group文件 组(group)的配置文件,记录Linux包含的组的信息

    每行含义:组名:口令:组标识号组内用户列表

实用指令

运行级别说明:

0:关机

1: 单用户【找回丢失密码】

2: 多用户状态没有网络服务

3: 多用户状态有网络服务

4: 系统未使用保留给用户

5: 图形界面

6: 系统重启

常用运行级别是 3和5 ,也可以指定默认运行级别

切换运行级别

通过指令设置运行级别: init 级别数字

查看当前的运行级别: systemctl get-default

设置默认的运行级别: systemctl set-default multi-user.target

帮助指令

man指令

  1. 获取帮助信息: man [命令或配置文件] 【例如 man ls 查看ls指令的说明】
  2. ls -a 查看所有文件【包括隐藏文件】
  3. ls -l 单列输出查看文件
  4. 可以组合 ls -al 单列输出查看所有文件【包括隐藏文件】
  5. 指定查看某个目录所有文件:

help指令

  1. 获取shell内置命令的信息帮助: help cd

文件目录类

cd指令

  1. 显示当前工作目录的绝对路径: pwd
  2. 跳转到指定目录: cd 目录
  3. 回到当前目录的上一级目录: cd ..
  4. 回到自己的家目录: cd ~ 或者 cd :

mkdir指令

  1. 创建目录: mkdir 要创建的目录
  2. 创建多级目录: mkdir -p 要创建的目录
  3. 删除目录: rmdir 要删除的空目录
  4. 删除非空目录: rm -rf 要删除的目录 【强制删除,慎用!】

touch指令

  1. 创建空文件: touch 文件名

cp指令

  1. 拷贝文件到指定目录: cp source dest
  2. 递归拷贝整个文件到指定目录: cp -r source dest
  3. 【强制覆盖,不提示】递归拷贝整个文件到指定目录: \cp -r source dest

rm指令

  1. 删除文件或目录: rm 要删除的文件
  2. 递归删除文件或目录: rm -r 要删除的文件或目录
  3. 【强制覆盖,不提示】递归删除整个文件或目录: rm -rf 要删除的文件或目录

mv指令

  1. 重命名文件: mv 旧文件路径 新文件路径 【同一个路径】
  2. 移动文件: mv 旧文件路径 新文件路径
  3. 移动并且重命名文件: mv 旧文件路径 新文件路径【不在同一个路径】
  4. 移动整个目录: mv 旧文件路径/ 新文件路径

cat指令

  1. 查看文件内容: cat 要查看的文件
  2. 查看文件内容并显示行号: cat -n 要查看的文件
  3. 为了方便浏览,可以带上 管道命令 |more 【意思就是把前一个命令交给 more处理,例如 cat -n /etc/profile | more】

more指令

more指令是基于VI编辑器的文本过滤器,以全屏幕的方式按页展示文本文件内容,有许多快捷键

  1. 向下翻一页: space
  2. 向下翻一行: Enter
  3. 离开: q
  4. 向下滚动一屏: Ctrl + F
  5. 返回上一屏: Ctrl + B
  6. 输出当前行的行号: =
  7. 输出文件名和当前行的行号: :f

less指令

  1. less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。
  2. less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
操作 功能说明
空白键 向下翻动一页;
[pagedown] 向下翻动一页
[pageup] 向上翻动一页;
/字串 开启向下搜寻『字串』的功能;
n 向下查找
N 向上查找
?字串 开启向上搜寻『字串』的功能;
n 向上查找
N 向下查找
q 离开less这个程序

echo指令

  1. 输出内容到控制台【例如:echo $HOSTNAME 】: echo 输出内容
  2. 输出字符串【例如:echo hello,world 】: echo 字符串

head指令

  1. 显示文件的开头部分,默认显示前10行内容: head 文件
  2. 指定显示前15行内容: head -n 15 文件

tail指令

  1. 显示文件的尾部分,默认显示最后10行内容: tail 文件
  2. 指定显示后15行内容: tail -n 15 文件
  3. 实时监控文档的所有更新: tail -f 文件

覆盖文件内容: >指令

追加文件内容: >>指令

  1. ls -l > 文件 【将显示的文件列表 ,覆盖到指定文件】
  2. ls -al >> 文件 【将显示的所有文件列表 ,追加到指定文件】
  3. cat 文件1 > 文件2 【将显示的文件1覆盖文件2内容】
  4. echo "内容" >> 文件 【将显示的 "内容" 追加到指定文件】

ln指令

软连接,也称符号链接,类似于快捷方式,主要存放了链接其他文件的路径

  1. 给源文件创建一个软链接 ln -s 源文件或目录 软链接名
  2. 删除软连接 rm 软链接路径

history指令

  1. 查看已经执行过的历史命令: history
  2. 查看已经执行过的历史命令 10条: history 10
  3. 执行指定编号的历史命令: !编号

时间日期类

date指令

  1. 显示当前时间: date
  2. 显示当前年份: date +%Y
  3. 显示当前月份: date +%m
  4. 显示当前是哪一天: date +%d
  5. 显示当前年月日时分秒: date "%Y-%m-%d %H:%M:%S"
  6. 设置系统当前时间: date -s 字符串时间

cal指令

  1. 显示当前日历: cal
  2. 显示指定年的日历: cal 年份

搜索查找类

find指令

  1. 从指定目录向下递归的变量各个子目录,讲满足条件的文件或目录显示在终端 【搜索方式有三种: -size -name -user】
    • 语法: find 搜索目录 搜索方式 文件名
  2. 按照指定的文件名查找文件: find 搜索目录 -name 文件名
  3. 按照指定的用户名查找属于用户名的所有文件: find 搜索目录 -user 用户名
  4. 按照指定的文件大【+表示大于,-表示小于,n表示等于,200K,200M,200G】: find 搜索目录 -size +文件大小

locate指令

  1. locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件
  2. Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
  3. 第一次运行必须使用 updatedb指令 创建 locate数据库

which指令

可以查看某个指令在哪个目录下: which 指令名

grep指令 和 管道符号 |

  1. grep 过滤查找, 管道 | 表示将前一个命令的结果交给后面的命令处理
  2. 显示匹配行和行号: grep -n 查找内容 源文件
  3. 忽略字母大小写: grop -i 查找内容 源文件

压缩和解压类

gzip指令

压缩单个文件【只能将文件压缩为 *.gz文件】: gzip 文件

gunzip指令

解压缩单个文件: gunzip 文件.gz

zip指令

压缩整个目录: zip -r 生成的压缩包的名字 将要压缩的目录

unzip

  1. 解压缩目录: unzip 将要解压缩的内容.zip
  2. 解压缩到指定目录: unzip -d 解压后的目录 将要解压缩的内容.zip

tar指令

  1. 打包指令,最后打包的文件是 .tar.gz 的文件

  2. tar [选项] XXX.tar.gz 打包的内容

  3. 选项 功能
    -C 产生.tar打包文件
    -V 显示详细信息
    -f 指定压缩后的文件名
    -Z 打包同时压缩
    -X 解包.tar文件
  4. 示例:压缩 tar -zcvf XXX.tar.gz /home/

  5. 示例:解压 tar -zxvf XXX.tar.gz

  6. 示例:解压 tar -zxvf XXX.tar.gz -C /opt/tmp/ 【-C 固定格式,-C后面指定解压后的位置】

组管理

  • Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中的每个文件有所有者、所在组、其他组的概念

文件/目录所有者

  • 文件/目录所有者,一般为文件的创建者,也可以修改
  1. 查看文件的所有者: ls -ahl
  2. 修改文件的所有者: chown 用户名 文件名

组的创建

  1. 创建组: groupadd 组名
  2. 创建用户到指定组: useradd -g 用户 组名

所在组

  • 当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组
  1. 查看文件/目录的所在组: ls -ahl
  2. 修改文件/目录的所在组: chgrp 组名 文件名

其他组

除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

改变用户的所在组

  1. 添加用户是可以指定该用户添加在哪个组: useradd -g 用户 组名
  2. root用户可以改变某个用户的组
  3. 改变用户所在组: usermod -g 新组名 用户名
  4. 改变用户登录的初始目录【用户需要有进入新目录的权限】: usermod -d 目录名 用户名

权限

查看权限 :ls -l

-rwxr-xr-x. 1 root root    8440 6月   1 13:55 myhello

第0位:-

其余每三个一组

  1. rwx;
  2. r-x;
  3. r-x
  • 0-9位说明
  1. 第0位确定文件类型(d,-,I,c,b)

​ -是普通文件

​ I是链接,相当于windows的快捷方式

​ d是目录,相当于windows的文件夹

​ c是字符设备文件,鼠标,键盘

​ b是块设备,比如硬盘

2.第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 ---User

3.第4-6位确定所属组(同用户组的)拥有该文件的权限,---Group

4.第7-9位确定其他用户拥有该文件的权限---Other

  • 1 :如果是文件,表示硬连接数;如果是目录,表示子目录数

  • root root :前一个是文件所有者,后一个是文件所在组

  • 8440 :表示文件的大小

  • 6月 1 13:55 :表示最后修改时间

  • myhello :文件名

rwx权限详解

  • rwx数字表示 r=4,w=2,x=1

rwx作用到文件

  1. 【r】代表可读(read):可以读取,查看
  2. 【w】代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
  3. 【x】代表可执行(execute):可以被执行

rwx作用到目录

  1. 【r】代表可读(read):可以读取,查看目录内容
  2. 【w】代表可写(write):可以修改,对目录内创建+删除+重命名目录
  3. 【x】代表可执行(execute):可以进入该目录

修改权限-chmod

  • 通过chmod指令,可以修改文件或目录的权限

方式一: + - = 变更权限

u: 所有者

g: 所在组

o: 其他人

a:所有人【u、g、o的总和】

  1. 给文件的所有者赋予读写执行权限,给所在组的用户赋予读和执行的权限,给其他组赋予执行的权限: chmod u=rwx,g=rx,o=x 文件/目录
  2. 给文件的其他用户赋予写的权限: chmod o+w 文件/目录
  3. 给所有人去掉 执行权限 : chmod a-x 文件/目录

方式二: 数字 变更权限

  • rwx数字表示 r=4,w=2,x=1

u: 所有者

g: 所在组

o: 其他人

a:所有人【u、g、o的总和】

  1. 给文件的所有者赋予读写执行权限,给所在组的用户赋予读和执行的权限,给其他组赋予执行的权限: chmod 751 文件/目录
  2. 给文件的其他用户赋予写的权限: chmod o+w 文件/目录
  3. 给所有人去掉 执行权限 : chmod a-x 文件/目录

修改文件所有者-chown

  1. 改变所有者: chown 所有者 文件/目录
  2. 改变所有者和所在组: chown 新所有者:新组 文件/目录
  3. 递归改变所有者, -R 如果是目录,对其下所有的子文件或目录递归生效 chown -R 新所有者 文件/目录
  4. 递归改变所有者和所在组, -R 如果是目录,对其下所有的子文件或目录递归生效 chown -R 新所有者:新组 文件/目录

修改文件/目录所在组-chgrp

  1. 改变所在组: chgrp 新组 文件/目录
  2. 改变目录下所有的文件的所在组: chgrp -R 新组 文件/目录

crond - 定时循环任务调度

crontab 进行 定时任务的设置

任务调度:指定系统在某个时间执行的特定的命令或程序

任务调度分类:

  1. 系统工作:希望重要的工作必须反复执行

  2. 个别用户工作:执行某些程序,比如mysql备份

  3. 编辑crontab定时任务: crontab -e

  4. 查询crontab任务: crontab -l

  5. 删除当前用户所有的crontab任务: crontab -r

*/1**** ls -l /etc/ > /tmp/to.txt
项目 含义 范围
第一个“*” 一小时当中的第几分钟 0-59
第二个“**” 一天当中的第几小时 0-23
第三个“**” 一个月当中的第几天 1-31
第四个“**” 一年当中的第几月 1-12
第五个“**” 一周当中的星期几 0-7(0和7都代表星期日)

特殊符号:

符号 含义 示例 解释
* 代表任何时间 * 每小时的每分钟都执行一次
, 代表不连续的时间 08,12,16*** 每天的8点0分,12点0分,16点0分都执行一次
- 代表连续的时间范围 05**1-6 周一到周六的凌晨5点0分执行命令
/ 代表每隔多久执行一次 */10*** 每隔10分钟执行一次
/n 每隔n个单位时间执行一次 */n 每隔n分钟、小时等执行一次

案例

时间表达式 执行时间
45 22 * * * 每天22点45分
0 17 * * 1 每周1的17点0分
0 5 1,15 * * 每月1号和15号的凌晨5点0分
40 4 * * 1-5 每周一到周五的凌晨4点40分
*/10 4 * * * 每天凌晨4点开始,每隔10分钟
0 0 1,15 * 1 每月1号和15号,每周1的0点0分

其他指令

  1. 终止任务调度: crontab -r
  2. 列出当前有哪些任务调度: crontab -l
  3. 重启任务调度: service crond restart

at定时任务 - 一次性定时计划任务

基本介绍

  1. at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。

  2. 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。

  3. at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了。

  4. 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看。

  5. 可以通过 ps -ef | grep atd 查看当前atd是否启动在运行了

  6. 向job队列添加一个作业: at [选项] [时间]

  7. Ctrl + D 结束at命令输入

  8. 选项 含义
    -m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
    -1 atq的别名
    -d atrm的别名
    -v 显示任务将被执行的时间
    -C 打印任务的内容到标准输出
    -V 显示版本信息(注意:这里可能存在重复,应为 -v 或其他选项)
    -q <队列> 使用指定的队列
    -f <文件> 从指定文件读入任务而不是从标准输入读入
    -t<时间参数> 以时间参数的形式提交要运行的任务
  9. 指定时间的方法:

    1. 接受在当天的hh:mm(小时:分钟)式的时间指定:如果指定的时间已过去,任务将在第二天执行。例如,04:00

    2. 使用midnight(深夜)、noon(中午)、teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间

    3. 采用12小时计时制:在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如,12pm

    4. 指定命令执行的具体日期:指定格式为monthday(月日)、mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如,04:00 2021-03-15

    5. 使用相对计时法:指定格式为now + count time-units,其中now就是当前时间,time-units是时间单位,可以是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,例如几天,几小时。例如,now + 5 minutes

    6. 直接使用today(今天)、tomorrow(明天)来指定完成命令的时间

  10. 删除指定的任务: atrm 编号

  11. 查看任务列表: atq

Linux分区

基本介绍

  1. Linux来说无论有几个分区,分给哪一录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
  2. Linux采用了一种叫”载入“的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

硬盘说明

  1. Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
  2. 对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd"表明分区所在设备的类型,这里是指IDE硬盘了。"x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~"代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例如,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。【了解即可】
  3. 对于SCSI硬盘则标识为"sdx~",SCSI硬盘是用"sd"来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。

查看所有设备挂载情况

查看所有设备挂载情况: lsblk 或者 lsblk -f【信息更全】

添加一块硬盘

分区命令: fdisk /dev/sdb

格式化指令: mkfs -t ext4 /dev/sdb1

挂载指令【挂载:将一个分区和一个目录联系起来】: mount 设备目录 目录

卸载硬盘: umount 设备目录 或者 umount 目录

  • 值得注意的是:用命令行挂载的关系是临时的,当系统重启之后,挂载的关系会自动消失!!!

永久挂载/自动挂载

  1. 通过修改/etc/fstab实现挂载
  2. 添加完成后 执行mount -a 立刻生效

查看磁盘使用情况

  1. 查看系统整体磁盘使用情况: df -h
  2. 查询指定目录的磁盘占用情况【默认当前目录】: du -h 目录
  3. -s 指定目录占用大小汇总
  4. -h 带计量单位
  5. -a 含文件
  6. --max-depth=1 子目录深度
  7. -c 列出明细的同时,增加汇总值

磁盘情况实用指令

  1. 统计文件夹下的文件个数: ls -l /文件夹 | grep "^-" |wc -l
  2. 统计文件夹下的目录个数: ls -l /文件夹 | grep "^d" |wc -l
  3. 统计文件夹下的文件个数,包括子文件夹里的: ls -lR /文件夹 | grep "^-" |wc -l
  4. 统计文件夹下的目录个数,包括子文件夹里的: ls -lR /文件夹 | grep "^d" |wc -l
  5. 以树状显示目录结合 tree 目录【先 yum install tree 安装一下 】

网络配置

  1. windows 下查看网络配置: ipconfig

  2. Linux下查看网络配置: ifconfig

  3. 测试主机之间网络连通性: ping 目的主机的ip地址

  4. 网络环境配置的具体配置方式:

    1. 自动获取: 登录后,通过界面的来设置自动获取ip

      特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样

    2. 指定ip: 直接修改配置文件来指定ip,并可以连接到外网

    ​ 编辑 vim /etc/sysconfig/network-scripts/ifcfg-ens33

    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    BOOTPROTO="static"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="23626adf-3676-45b2-938b-e6b9864816d8"
    DEVICE="ens33"
    ONBOOT="yes"
    #IP地址
    IPADDR=192.168.200.130
    #网关
    GATEWAY=192.168.200.2
    #域名解析器
    DNS1=192.168.200.2
    
    
  5. 重启网络服务: service network restart

设置主机名

  1. 为了方便记忆,设置主机名
  2. 查看当前主机名: hostname
  3. 修改主机名在文件: /etc/hostname 指定
  4. 重启生效

如何设置主机名和hosts映射?

  1. windows下 过某个主机名找到对应windows系统: C:\Windows\System32\drivers\etc\hosts 文件指定
  2. Linux系统下 通过某个主机名找到对应Linux系统: 在/etc/hosts 文件中指定

Hosts是什么?

​ Hosts 是一个文本文件,用于记录IP和Hostname【主机名】之间的映射关系

DNS

  1. DNS是 域名系统
  2. 是互联网上作为域名和IP地址相互映射的一个分布式数据库

示例:

  1. 当用户在浏览器输入了www.baidu.com
  2. 浏览器先检查浏览器缓存中有没有该域名解析IP地址,
  3. 有就先调用这个IP完成解析;
  4. 如果没有检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。
  5. 这两个缓存,可以理解为本地解析器缓存
  6. 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录)。
  7. 如在cmd窗口中输入:
  8. ipconfig/displaydns //DNS域名解析缓存
  9. ipconfig/flushdns //手动清理DNS缓存
  10. 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
  11. 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP则到域名服务DNS进行解析域
  12. 用户输入 → 浏览器缓存 → DNS缓存【操作系统中】 → hosts文件 → DNS【公网上】

进程管理

  1. 在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
  2. 每个进程都可能以两种方式存在的。前台与后台。
  3. 所谓前台进程就是用户目前的屏幕上可以进行操作的。
  4. 后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
  5. 一 般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。

显示系统执行的进程

  1. 显示系统执行的进程,以及执行状况: ps
  2. 显示当前终端的所有进程信息: ps -a
  3. 以用户的格式显示信息: ps -u
  4. 显示后台进程运行的参数: ps -x
  5. 通常组合使用: ps -aux | more

ps指令详解

1. ps命令使用示例

  • 命令格式:ps -aux | grep xxx
    • 示例:查看系统中是否存在sshd服务

2. 指令说明(System V展示风格)

  • USER:用户名称
  • PID:进程号
  • %CPU:进程占用CPU的百分比
  • %MEM:进程占用物理内存的百分比
  • VSZ:进程占用的虚拟内存大小(单位:KB)
  • RSS:进程占用的物理内存大小(单位:KB)
  • TT:终端名称,一般显示为缩写
  • STAT:进程状态
    • S:睡眠状态
    • s:会话的先导进程
    • N:拥有比普通优先级更低的优先级
    • R:正在运行
    • D:短期等待
    • Z:僵死进程
    • T:被跟踪或被停止
  • STARTED:进程的启动时间
  • TIME:CPU时间,即进程使用CPU的总时间
  • COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

这个命令和说明对于了解Linux系统中进程的状态和性能非常有帮助,可以帮助用户监控和管理正在运行的进程。

全格式显示当前所有的进程,查看进程的父进程

  1. 全格式显示当前所有的进程: ps -ef 【-e显示所有进程,-f全格式】
  2. 可以带上grep 过滤: ps -ef | grep 进程 【例如 sshd 远程连接进程】

终止进程

  1. 通过进程号终止进程: kill 进程号
  2. 通过进程名称终止进程【子进程也会终止】: killall 进程名称
  3. 通过进程号终止进程【强制终止】: kill -9 进程号

查看进程树

  1. 查看进程树: pstree
  2. 显示进程的PID: pstree -p
  3. 显示进程的所属用户: pstree -u

服务管理

  • 服务本质就是进程,但是运行在后台,通常会监听某个端口,等待其他程序的请求,比如mysql等,因此又称为守护进程。

service管理指令

  1. service 服务名 [start | stop | restart | reload | status]
  2. CentOS7.0很多服务用 systemctl来管理
  3. service 指令管理的服务 可以在 /etc/init.d/ 查看【ls -l /etc/init.d/】
  4. 查看所有的系统服务: setup

服务的运行级别

Linux系统有7种运行级别(runlevel):

常用的是级别3和5

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS),不支持网络 运行级别
  • 3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别
  • 4:系统未使用,保留 运行级别
  • 5:X11控制台,登陆后进入图形GUI模式 运行级别
  • 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

Linux开机流程

开机 → BIOS → /boot → systemd → 运行级别 → 运行级对应的服务

设置各个运行级别的自启动/关闭

  1. 查看服务 chkconfig --list | grep xxx
  2. chkconfig 服务名 --list
  3. chkconfig --level 5 服务名 on/off
  4. chkconfig 重新设置服务后,需要重启后生效

systemctl管理指令

  1. 基本语法: systemctl [start | stop | restart | status] 服务名
  2. systemctl 指令管理的服务在 /usr/lib/systemd/system 查看
  • 关闭或启动了服务后,立即生效,但是只是临时生效,重启系统后,还是会回去以前的服务的设置
  • 希望设置某个服务的自启动或关闭永久生效,还是要使用systemctl enable 服务名;或 systemctl disable 服务名 ;

systemctl设置服务的自启动状态

  1. 查看服务的自启动状态: systemctl list-unit-files
  2. 针对某项服务查看: systemctl list-unit-files | grep 服务名
  3. 设置服务开机启动: systemctl enable 服务名
  4. 关闭服务开机启动: systemctl disable 服务名
  5. 查询某个服务是否是自启动: systemctl is-enabled 服务名

打开或关闭指定端口

  1. 打开端口: filewall-cmd --permanent --add-port=端口号/协议
  2. 查看 端口/协议: netstat -anp | more
  3. 关闭端口: filewall-cmd --permanent --remove-port=端口号/协议
  4. 重新载入,才能生效: filewall-cmd --reload
  5. 查询端口是否开放: filewall-cmd --query-port=端口号/协议

动态监控进程

  • top 也是用来显示正在执行的进程。但top和ps最大的不同在于,top 可以在执行一段时间更新正在运行的进程
    1. 指定top命令每隔几秒更新。默认3秒: top -d 秒数
    2. top命令不显示任何闲置或僵死进程: top -i
    3. 通过指定监控进程ID来针对监控某个进程的状态: top -p

交互操作

  1. 以CPU使用率排序,默认就是此项: P

  2. 以内存的使用率排序: M

  3. 以PID排序: N

  4. 退出top q

查看网络状况-netstat

  1. 按一定顺序排列输出: netstat -an
  2. 显示哪个进程在调用: netstat -p

软件包管理

  1. rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。
  2. RPM是RedHatPackageManager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
  3. Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了。

查询rpm包相关信息

  1. 查询已安装的rpm列表: rpm -qa
  2. 指定查询已安装的rpm列表: rpm -qa | grep 软件包名
  3. 查询软件包是否安装: rpm -q 软件包名
  4. 查询软件包信息: rpm -qi 软件包名
  5. 查询软件包中的文件: rpm -ql 软件包名
  6. 查询文件所属的软件包: rpm -qf 文件全路径

卸载rpm包

  1. 卸载删除指定rpm包: rpm -e RPM包的名称
  2. 强制卸载删除指定rpm包【不推荐】: rpm -e --nodeps RPM包的名称

安装rpm包

  1. 安装指令: rpm -ivh RPM包的全路径名称 【i=install安装;v=verbose提示;h=hash进度条】

yum

  • Yum是一个shell前端软件包管理器。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
  1. 查询yum服务器是否有需要安装的软件: yum list | grep 软件列表
  2. 安装指定的yum包 :yum install 软件包

Shell编程

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

Shell执行的方式

  1. 创建时,约定俗成 .sh结尾
  2. 脚本以 #!/bin/hash开头
  3. 脚本需要有可执行权限
  4. 如果要运行,需要赋予权限 可以 chmod u+x 脚本名
  5. 也可不赋予权限 ,但是需要用 sh 脚本名 来运行

Shell脚本的多行注释

:<<!

内容

Shell变量

  1. Linux中 Shell中的变量分为,系统变量和用户自定义变量
  2. 系统变量: $HOME、$PWD、$SHELL、$USER等等,比如echo $HOME
  3. 显示当前shell中的所有变量: set

Shell变量的自定义

  1. 定义变量:变量名=值
  2. 撤销变量: unset变量
  3. 声明静态变量: readonly变量,注意不能unset

Shell变量规则

  1. 变量名称可以由字母、数字、下划线组成,但是不能以数字开头

  2. 等号两侧不能有空格

  3. 变量名称一般习惯为大写,【规范】

  4. 将命令的返回值赋给变量,用 反引号``

  5. A=`date`      date命令的返回值赋给变量A
    A=$(date)等价于反引号
    

设置环境变量

  1. 将Shell变量输出为环境变量/全局变量: export 变量名=变量值
  2. 让修改后的配置信息立即生效:: source 配置文件
  3. 查询环境变量的值: export $变量名

位置参数变量

  1. 执行Shell脚本时,可以通过位置参数变量来获取到命令行的参数信息

  2. 比如在命令行输入: ./myshell.sh 200 100

  3. 变量符号 功能描述
    $n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如$
    $* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
    $@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
    $# 这个变量代表命令行中所有参数的个数

预定义变量

  1. 预定义变量就是Shell设计者事先定义好的变量,可以直接在shell脚本中使用
  2. 当前进程的进程号【PID】 $$
  3. 后台运行的最后一个进程的进程【PID】 $!
  4. 最后一次执行的命令的返回状态。 $?
  5. ​ $? 如果这个变量值为0,证明上个命令正确执行;
  6. ​ $? 如果这个变量的值为非0,则证明上个命令执行不正确

运算符

  1. $[运算式] 或者 $((运算式)) 或者 expr m + n【expr 间要有空格,结果如果要赋给变量用反引号】

  2. expr \*乘   /除    %取余 
    

条件判断

  1. if [ condition ] 非空为true,可以使用$?验证 (0为true , >1为false)
  2. 字符串比较 =
  3. 两个整数比较 小于lt 小于等于le 等于eq 大于gt 大于等于ge 不等于ne
  4. 按文件权限判断 有读的权限-r 有写的权限-w 有执行的权限-x
  5. 按照文件类型判断 文件存在并且是常规文件-f 文件存在-e 文件存在并且是个目录-d

流程控制

单分支

if [ 条件判断式 ]
then
	代码
fi

多分支

if [ 条件判断式 ]
then
	代码
elif [ 条件判断式 ]
then
	代码
fi

case语句

case $变量名 in
"值1")
	代码
;;
"值2")
	代码
;;
*)
	代码
;;
esac

循环控制

for循环

方式1

for 变量 in 值1 值2 值3
do
	代码
done

方式2

for ((初始值;循环控制条件;变量变化))
do
	代码
done

While循环

while[ 条件判断式 ]
do
	代码
done

读取控制台输入-read

  1. 指定读取值的提示信息: read -p "提示信息" 变量名
  2. 指定读取值时等待的时间 秒,如果没有在知道时间内输入,不在等待: read -t 时间 -p "提示信息" 变量名

函数

shell编程有系统函数也可以自定义函数。

系统函数

basename
  1. 返回完整路径最后 / 的部分,常用与获取文件名: basename [ pathname ]
  2. 带上 suffix后缀,basename 会将前缀和后缀都去掉: basename [ pathname ] [ suffix ]
  3. [pathname] 也可以是 string
dirname
  1. 返回完整路径最后 / 的前面部分,常用于返回路径部分
  2. 用法和basename 相反

自定义函数

定义
function  funname(){
	代码
	return int
}
调用
funname [值]
posted @ 2024-06-08 13:38  zy2596  阅读(160)  评论(0编辑  收藏  举报