这是我学习哔哩哔哩UP主韩顺平的2021韩顺平图解Linux课程的学习笔记。
课程地址:2021韩顺平图解Linux课程
Linux基础篇-Linux目录结构
基本介绍
- linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
具体的目录结构
加粗的是常用的和重要的的目录,划删除线的是不能动的目录。
- /bin:存放最经常使用的命令
- /sbin:存放系统管理员使用的系统管理程序
- /home:存放普通用户的主目录
- /root:系统管理员
- /lib:系统开机所需要最基本的动态连接共享库
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
- /etc:所有的系统管理所需要的配置文件和子目录
- /usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
- /boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
- /srv:该目录存放一些服务启动之后需要提取的数据
- /sys:这是linux2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统
- /tmp:这个目录是用来存放一些临时文件的
- /dev:类似于windows的设备管理器,把所有的硬件用文件的形式存储
- /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载到/mnt/上,然后进入该目录就可以查看里的内容了
- /opt:这是给主机额外安装软件所存放的目录
- /usr/local:这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序
- /var:这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
- /selinux:SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置
Linux实操篇-Vi和Vim编辑器
Vi和Vim的基本介绍
- Linux系统会内置Vi文本编辑器
- Vim具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补全、编译及错误跳转等方便编程的功能特别丰富。
Vi和Vim常用的三种模式
- 正常模式:以Vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用上下左右按键来移动光标,你可以使用删除字符或删除整行来处理档案内容,也可以使用复制、粘贴来处理你的文件数据。
- 插入模式:按下 i,I,o,O,a,A,r,R 等任何一个字母之后会进入编辑模式,,一般来说按i即可。
- 命令行模式:键入Esc再输入 : ,在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开Vim、显示行号等的动作则是在此模式中达成的。
Vi和Vim常用快捷键
拷贝当前行:yy,拷贝当前行向下的5行:5yy,粘贴:p。(一般模式)
删除当前行:dd,删除当前行向下的5行:5dd。(一般模式)
在文件中查找某个单词:/单词,键入n查找下一个。
设置行号::set nu 和 :set nonu。
移动到文档的最末行:G,移动到文档最首行:gg。(一般模式)
撤销:u
将光标定位到5行:5shift+g。(一般模式)
Linux实操篇-开机、重启和用户登录注销
关机&重启
-
shutdown -h now
orhalt
:立刻关机 -
shutdown -h 1
:1分钟后关机 -
shutdown -r now
orreboot
:立刻重启 -
sync
:把内存的数据同步到磁盘
尽管目前shutdown/reboot/halt等命令已经在关机前执行了sync,但依然建议自己在关机前至少输入一次sync。
用户登录&注销
- 登录:
su - 用户名
- 注销:
logout
logout注销指令在图形运行级别无效,在运行级别3以下有效。
Linux实操篇-用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
常用指令
- 添加用户:
useradd 用户名
- 当创建用户成功后,会自动的创建和用户同名的家目录。
- 也可以通过
useradd -d 指定目录 用户名
,给新创建的用户指定家目录。
- 指定/修改密码:
passwd 用户名
,如果不指定用户名就是修改当前的用户密码。 - 查看当前用户:
whoami
,显示当前目录:pwd
。 - 删除用户
- 保留家目录:
userdel 用户名
- 不保留家目录:
userdel -r 用户名
- 保留家目录:
- 查询用户信息:
id 用户名
- 切换用户:
su - 用户名
- 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
- 当需要返回到原来用户时,使用
exit/logout
指令。
- 新增组:
groupadd 组名
,删除组:groupdel 组名
。- 增加用户时可以直接加上组:
useradd –g 用户组 用户名
- 如果新增用户没有组,系统会自动创建一个和用户名一样的组,并将该用户放进该组。
- 增加用户时可以直接加上组:
- 修改用户的组:
usermod -g 组名 用户名
- 修改用户的目录:
usermod -d 目录名 用户名
用户和组相关文件
- /etc/passwd文件:用户的配置文件,记录用户的各种信息。
- 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell。
- /etc/shadow文件:口令的配置文件。
- 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志。
- /etc/group文件:组的配置文件,记录组的信息。
- 每行含义:组名:口令:组标识号:组内用户列表。
Linux 实操篇-实用指令
运行级别
运行级别 | 说明 | 运行级别 | 说明 |
---|---|---|---|
0 | 关机 | 1 | 单用户(找回丢失密码) |
2 | 多用户状态没有网络服务 | 3 | 多用户状态有网络服务 |
4 | 系统未使用保留给用户 | 5 | 图形界面 |
6 | 系统重启 |
- 切换用户级别:
init 0/1/2/3/4/5/6
- 查看当前运行级别:
systemctl get-default
- 指定默认运行级别:
systemctl set-default TARGET.target
- 运行级别3:
multi-user.target
- 运行级别5:
graphical.target
- 运行级别3:
找回root密码
- 启动系统,在选择启动版本的时候按 e ,然后在有Linux版本的那一段最后边空一格写
init=/bin/sh
,接着键入 Ctrl+x 。 - 在光标闪烁的地方输入
mount -o remount,rw /
后回车。 - 在新的一行后面输入
passwd
后回车。 - 输入密码,然后再次输入密码即可。(建议密码长度8位及以上)
- 接着输入
touch /.autorelabel
后回车。 - 最后输入
exec /sbin/init
后回车,系统会自动重启后密码生效。
帮助指令
man:
man 命令或配置文件
,如:man ls
help:
help 命令或配置文件
,如:help cd
文件目录类
pwd
:显示当前目录的绝对路径-
ls:
ls 选项 目录或文件
-
常用选项
选项 功能 -a 显示当前目录包括隐藏文件在内的所有文件和目录 -l 以列表方式显示(可以加个h,按照人类比较容易看清楚的单位显示文件大小)
-
-
cd:切换到指定目录
- 基本语法:
cd 参数
- 回到自己的家目录:
cd ~
- 回到当前目录的上一级目录:
cd ..
- 基本语法:
-
mkdir:创建目录
基本语法:
mkdir 选项 目录名
-
常用选项
选项 功能 -p 创建多级目录 案例:
mkdir -p /animal/dog
-
rmdir:删除空目录
- 基本语法:
rmdir 选项 要删除的空目录
- 如果需要删除非空目录:
rm -rf 要删除的目录
- 基本语法:
-
touch:创建空文件
- 基本语法:
touch 文件名
- 案例:
touch hello.txt
- 基本语法:
-
mv:移动或重命名文件与目录
- 基本语法
- 重命名:
mv 旧文件名 新文件名
- 移动:
mv 文件 目标目录
- 重命名:
- 案例
- 移动并重命名:
mv pig.txt /root/cow.txt
- 移动整个目录:
mv bbb/ /home/
- 移动并重命名:
- 基本语法
-
cat:查看文件内容
基本语法:
cat 选项 要查看的文件
-
常用选项
选项 功能 -n 查看行号 使用细节:为了浏览方便,可以加上管道命令
| more
-
more:按页显示文本文件的内容
基本语法:
more 要查看的文件
-
操作说明
操作 功能 Enter 向下番一行 Space 向下翻一页 Ctrl+f 向下滚动一屏 Ctrl+b 向上滚动一屏 = 输出当前行号 :f 输出文件名和当前行号 q 退出
-
less:分屏查看文件内容
基本语法:
less 要查看的文件
-
操作说明
操作 功能 Page up 向上番一页 Page down 向下翻一页 /字符串 向下查找该字符串;n-继续向下查找,N-向上查找 ?字符串 向上查找该字符串;n-继续向上查找,N-向下查找 q 退出
-
echo:输出内容到控制台
- 基本语法:
echo 选项 输出内容
- 案例
- 输出环境变量:
echo $SHELL
- 输出字符串:
echo hello world
- 输出环境变量:
- 基本语法:
-
head:用于显示文件开头部分的内容,默认显示前十行
基本语法:
head 选项 文件
-
常用选项
选项 功能 -n 5 查看前5行
-
tail:用于显示文件尾部部分的内容,默认显示后十行
基本语法:
tail 选项 文件
-
常用选项
选项 功能 -n 5 查看后5行 -f 实时追踪该文档的所有更新
-
>指令和>>指令:输出重定向(前者覆盖后者追加)
- 基本语法
ls -l > 文件名
ls -al >> 文件名
cat 文件1 > 文件2
echo 内容 >> 文件名
- 基本语法
-
ln:软链接(又叫符号链接,相当于快捷方式)
- 基本语法
-
ln -s 原文件或目录 软链接名
:创建软连接 -
rm 软连接名
:删除软连接
-
- 基本语法
-
history
:查看已经执行过的历史命令- 案例
- 显示最近使用过的10条指令:
history 10
- 执行历史编号为5的指令:
!5
- 显示最近使用过的10条指令:
- 案例
时间日期类
-
date
-
基本语法
-
date
:显示当前时间 -
date +%Y
:显示当前年份 -
date +%m
:显示当前月份 -
date +%d
:显示当前日 -
date "+%Y-%m-%d %H:%M:%S"
:显示年月日时分秒
-
设置日期:
date -s 字符串时间
,如:date -s "2020-09-09 17:46:50"
-
-
cal:查看日历
- 基本语法
-
cal 选项
(若不加选项,则显示本月日历)
-
- 案例
- 显示2020年日历:
cal 2020
- 显示2020年日历:
- 基本语法
搜索查找类
-
find:将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法:
find 搜索范围 选项 目标文件
-
选项说明
选项 功能 -name 查询方式 按照指定的文件名查找文件 -user 用户名 查找属于指定用户所有文件 -size 文件大小 按照指定的文件大小查找文件 -
案例
- 按文件名:查找/home目录下的hello.txt:
find /home -name hello.txt
- 按拥有者:查找/opt目录下,用户名称为nobody的文件:
find /opt -user nobody
- 按照文件大小:查找整个Linux系统下大于200M的文件(+n大于、-n小于、n等于,单位有k/M/G):
find / -size +200M
- 按文件名:查找/home目录下的hello.txt:
-
locate:快速定位文件路径
- 基本语法:
locate 文件名
- 特别说明:第一次运行前,必须使用
updatedb
指令创建locate数据库。 - 案例
- 使用locate指令快速定位hello.txt所在的目录:
locate hello.txt
- 使用locate指令快速定位hello.txt所在的目录:
- 基本语法:
which 指令名称
:查看某个指令在哪个目录-
grep指令:过滤查找,常和管道符号|一起使用
- 基本语法:
grep 选项 查找内容 目标文件
orcat 目标文件 | grep 选项 查找内容
- 常用选项
选项 功能 -n 显示匹配行及行号 -i 忽略字母大小写 - 案例:在hello.txt文件中,查找"yes"所在行,并显示行号:
cat hello.txt | grep -n "yes"
orgrep -n "yes" hello.txt
- 基本语法:
压缩和解压类
gzip/gunzip 目标文件
:前者压缩,后者解压(适用于 .gz 文件)-
zip/unzip:前者压缩,后者解压
- 基本语法:
zip 选项 xxx.zip 目标文件
andunzip 选项 xxx.zip
- zip常用选项:
-r
:递归压缩,即压缩目录 - unzip常用选项:
-d 目录
:指定解压后文件的存放目录 - 案例
- 将home目录及其包含的文件和子文件夹压缩成myhome.zip:
zip -r myhome.zip /home/
- 将myhome.zip解压到/opt/tmp目录下:
unzip -d /opt/tmp myhome.zip
- 将home目录及其包含的文件和子文件夹压缩成myhome.zip:
- 基本语法:
-
tar:压缩和解压,适用于 .tar.gz 文件
- 基本语法:
tar 选项 xxx.tar.gz 打包的内容
- 常用选项
选项 功能 -c 产生.tar打包文件 -v 显示详细信息 -f 指定压缩后的文件名 -z 打包同时压缩 -x 解包.tar文件 - 案例
- 将pig.txt和cat.txt压缩成pc.tar.gz:
tar -zcvf pc.tar.gz pig.txt cat.txt
- 将/home文件夹压缩成myhome.tar.gz:
tar -zcvf myhome.tar.gz /home/
- 将pc.tar.gz解压到当前目录:
tar -zxvf pc.tar.gz
- 将myhome.tar.gz解压到/opt/tmp2目录下:
tar -zxvf myhome.tar.gz -C /opt/tmp2/
- 将pig.txt和cat.txt压缩成pc.tar.gz:
- 基本语法:
Linux实操篇-组管理和权限管理
Linux组基本介绍
在Linux中的每个用户必须属于一个组,不能独立于组外;Linux中的每个文件都有所有者、所在组、其它组的概念。
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。
文件/目录所有者和所在组
- 查看文件的所有者和所在组:
ls -ahl
- chown:修改文件/目录的所有者
-
基本语法
-
chown newowner 文件/目录
:修改文件/目录的所有者 -
chown newowner:newgroup 文件/目录
:修改文件/目录的所有者和所在组
-
-
常用选项
选项 功能 -R 用于目录,使其下所有子文件或目录递归生效 -
案例
- 请将/home/abc.txt文件的所有者修改成tom:
chown tom /home/abc.txt
- 请将/home/kkk目录下所有的文件和目录的所有者都修改成tom:
chown -R tom /home/kkk
- 请将/home/abc.txt文件的所有者修改成tom:
-
- chgrp:修改文件/目录的所在组
基本语法:
chgrp newgroup 文件/目录
-
常用选项
选项 功能 -R 用于目录,使其下所有子文件或目录递归生效 -
案例
- 将/home/abc.txt文件的所在组修改为tom:
chgrp tom /home/abc.txt
- 将/home/kkk目录下所有的文件和目录的所在组都修改为komakea:
chgrp -R komaeka /home/kkk
- 将/home/abc.txt文件的所在组修改为tom:
权限的基本介绍
运行
ls -l
会显示 -rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc-
第0位确定文件类型
符号 类型 - 普通文件 l 链接 d 目录 c 字符设备,如:鼠标,键盘 b 块设备,如:硬盘 第1-3位:该文件的所有者拥有该文件的权限
第4-6位:该文件的所有者所属组拥有该文件的权限
第7-9位:其他用户拥有该文件的权限
可用数字表示为:r=4,w=2,x=1因此rwx=4+2+1=7,数字可以进行组合
-
rwx作用到文件和目录
符号 文件 目录 - 无权限 无权限 r 可读 可读,可 ls
w 可写但不可删除 可创建、修改、删除、重命名 x 可执行 可进入该目录 -
其它说明
- 1:文件-硬链接数,目录-子目录数
- root:用户
- root:组
- 1213:文件大小
- Feb 2 09:39:最后修改日期
- abc:文件名
修改权限
-
第一种方式:+、-、=变更权限
- u:所有者、g:所属组、o:其他人、a:所有人(u,g,o的总和)
chmod u=rwx,g=rx,o=x 文件/目录
chmod o+w 文件/目录
chmod a-x 文件/目录
- 案例
- 给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它人读执行权限:
chmod u=rwx,g=wx,o=rx abc
- 给abc文件的所有者除去执行的权限,给所属组增加写的权限:
chmod u-x,g+w abc
- 给abc文件的所有用户添加读的权限:
chmod a+r abc
- 给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它人读执行权限:
-
第二种方式:通过数字变更权限
- r=4 w=2 x=1,故rwx=4+2+1=7
-
chmod u=rwx,g=rx,o=x 文件/目录
相当于chmod 751 文件/目录
- 将/home/abc.txt文件的权限修改成rwxr-xr-x,使用给数字的方式实现:
chmod 755 /home/abc.txt
Linux实操篇-定时任务调度
crond任务调度
任务调度:是指系统在某个时间执行的特定的命令或程序
-
任务调度分类
- 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等
- 个别用户工作:个别用户可能希望执行某些程序,比如对MySQL数据库的备份
基本语法:
crontab 选项
-
常用选项
选项 含义 -e 编辑crontab定时任务 -l 查询crontab任务 -r 删除当前用户所有的crontab任务 -
占位符说明
占位符 含义 范围 第一个* 一小时当中的第几分钟 0-59 第二个* 一天当中的第几小时 0-23 第三个* 一个月当中的第几天 1-31 第四个* 一年当中的第几月 1-12 第五个* 一周当中的星期几 0-7(0和7都代表星期日) -
特殊符号的说明
特殊符号 含义 * 代表任何时间 , 代表不连续的时间 - 代表连续的时间范围 */n 代表间隔多久执行一次 -
特殊符号执行案例
符号串 含义 45 22 * * * 命令 每天22:45执行命令 0 17 * * 1 命令 每周1的17:00执行命令 0 5 1,15 * * 命令 每月的1号和15号的5:00执行命令 40 4 * * 1-5 命令 每周1至5的4:40执行命令 */10 4 * * * 命令 每天的4:00开始每隔十分钟执行一次命令 0 0 1,15 * 1 命令 每个月1号和15号,以及每周1的0:00执行命令 每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中:
*/1 * * * * date >> /tmp/mydate
at定时任务
at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了。
at的守护进程atd会以后台模式运行,检查作业队列来运行。默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
在使用at命令的时候,一定要保证atd进程的启动,可以使用指令来查看:
ps -ef | grep atd
命令格式:
at [选项] 时间
,最后键入ctrl+d结束命令的输入-
at时间定义
- 接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。例如:04:00
- 使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
- 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12pm
- 指定命令执行的具体日期。例如:04:00 2021-03-1
- 使用相对计时法。指定格式为: now + count 时间单位 ,时间单位能够是minutes、hours、days、weeks。例如:now + 5 minutes
-
案例
- 2天后的下午5点执行/bin/ls /home
at 5pm + 2 days
/bin/ls /home
- 使用atq命令来查看系统中没有执行的工作任务:
atq
- 明天17点钟,输出时间到/root/date100.log
at 5pm tomorrow
date > /root/date100.log
- 删除已经设置的任务1:
atrm 1
- 2天后的下午5点执行/bin/ls /home
Linux实操篇-Linux磁盘分区、挂载
Linux 分区
Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入的一个分区将使它的存储空间在一个目录下获得。
-
硬盘说明
- Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
- 对于IDE硬盘,驱动器标识符为“hdx”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字1到4表示主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区
- 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样
查看所有设备挂载情况:
lsblk
或者lsblk -f
挂载磁盘
- 增加一块硬盘:虚拟机添加硬盘->分区->格式化->挂载->设置永久挂载
- 分区:
fdisk /dev/sdb
- 格式化磁盘:
mkfs -t ext4 /dev/sdb1
- 挂载:
mount /dev/sdb1 /newdisk/
- 卸载:
umount /dev/sdb1
- 永久挂载:修改/etc/fstab中的内容
- 分区:
用命令行挂载重启会失效,所以还需要添加永久挂载
磁盘情况查询
- 查询系统整体磁盘使用情况:
df -h
- 查询指定目录的磁盘占用情况:
du -h 目录名
,如果不加目录名,就会查询当前目录 - 常用选项
选项 | 含义 |
---|---|
-s | 指定目录占用大小汇总 |
-h | 带计量单位 |
-a | 含文件 |
--max-depth=1 |
子目录深度 |
-c | 列出明细的同时,增加汇总值 |
- 案例:查询/opt目录的磁盘占用情况,深度为1:
du -ha --max-depth=1 /opt
磁盘情况-工作实用指令
- 统计/opt文件夹下文件的个数:
ls -l /opt | grep "^-" | wc -l
- 统计/opt文件夹下目录的个数:
ls -l /opt | grep "^d" | wc -l
- 统计/opt文件夹下文件的个数,包括子文件夹里的:
ls -lR /opt | grep "^-" | wc -l
- 统计/opt文件夹下目录的个数,包括子文件夹里的:
ls -lR /opt | grep "^d" | wc -l
- 以树状显示目录结构:
tree /home
。如果没有tree,则使用yum install tree
安装tree
Linux实操篇-网络配置
-
指定ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
- 静态分配:
BOOTPROTO="static"
IP地址:IPADDR=192.168.200.130
网关:GATEWAY=192.168.200.2
域名解析器:DNS1=192.168.200.2
- 修改虚拟网络编辑器,改为同一个网段
- 重启网络服务(
service network restart
)或重启系统
-
设置主机名
- 为了方便记忆,可以给linux系统设置主机名, 也可以根据需要修改主机名
- 查看主机名:
hostname
- 修改 /etc/hostname
- 修改后,重启生效
设置hosts映射:修改 /etc/hosts
Linux实操篇-进程管理
进程的查看与结束
- 显示系统执行的进程:
ps
选项 | 含义 |
---|---|
-a | 显示当前终端的所有进程信息 |
-u | 以用户的格式显示进程信息 |
-x | 显示后台进程运行的参数 |
-e | 显示所有进程 |
-f | 全格式 |
字段 | 说明 |
---|---|
USER | 进程执行用户 |
PID | 进程识别号 |
PPID | 该进程的父进程 |
CPU | 占用CPU百分比 |
MEM | 占用物理内存百分比 |
VSZ | 占用虚拟内存的大小 |
RSS | 占用物理内存的大小 |
TTY | 终端名称 |
STAT | 进程状态 |
START | 进程执行的开始时间 |
TIME | 进程占用CPU的时间 |
COMMAND | 进程名,执行该进程的指令 |
- 查看sshd的父进程:
ps -ef | grep sshd
字段 | 说明 |
---|---|
UID | 用户ID |
PID | 进程识别号 |
PPID | 该进程的父进程 |
STIME | 进程执行的时间 |
TTY | 终端名称 |
TIME | 进程占用CPU的时间 |
CMD | 进程名,执行该进程的指令 |
-
终止进程:
kill
andkillall
kill 选项 进程号
:根据进程号杀死进程killall 进程名
:根据进程名杀死该进程及其子进程,支持通配符-
常用选项
选项 功能 -9 强迫进程立即停止 -
案例
- 踢掉某个非法登录用户:
kill 11421
- 终止远程登陆服务sshd:
kill 10748
- 重启sshd服务:
/bin/systemctl start sshd.service
- 终止多个gedit:
killall gedit
- 强制杀掉一个终端:
kill -9 10487
- 踢掉某个非法登录用户:
-
查看进程数:
pstree 选项
- 常用选项
选项 | 含义 |
---|---|
-p | 显示进程的PID |
-u | 显示进程的所属用户 |
- 案例
- 树状形式显示进程的pid:
pstree -p
- 树状形式显示进程的用户id:
pstree -u
- 树状形式显示进程的pid:
服务管理
-
service管理指令
service 服务名 start|stop|restart|reload|status
- 在CentOS7.0后很多服务不再使用
service
,而是systemctl
- service指令管理的服务在 /etc/init.d 查看
-
查看、启动、关闭network指令
- 查看:
service network status
orsystemctl status network
- 启动:
service network start
orsystemctl start network
- 关闭:
service network stop
orsystemctl stop network
- 查看:
-
chkconfig
- 可以通过
chkconfig
命令可以给服务的各个运行级别设置自启动/关闭 - chkconfig指令管理的服务在 /etc/init.d 查看
- 查看服务:
chkconfig --list[ | grep 服务名]
orchkconfig 服务名 --list
- 指定某一服务在某一级别启动或关闭:
chkconfig --level 5 服务名 on/off
- 设置network在3运行级别,关闭自启动:
chkconfig --level 3 network off
- 注意:设置完后重启生效
- 可以通过
-
systemctl
systemctl start|stop|restart|reload|status 服务名
- systemctl管理的服务在 /usr/lib/systemd/system 查看
- 查看服务开机启动状态:
systemctl list-unit-files[ | grep 服务名]
- 开启/关闭服务开机启动:
systemctl enable/disable 服务名
- 查询某个服务是否是自启动的:
systemctl is-enabled 服务名
-
firewall
- 打开端口:
firewal-cmd --permanent --add-port=端口号/协议
- 关闭端口:
firewal-cmd --permanent --remove-port=端口号/协议
- 重新载入防火墙:
firewall-cmd --reload
- 查询端口是否开放:
firewall-cmd --query-port=端口号/协议
- 打开端口:
动态监控进程
- top与ps命令很相似,它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程
top 选项
- 常用选项
选项 | 功能 |
---|---|
-d 秒数 | 指定每隔几秒更新,默认3秒 |
-i | 使top不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
- 交互操作说明
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认就是如此 |
M | 以内存使用率排序 |
N | 以PID排序 |
q | 退出top |
监控tom用户的进程:先键入u,然后输入tom后回车
终止指定的进程:先键入k,然后输入要终止进程的PID回车,再输入信号量9表示强制结束,回车即可
监控网络状态:
netstat 选项
选项 | 功能 |
---|---|
-an | 按一定顺序排列输出 |
-p | 显示哪个进程在调用 |
- 查看服务名为sshd的服务的信息:
netstat -anp | grep sshd
Linux实操篇-RPM与YUM
rpm包的管理
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHatPackageManager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
-
基本指令
- 查询已安装的rpm列表:
rpm -qa
- 查看当前系统是否安装了firefox:
rpm -qa | grep firefox
orrpm -q firefox
- 查询firefox的相关信息:
rpm -qi firefox
- 查询firefox中包含的文件:
rpm -ql firefox
- 查询文件所属的软件包:
rpm -qf 文件路径名
,如rpm -qf /etc/passwd
- 安装rpm包:
rpm -ivh rpm包全路径名称
- 卸载rpm包:
rpm -e rpm包的名称
,如果其它软件包依赖于你要卸载的软件包,卸载时则会产生错误信息。如果想要强制删除,可以增加参数--nodeps
,如rpm -e --nodeps foo
- 查询已安装的rpm列表:
-
rpm包名基本格式
- 一个rpm包名:firefox-60.2.2-1.el7.centos.x86_64
- 名称:firefox
- 版本号:60.2.2-1
- 适用操作系统:el.centos.x86_64,表示centos7.x的64位系统
- 如果是i686/i386表示32位系统,noarch表示通用
yum
yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
- 基本指令
- 查询yum服务器是否有想要安装的软件:
yum list | grep 软件名
- 安装指定的yum包:
yum install 软件名
- 查询yum服务器是否有想要安装的软件:
Shell编程
脚本以 #!/bin/bash 开头
-
脚本的常用执行方式
- 输入脚本的绝对路径或相对路径:首先要赋予脚本的+x权限,再执行脚本,比如
./hello.sh
or/root/shcode/hello.sh
-
sh 脚本名称
:这样不用赋予脚本+x权限,直接执行即可
- 输入脚本的绝对路径或相对路径:首先要赋予脚本的+x权限,再执行脚本,比如
Shell中的变量分为系统变量和自定义变量,可用
set
查看当前shell中的所有变量系统变量:HOME、PWD、SHELL、USER等等,可以用
echo $USER
输出系统变量
定义变量的规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写
定义变量:
变量名=值
撤销变量:
unset 变量
声明静态变量:
readonly 变量
(不能unset)将命令的返回值赋给变量:
A=`date`
orA=$(date)
单行注释:
#
,多行注释:<<! 内容 !
-
在 /etc/profile 中设置环境变量
-
export 变量名=变量值
: 将变量设置为环境变量/全局变量 -
source /etc/profile
:让修改后的配置信息立即生效
-
-
位置参数变量
- $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
- $*:代表命令行中所有的参数,$*把所有的参数看成一个整体
- $@:代表命令行中所有的参数,不过$@把每个参数区分对待
- $#:代表命令行中所有参数的个数
- 案例:编写一个shell脚本,在脚本中获取到命令行的各个参数信息。
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "allParameter=$*"
echo "$@"
echo "parameterAmount=$#" -
预定义变量
- $$:当前进程的进程号(PID)
- $!:后台运行的最后一个进程的进程号(PID)
- $?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确
-
运算符
-
$((运算式))
or$[运算式]
or `expr m + n` - expr \*,/,%(乘,除,取余)
- 计算(2+3)×4:
a=$(((2+3)*4))
orb=$[(2+3)*4]
or
c=`expr 2 + 3`
d=`expr $c \* 4`- 求出命令行的两个参数的和:
SUM=$[$1+$2]
-
-
条件判断
-
[ condition ]
:非空返回true,可使用$?验证(0为true,>1为false) -
[ hspEdu ]
返回true,[ ]
返回 false[ condition ] && echo OK || echo notok
条件满足,执行后面的语句 - =:字符串比较
- 两个整数的比较
符号 含义 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 - 按照文件权限进行判断
符号 含义 -r 有读的权限 -w 有写的权限 -x 有执行的权限 - 按照文件类型进行判断
符号 含义 -f 文件存在并且是一个常规的文件 -e 文件存在 -d 文件存在并是一个目录 - "ok"是否等于 "ok":
[ "ok" = "ok" ]
- 23是否大于等于22:
[ 23 -ge 22 ]
- 是否存在/root/aaa.txt文件:
[ -f /root/aaa.txt ]
-
-
流程控制
#语法
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi #案例
if [ $1 -gt 60 ]
then
echo "bigger"
elif [ $1 -lt 60 ]
then
echo "smaller"
fi #case案例
case $1 in
"1")
echo "Monday";;
"2")
echo "Tuesday";;
*)
echo "other";;
esac -
循环
- for循环
#语法1
for 变量 in 值1 值2 值3…
do
代码
done #案例1
for i in "$@"
do
echo "number is $i"
done #语法2
for (( 初始值;循环控制条件;变量变化 ))
do
代码
done #案例2
SUM=0
for (( i=1;i<=100;i++ ))
do
SUM=$[$SUM+$i]
done
echo "SUM=$SUM"- while循环
#语法
while [ 条件判断式 ]
do
代码
done #案例
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "SUM=$SUM" -
read读取控制台输入
read 选项 参数
选项 功能 -p 指定读取值时的提示符 -t 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了 #读取控制台输入一个NUM1值
read -p "input a number:" NUM1
echo "NUM1=$NUM1" #读取控制台输入一个NUM2值,并在10秒内输入
read -t 10 -p "input a number:" NUM2
echo "NUM2=$NUM2" -
系统函数
- basename
- 功能:返回完整路径最后/的部分,常用于获取文件名
- 语法:
basename 文件路径[ 文件后缀]
- 案例:
basename /root/aaa.txt
orbasename /root/aaa.txt .txt
- dirname
- 功能:返回完整路径最后/的前面的部分,常用于返回路径部分
- 语法:
dirname 文件路径
- 案例:
dirname /root/aaa.txt
- basename
-
自定义函数
function getSum(){
SUM=$[$n1+$n2]
echo "$SUM"
}
read -p "input a number:" n1
read -p "input a number again:" n2
getSum $n1 $n2