xxxxxxxxxx
# ip a //查看IP
# ifup ens33 //启动网卡,临时获取一个IP
xxxxxxxxxx
快捷键操作
tab键 //补全命令或者补全文件路径
ctrl + c //结束命令
ctrl + l //清屏
ctrl + a //定义命令的光标到首行
xxxxxxxxxx
命令 【空格】选项 【空格】 文件/目录
//选项可有可无,但是选项不同,命令的功能也不同
命令帮助:
--help
man //按q退出
# touch --help
# man touch
xxxxxxxxxx
Windows: 多根方式 C: D:
Linux: 单根 /
xxxxxxxxxx
bin 存放命令 - 普通用户的命令
boot linux启动内核文件
dev 存放设备
etc 存放系统配置文件
home 存放普通用户的家目录
root 超级管理员root的家
sbin 存放命令 - 管理员用户的命令
tmp 临时目录
var 动态信息,内存,进程
xxxxxxxxxx
绝对路径: 以根 / 开始
相对路径: 相对当前目录开始
怎么去切换目录:
xxxxxxxxxx
# cd //切换目录
. //当前目录
.. //上一级目录
练习: 切换目录操作
xxxxxxxxxx
# mkdir -p /{a/e/f/g,b/{h,j},c}
1、请使用绝对路径切换到目录g cd /a/e/f/g
2、请使用相对路径切换到a cd ../../..
3、请使用绝对路径切换到c cd /c
4、请使用相对路径切换到b cd ../b
5、请使用相对路径切换到h cd ./h ~ cd h
xxxxxxxxxx
# yum install tree -y //安装tree命令
# tree /a /b /c
/a
└── e
└── f
└── g
/b
├── h
└── j
/c
5 directories, 0 files
xxxxxxxxxx
文件增删改查
增:
touch //创建文件
# touch a.txt
删:
rm //删除
-r //删除目录
-f //强制删除,非交互
# rm -rf a.txt
改:
mv //移动和改名
cp //复制
vi/vim //编辑文件内容
# touch a.txt
# mv a.txt b.txt //把a.txt改名为b.txt
# mv b.txt /tmp/ //把b.txt移动到/tmp目录下
# cp a.txt b.txt //复制a.txt为b.txt
查:
cat //查看所有内容
-n //加上行号
head //默认是查看文件的前10行
tail //默认是查看文件的后10行
目录增删改查
增:
mkdir //创建目录
-p //创建联级目录
-v //显示创建过程
删:
rm //删除
-r //删除目录一定要加上该选项
改:
mv //移动和改名
cp //复制
-r //复制目录一定要加上-r的选项
查:
ls //列出目录有哪些内容
-l //以长格式显示
-a //显示隐藏文件
-d //配合-l 去查看目录本身信息以长格式显示
# ls -l 等于 ll
(开头第一个符号的含义)
d 目录
- 文件
l 链接文件
b 设备文件
xxxxxxxxxx
# yum install vim -y //最小化系统,默认没有vim命令
三种模式
命令模式--编辑模式--尾行模式
xxxxxxxxxx
命令模式:
1、光标定位
0 //光标定位到该行的行首
$ //光标定位到该行的行尾
gg //光标定位到第一行的行首
G //光标定位到最后一行的行首
5gg ~ 5G //把光标定位到第5行的行首
2、内容处理(以行为单位)
yy //复制光标所在行
2yy //复制2行,包括光标所在行
p //粘贴,粘贴到光标所在的下一行
dd //删除,删除光标所在行
3dd //删除3行,包含光标所在行往下
u //撤销
ctrl + r //反撤销
3、高亮关键字
/关键字
按n往下翻,按N往上翻
xxxxxxxxxx
编辑模式:
按i进入编辑模式 - 从光标的前面开始插入内容
按a进入编辑模式 - 从光标的后面开始插入内容
按o进入编辑模式 - 另起一行开始插入
xxxxxxxxxx
尾行模式:
:wq //保存退出 :x shift+zz
:q //不保存退出
加上 ! 代表强制
1、替换修改内容
:1 s/root/ROOT/g //替换第一行里面所有的root为 ROOT
:1,5 s/root/ROOT/ //替换1到5行里面出来的第一个root为ROOT
:% s/root/ROOT/g //替换所有行里面出现所有root为ROOT
(匹配的内容支持正则匹配)
:% s/[0-9]//g //删除所有行里面的数字,替换为空=删除
2、功能
: set number //添加行号
: set list //列出所有字符
xxxxxxxxxx
可视块模式:
批量添加:
ctrl + v -> 方向键选中块 -> 大写的i (shift + i) -> 输入添加的内容 -> Esc Esc键
批量删除:
ctrl + v -> 方向键选中块 -> d 或者 x 进行删除
shift + v //可视行
v //可视 (不规则)
========================================================
xxxxxxxxxx
Users and groups:
. Every process (running program) on the system runs as a particular user.
系统上的每个进程(运行的程序)都是作为特定用户运行的
. Every file is owned by a particular user.
每个文件是由一个特定的用户拥有
. Access to files and directories are restricted by user.
访问文件和目录受到用户的限制
. The user associated with a running process determines the files and directories accessible to that process.
与正在运行的进程相关联的用户确定该进程可访问的文件和目录
怎么去查看用户信息
xxxxxxxxxx
# id 用户名
-u //打印用户的UID
-g //打印用户的GID
-G //打印出用户所有组的GID
xxxxxxxxxx
centos7
管理员用户ID 0
系统用户ID 1~999
普通用户 1000~
centos6
管理员用户ID 0
系统用户ID 1~499
普通用户 500~
用户和组相关的文件
xxxxxxxxxx
/etc/passwd //存放用户信息
# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:密码位:UID:GID:用户解释:用户家目录:登入shell
/etc/group //存放组信息
# head -1 /etc/group
root:x:0:
组名:密码位:GID:
/etc/shadow //存放密码信息
/etc/skel //存放家目录结构
/var/spool/mail/用户名 //存放用户的邮件信息
如何去创建用户?
xxxxxxxxxx
# useradd 用户名
选项
-u //指定UID
-d //指定家目录
-M //不创建家目录
-g //指定创建的基本组ID或者组名称
-G //指定创建用户的附加组
-s //指定用户登入的shell, 默认是/bin/bash 允许登入, /sbin/nologin 不允许登入
【创建用户时候,会默认创建同名的基本组】
案例:
1、要求创建一个UID为888的用户叫boss
# useradd -u 888 boss
2、要求给财务qiangge创建一个UID为666,并且家目录在/qiangge
# useradd -u 666 -d /qiangge qiangge
3、要求创建一个用户nginx,只作为系统管理用户,不允许登入并且没有家目录
# useradd -u 889 -s /sbin/nologin -M nginx
4、要求创建一个用户jerry,它的附加组为IT
# useradd -G IT jerry
如何去创建组?
xxxxxxxxxx
# groupadd 组名
选项
-g //指定UID
案例:
1、创建一个GID为999的组IT
# groupadd -g 889 IT
考虑问题?
如果useradd命令失效了,要求创建一个用户rng,它的UID为8888,它的基本组为RNG,家目录为/rng,并且允许登入?
xxxxxxxxxx
# vim /etc/group
RNG:x:8888:
# vim /etc/passwd
rng:x:8888:8888:rng:/rng:/bin/bash
# cp -r /etc/skel/ /rng
如何去删除用户?
xxxxxxxxxx
# userdel 用户名
选项
-r //删除干净,邮件、家目录等等
如何去删除组?
xxxxxxxxxx
# groupdel 组名
【注意:如果组作为用户的基本组,不可被删除】
如何进行组成员管理?
【用户一定要是已经存在的】
xxxxxxxxxx
# usermod 选项 用户名
选项
-g //更换基本组
-G //更换附加组
-aG //添加新的附加组
# gpasswd 选项 组名
选项
-a //给组添加用户 ~ usermod -aG
-d //从组里删除用户
-M //给组批量去添加用户
如何切换用户?
xxxxxxxxxx
# su - 普通用户 //切换用户,也叫做完成切换
# su 普通用户 //不会切换家目录,环境没有完全切换
# exit //退出登入
如何去给用户设置密码?
xxxxxxxxxx
【root用户切换到普通用户,不需要密码;普通用户之间切换需要密码】
# passwd 用户名 //交互式修改密码
# echo 密码 | passwd --stdin 用户名 //非交互式修改用户密码
如何给普通用户提权?
xxxxxxxxxx
1、把普通用户添加到wheel组
# usermod -aG wheel 普通用户
2、修改配置文件 /etc/sudoers
# vim /etc/sudoers (添加以下内容)
普通用户 ALL=(ALL) ALL
基本权限UGO
ACL权限
高级权限 SUID SGID SKITY
特殊权限 chattr
文件权限设置: 可以赋于某个用户或组 能够以何种方式 访问某个文件
权限对象
xxxxxxxxxx
属主 - U (user)
属组 - G (group)
其他人 - O (other)
基本权限类型
xxxxxxxxxx
r - 可读 (4)
w - 可写 (2)
x - 可执行 (1)
怎么去查看文件或者目录对应的属主和属组的权限?
xxxxxxxxxx
# ls -l a.txt
-rw-r--r--. 1 root root 0 5月 9 22:32 a.txt
分析:
属主root -> rw-
属组root -> r--
其他人 -> r--
xxxxxxxxxx
# chmod 选项 文件/目录
选项
-R //递归修改-对目录生效
1、通过字母去设置
对象 赋值符 权限类型
u + r
chmod g - w file1
o = x
a
案例
1、要求修改a.txt的属主权限为-w-
# chmod u-r a.txt
2、要求修改a.txt的属组权限为rw-
# chmod g+w a.txt
3、要求给a.txt文件加上可执行权限
# chmod a+x a.txt
2、通过数字的方式设置
# ls -l a.txt
-rw-r--r--. 1 root root 0 5月 9 22:32 a.txt
权限用数字表示: 644
案例
1、修改a.txt的权限为 rwx rw- --x
# chmod 761 a.txt
xxxxxxxxxx
# chown 选项 文件/目录
选项
-R //递归修改-对目录生效
案例
1、要求修改a.txt文件的属主为jerry ?
# chown jerry a.txt
2、要求修改a.txt文件的属主为rng 属组为IT ?
# chown rng:IT a.txt
# chown rng.IT a.txt
3、要求修改a.txt文件的属组为WEB ?
# chown .WEB a.txt
【如果要分析用户对文件拥有哪些权限,一定要先考虑用户是否对文件所在的目录拥有x权限】
umask掩码计算
xxxxxxxxxx
默认的UMASK 022
计算过程
文件权限 666 rw- rw- rw-
umask 022 --- -w- -w-
rw- r-- r--
最后创建的文件 644
目录权限 777 rwx rwx rwx
umask 022 --- -w- -w-
rwx r-x r-x
最后创建的文件 755
设置umask
# umask 055
xxxxxxxxxx
设置单独用户和组对于单个文件的具体rwx基础权限
# setfacl
选项
-m //添加acl权限
-x //删除acl权限
-b //删除所有的acl权限
案例
1、给tom用户设置对a.txt有rw的权限
# setfacl -m u:tom:rw a.txt
2、给IT组设置对a.txt有rx权限
# setfacl -m g:IT:rx a.txt
3、删除tom用户给a.txt 设置的acl权限
# setfacl -x u:tom a.txt
4、删除a.txt文件上的所有acl权限
# setfacl -b a.txt
# getfacl /zabbix/ //查看文件或者目录的acl权限
getfacl: Removing leading '/' from absolute path names
# file: zabbix/ #文件名称
# owner: zabbix #属主
# group: nagcmd #属组
user::rwx #属主权限
user:tomcat:r-x #tomcat的acl权限
group::r-x #属组权限
mask::r-x
other::--- #其他人权限
问题:不小心操作 chmod a-x /usr/bin/chmod ? 怎么恢复 ?
方法1:
# setfacl -m u:root:rwx /usr/bin/chmod
# chmod a+x /usr/bin/chmod
方法2:
# cp /usr/bin/cat /usr/bin/cat.bak
# cp /usr/bin/chmod /usr/bin/cat.bak //按y进行覆盖
# cat.bak a+x /usr/bin/chmod
xxxxxxxxxx
SUID
给可执行文件设置suid权限,“类似给单个命令进行提权”
# chmod u+s
# chmod 4000
案例:
给whoami命令进行单独提权
# chmod u+s /usr/bin/whoami
# whoami //显示当然登入的用户是root
# su - zabbix
$ whoami
root //由于whoami被root用户赋予suid权限,所以相当于现在执行whoami命令还是root本身
SGID
给目录设置,任何用户在该目录下创建文件,会继承其属组
【一定要有x权限存在】
# chmod g+s 目录
# chmod 2000 目录
案例:
配置一个目录,该目录任何用户都可以进行创建文件,但是自动修改文件的属组为IT
# mkdir /test
# groupadd IT
# chown :IT /test
# chmod g+s /test
SKITY
给目录设置,任何用户都不能随意删除其他用户创建的文件
【一定要有x权限存在】
案例
创建目录,并按以下要求设置: /data 目录属于 IT 组 , 目录可以被 IT 的组成员读取、写入和访问,其他任何用户不具备这些权
限(root 用户除外) 在/data 目录中创建的文件的所属组自动变成 IT 组
# mkdir /data
# chmod g=rwx /data
# chmod o= /data
# chown :IT /data
# chmod g+s /data
xxxxxxxxxx
对root用户生效
# chattr +a file100 #只能给文件添加内容,但是不能删除内容 //日志文件
# chattr +i file200 #文件不能更改,不能删除,不能移动
# lsattr file300 #查看特殊权限
xxxxxxxxxx
【将前面命令的标准输出 传递给管道,作为后面命令的标准输入】
案例
1、打印出/etc/passwd文件的第5行
# head -5 /etc/passwd | tail -1
xxxxxxxxxx
# find 查找路径 查找条件
选项【查找条件】
-name //文件名称,支持通配符
-type //文件类型 f 普通文件 b 设备 d 目录 l 链接文
-size //文件大小 【+-】【KMG】
-group //组名
-user //用户名
-empty //空文件或者目录
-mtime //根据n天前修改内容的文件
多条件查找:
【默认是and ,需要满足两个条件】
# find 目录 条件1 条件2
【or 或,只需要满足其中一个条件】
# find 目录 条件1 -o 条件2
【! 非,不满足条件】
# find 目录 ! 条件1
查找后的处理
-ok //进行交互式,会询问
-exec //直接处理
# find 查找路径 查找条件 -exec 处理动作 {} \; //{}代表前面查找的内容, \; 代表命令结束
案例
1、查找系统内以 .html 结尾的文件
# find / -name "*.html"
2、查找系统内文件大于5M的普通文件
# find / -size +5M -type f
3、拷贝系统内所有以.conf 结尾的文件到/tmp 目录
# find / -name "*.conf" -exec cp {} /tmp \;
xxxxxxxxxx
功能:打印出匹配到"关键字"的行
写法:grep [选项] 关键字 文件
模式:
root //含有root的行
^root //以root开头的行
root$ //以root结尾的行
^$ //空行
选项:
-i //忽略大小写
-v //取反
-n //带行号打印
-q //不输出
-c //统计匹配到的行的数量
案例:
1、在/etc/passwd 文件中过滤以root开头的行
# grep "^root" /etc/passwd
2、统计系统内不能正常登入的用户有几个?
# grep -vc "bash$" /etc/passwd
xxxxxxxxxx
功能:统计行数,字符数,单词数
语法: wc [选项] 文件
选项:
-l //统计行数
-c //统计字节数
xxxxxxxxxx
功能: 将文件中的行进行排序后输出
语法: sort [选项] 文件
选项:
-n //按照数值进行排序
-r //逆序排序
-t //指定字段分隔符
-k //指定按照第几列排序
xxxxxxxxxx
功能: 过滤掉连续重复的行
语法: uniq [选项] 文件
选项
-c //统计相同的行的行数,行数写在最前面
-i //不区分大小写
-u //只打印不重复的行
xxxxxxxxxx
功能:打印列
语法:cut 选项 文件
选项:
-d //指定分隔符
-f //指定需要打印的字段(列)
xxxxxxxxxx
功能: 从标准输入中去替换、缩减或删除字符,并将结果写到标准输出
语法:tr [选项] set1 [set2]
选项:
-d //删除set1中所有的字符
-s //如果只有set1,将set1中的连续字符缩减为1个;如果有set1和set2则将set1中的字符缩减后替换成set2
-t //将set1中的字符对应替换成set2中的字符(set1中的字符不要重复)
xxxxxxxxxx
功能:将从标准输入中读取到的内容同时写入到标准输出和文件中
语法:tee [选项] 文件
选项:
-a //追加到文件中,默认是覆盖
xxxxxxxxxx
功能:将从标准输入中接收到的内容(以空格分隔)传递给后面的命令作为其参数
案例:
参数以空格隔开
# echo "tom jerry"
tom jerry
# echo "tom jerry" | xargs -n1 id
uid=8889(tom) gid=8892(tom) 组=8892(tom),8890(WEB)
uid=1001(jerry) gid=8890(WEB) 组=8890(WEB),10(wheel)
参数以换行隔开
# cat a.txt
123.txt
123.html
123.py
# cat a.txt | xargs -I {} touch {}
# ls
123.html 123.py 123.txt
xxxxxxxxxx
zip
tar
//.rar -- windows专属
压缩的好处
1、节省磁盘空间
2、节省网络带宽,加快传输速度
unzip
压缩:
【压缩后原文件不会消失,压缩包的后缀.zip】
# yum install zip -y //安装压缩命令
语法: zip [选项] 压缩包名 需要压缩文件列表
选项
-r //压缩目录
解压:
# yum install unzip -y //安装解压命令
语法:unzip 压缩包名
选项
-d //解压到哪,一般后面接目录
tar
功能: 即可打包,也可压缩
打包: 只是归档,文件的大小不会发生改变
压缩: 压缩后文件的大小会发生改变(可能会导致文件损坏)
打包/压缩语法:
# tar 选项 包名 文件列表
解包/解压语法:
# tar 选项 包名 文件列表
选项:
-c //创建归档
-x //解压
-f //后接包名,必须选项
-t //查询包中有哪些文件
-r //往包中追加文件,不适用压缩包
-z //通过gzip压缩 xxx.tar.gz
-j //通过bzip2压缩 xxx.tar.bz2 //yum install bzip2 -y 需要安装该程序
-J //通过xz压缩 xxx.tar.xz
-a //通过压缩包后缀,自动选择程序进行压缩
-C //解压时,指定解压目录
案例:
1、将/tmp 目录压缩为 tmp.tar.gz
# tar caf tmp.tar.gz /tmp
2、将tmp.tar.gz 解压到 /usr/local/
# tar xf tmp.tar.gz -C /usr/local/
####了解进程状态/生命周期
什么是进程?
进程的状态?
进程的生命周期?
xxxxxxxxxx
[bavduer@system_manager ~]$ sudo yum -y install psmisc htop atop net-tools
##查看特定进程的信息,静态 <top可以动态查看进程的信息>
[bavduer@system_manager ~]$ sudo ps aux | grep sshd ---(10000🌟)查看指定进程的静态信息
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 6775 0.0 0.4 112756 4320 ? Ss 11:13 0:00 /usr/sbin/sshd -D
root 18950 0.0 0.6 161360 6144 ? Ss 17:12 0:00 sshd: bavduer [priv]
bavduer 18952 0.0 0.2 161360 2348 ? S 17:12 0:00 sshd: bavduer@pts/0
bavduer 19057 0.0 0.0 112724 988 pts/0 S+ 18:09 0:00 grep --color=auto sshd
aux:
-ax: 显示所有进程的pid、tty、cmd、cpu占用总时间
-u: 显示用户列表中的所有硬件使用信息
grep: 可以用来过滤特定字符或特定程序名 grep "string字符串"
USER: 运行进程的用户
PID: 子进程ID -- ppid父进程ID
%CPU: CPU占用率
%MEM: 内存占用率memory
VSZ: 占用虚拟内存
RSS: 占用实际内存 驻留内存
TTY: 进程运行的终端
STAT: 进程状态
man ps (/STATE)
R 运行
S 可中断睡眠 Sleep
D 不可中断睡眠 (usually IO)
T 停止的进程/暂停⏸️
Z 僵尸进程
X 死掉的进程【了解 】
Ss s进程的领导者,父进程
S< 优先级较高的进程
SN N优先级较低的进程
R+ +表示是前台的进程组
Sl 以线程的方式运行
START: 进程启动时的时间
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名
[bavduer@system_manager ~]$ sudo ss -anptu | grep sshd (10000🌟)
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=6775,fd=3))
tcp LISTEN 0 128 :::22 :::* users:(("sshd",pid=6775,fd=4))
Netid: 网络连接协议
State: 监听状态
Recv-Q: 网络接收队列
Send-Q: 网络发送队列
Local Address:Port: 本地地址:端口号
Peer Address:Port: 远端地址:端口号
[bavduer@system_manager ~]$ sudo netstat -anptu | grep sshd (10000🌟)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6775/sshd
tcp 0 0 192.168.161.100:22 192.168.161.1:53983 ESTABLISHED 18950/sshd: bavduer
tcp6 0 0 :::22 :::* LISTEN 6775/sshd
Recv-Q Send-Q分别表示网络接收队列、发送队列. Q是Queue的缩写.
这两个值通常应该为0,如果不为0可能是有问题的
##pstree查看进程树
[bavduer@system_manager ~]$ sudo pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
[bavduer@system_manager ~]$ sudo pstree -p
systemd(1)─┬─NetworkManager(5987)─┬─{NetworkManager}(6117)
│ └─{NetworkManager}(6151)
├─agetty(6040)
├─auditd(5320)───{auditd}(5327)
├─crond(6000)
├─dbus-daemon(5924)
├─lvmetad(3135)
├─master(6954)─┬─pickup(19038)
│ └─qmgr(6960)
├─polkitd(5897)─┬─{polkitd}(5979)
│ ├─{polkitd}(5994)
│ ├─{polkitd}(5999)
│ ├─{polkitd}(6010)
│ ├─{polkitd}(6013)
│ └─{polkitd}(6033)
├─rsyslogd(6776)─┬─{rsyslogd}(6808)
│ └─{rsyslogd}(6811)
├─sshd(6775)───sshd(18950)───sshd(18952)───bash(18953)───pstree(19265)
├─systemd-journal(3115)
├─systemd-logind(5916)
├─systemd-udevd(3139)
└─tuned(6777)─┬─{tuned}(7060)
├─{tuned}(7061)
├─{tuned}(7062)
└─{tuned}(7076)
##pgrep查看特定进程的pid号, 常常与kill联合使用, 杀死问题进程
-l 同时显示进程名和PID
-o 当匹配多个进程时,显示进程号最小的那个
-n 当匹配多个进程时,显示进程号最大的那个
[bavduer@system_manager ~]$ sudo pgrep sshd --服务名或者命令名
6775
18950
18952
[bavduer@system_manager ~]$ sudo pgrep -l sshd
6775 sshdtingnfjangj
18950 sshd
18952 sshd
[bavduer@system_manager ~]$ sudo pgrep -o sshd ---显示最高的父进程
6775
[bavduer@system_manager ~]$ sudo pgrep -n sshd ---显示最低的子进程
18952
top动态查看进程信息
htop动态查看进程信息
xxxxxxxxxx
1) SIGHUP 重新加载配置
2) SIGINT 键盘中断 ^C
3) SIGQUIT 键盘退出
9) SIGKILL 强制终止
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 停止
20) SIGTSTP 暂停^Z
xxxxxxxxxx
A. kill案例1: 杀死vim进程<****** 9信号15信号>
[root@system_manager ~]# ps aux | grep vim
root 5594 0.1 0.2 151492 5120 pts/0 S+ 11:37 0:00 vim /root/b.txt
root 5609 0.0 0.0 112720 984 pts/1 S+ 11:37 0:00 grep --color=auto vim
[root@system_manager ~]# kill 5594
[root@system_manager ~]# ps aux | grep vim
root 5657 0.0 0.0 112720 984 pts/1 S+ 11:38 0:00 grep --color=auto vim
B. kill案例2: 杀死远程sshd连接
[root@system_manager ~]# ps aux | grep sshd
root 1162 0.0 0.2 112796 4296 ? Ss 10:59 0:00 /usr/sbin/sshd -D
root 3665 0.0 0.2 160884 5716 ? Ss 11:01 0:00 sshd: root@pts/1
root 5764 0.0 0.0 112708 972 pts/0 S+ 11:40 0:00 grep --color=auto sshd
[root@system_manager ~]# kill -9 1162
[root@system_manager ~]# ps aux | grep sshd
root 3665 0.0 0.2 160884 5716 ? Ss 11:01 0:00 sshd: root@pts/1
root 5795 0.0 0.0 112708 972 pts/0 S+ 11:40 0:00 grep --color=auto sshd
[root@system_manager ~]# kill -9 3665
c.killall案例:
[root@system_manager ~]# ps aux | grep vim
root 6000 0.0 0.2 151568 5232 pts/0 S+ 11:43 0:00 vim file1.txt
root 6052 0.0 0.2 151564 5224 pts/1 S+ 11:44 0:00 vim file2.txt
root 6281 0.0 0.0 112720 980 pts/3 S+ 11:46 0:00 grep --color=auto vim
[root@system_manager ~]# killall vim
[root@system_manager ~]# ps aux | grep vim
root 6313 0.0 0.0 112720 980 pts/3 S+ 11:46 0:00 grep --color=auto vim
d.pkill案例:
[root@system_manager ~]# w
17:29:06 up 21 min, 4 users, load average: 0.00, 0.03, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 107月18 ?xdm? 28.49s 0.26s /usr/libexec/gnome-session-binary --sessio
root pts/0 10.18.41.54 17:18 1:54 0.04s 0.04s -bash
root pts/1 10.18.41.54 17:10 1:46 0.06s 0.06s -bash
root pts/2 10.18.41.54 17:11 2.00s 0.12s 0.01s w
[root@system_manager ~]# pkill -9 -t pts/0
[root@system_manager ~]# w
17:29:35 up 22 min, 3 users, load average: 0.00, 0.03, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 107月18 ?xdm? 28.43s 0.26s /usr/libexec/gnome-session-binary --sessio
root pts/1 10.18.41.54 17:10 2:15 0.06s 0.06s -bash
root pts/2 10.18.41.54 17:11 7.00s 0.13s 0.02s w
xxxxxxxxxx
1、前台运行:
# firefox 192.168.1.250
会发现该程序一直占用终端,其他命令不能够再在这个终端运行
2、后台运行
1)命令执行的时候,直接将其放置于后台运行
# firefox 192.168.1.250 &
[1] 6222
后台运行不会占用执行命令的终端,用户仍然可以使用这个终端做操作
2)对于一个已经运行的命令,如何将其放置于后台 ctrl+z
# firefox 192.168.1.250
[1] Done firefox 192.168.1.250
[2]+ Stopped firefox 192.168.1.250
ctrl+z将前台进程放置于后台,但是该进程在后台是停止的状态
# jobs //查看后台进程运行状态
[2]+ Stopped firefox 192.168.1.250
# bg 2 //激活后台进程
[2]+ firefox 192.168.1.250 &
# jobs
[2]+ Running firefox 192.168.1.250 &
bg 任务编号 : 指定任务在后台运行
fg 任务编号 : 将后台运行的命令变成前台运行
# fg 2
firefox 192.168.1.250
注意:不管你是前台运行,还是后台运行,只要终端一关闭,进程就停止了。
那么如何让一个命令或者程序脱离终端?
使用nohup命令。
# nohup firefox 192.168.1.250 &
[1] 6537
# nohup: ignoring input and appending output to `nohup.out' //按回车
xxxxxxxxxx
谦让值:nice
作用:指定或者调整用户进程的nice值
nice值越高,该进程抢占资源的能力越弱
nice值越低,该进程抢占资源的能力越强
范围:-20~19
相关命令
nice -- 运行时直接设置nice值
用法: nice -n 数字 command
renice -- 对于已经运行的,调整nice值
用法: renice 数字 PID
在Linux中,不同的发行版软件管理的方式可能不一样,具体来说,主要分为两大派:
RPM: Rpm Package Manager
CentOS系统软件安装三种方式
xxxxxxxxxx
rpm:安装简单,可定制性差,一台机器上不能装多个相同的软件,稳定性高源码包
编译安装:安装复杂,可定制性好,一台机器上可安装多个相同的软件
二进制包:安装简单,可定制性差,一台机器可安装多个相同的软件,稳定性较高
怎样获取rpm包
xxxxxxxxxx
在网络上下载rpm包: http://rpmfind.net/ //下载不常见的rpm包
网络yum源中获取 //基础源CentOS,扩展源epel
镜像中获取:在光盘镜像sr0中的Packages目录下
怎样查看光盘的内容
xxxxxxxxxx
1.将光盘连接上
2.将光盘挂载到相应的挂载点
# mount /dev/sr0 /mnt
3.通过挂载点访问光盘内容
# ls /mnt
rpm包介绍
xxxxxxxxxx
zsh-5.8.2-25.el7.x86_64.rpm 包全名
zsh 包名
5.8.2:主版本号.次版本号.源程序的发行号
25: rpm发行号
el7:平台一般来说,不同平台的包不兼容
x86_64:架构
x86_64: 64位
i686: 32位
noarch:通用
RPM包管理
rpm工具
xxxxxxxxxx
安装
# rpm -ivh 包全名 //安装软件包
# rpm -Uvh 包全名 //升级安装包,如果本来没有安装,则安装
卸载
# rpm -e 包名
--nodeps //只卸载当前软件,不检查依赖关系
查询
查询已安装的:
查询指定软件包有没有安装: # rpm -q包名
查询所有已安装的软件包: # rpm -qa //可以配合grep命令
查询已安装的软件包安装的所有文件: # rpm -ql 包名
查询已安装的软件包安装的配置文件: # rpm -qc 包名
通过文件名反查文件是由哪个包安装的: # rpm -qf文件的绝对路径
查询未安装的:
查询未安装的软件包将会安装的所有文件: # rpm -qpl 包全名
查询未安装的软件包将会安装的配置文件: # rpm -qpc 包全名
扩展:
``反引:等价于$(),引用命令的输出结果,``内部一定是命令
例:
#rpm -qf `which useradd`
shadow-utils-4.1.5.1-24.el7.x86_64
# rpm -qf $(which useradd)
shadow-utils-4.1.5.1-24.el7.x86_64
xxxxxxxxxx
rpm包无法自动解决依赖性问题,需要手动解决,非常麻烦..
yum可以解决软件包之间的依赖问题
YUM工具
yum仓库
xxxxxxxxxx
1.多个rpm包
2.记录这些包及包之间的依赖关系- repodata目录
配置yum源
本地源
xxxxxxxxxx
要使用yum仓库,需要先进行配置
主配置文件:/etc/yum.conf
[root@localhost mnt]# tail -2 letc/yum.conf
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d//仓库可以定义在这里或/etc/yum.repos.d目录下以.repo结尾的单独的文件中
xxxxxxxxxx
实验:配置本地yum仓库
配置过程:
1、将系统光盘sr0挂载到/mnt
2、关闭或者备份其他仓库
# cd /etc/yum.repos.d/
# mkdir repo
# mv *.repo repo/
3、创建yum配置文件
# vim local.repo
[local] //仓库ID
name=local disk //仓库名称(描述)
baseurl=file://mnt //仓库的URl 或者来源
enabled=1 //开关,0为关 1为开
gpgcheck=0 //秘钥是否检查
4、检验
# yum repolist
【注意编写yum源文件】
1、一定要写在/etc/yum.repos.d/目录下
2、一定要以.repo 结尾,否则不生效
网络源
常用的网络源:centos官方源,epel源
国外源下载比较慢,建议使用国内镜像源:如阿里云,清华大学,网易... 直接搜索xxx开源镜像站
xxxxxxxxxx
例如:
# cat /etcyum.repos.d/base.repo
[base]
name=centos http base
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0
# cat /etc/yum.repos.d/epel.repo
[epel]
name=centos http epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enabled=1
gpgcheck=0
或者通过阿里云镜像站给的命令:
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
YUM命令的使用
xxxxxxxxxx
清理yum缓存:
# yum clean all
缓存软件包信息:
提高搜索/安装软件的速度
# yum makecache
查询yum源信息:
# yum repolist
查找软件:
# yum search mysql
此命令会搜索到系统已经安装和yum源里没有安装的软件信息,可以用他简单测试yum是否好用
查看软件依赖性关系:
# yum deplist httpd
查看文件属于哪个软件
# yum provides rz
查看系统已经安装好的软件和没有安装的软件(源里存在即可查到):
# yum list
查看系统已经安装好的软件组和没有安装的软件组(源里存在即可查到):
# yum grouplist
查看软件组包含的具体软件:
# yum groupinfo
安装软件组:
# yum groupinstall ‘软件组名称’
如果软件或者软件组名称内有空格,要给空格转义或者加引号
安装软件:
# yum install 软件名称
# yum install mysql mysql-server -y //-y跳过确认提示直接安装
重装:
# yum reinstall 软件名
卸载软件:
# yum erase mysql-server
# yum remove mysql-server
# yum -y remove mysql-server
打开Yum缓存功能:安装完软件之后,软件不会被删除(默认安装完之后,不会保留安装包)
# vim /etc/yum.conf 修改下面参数的值为1,软件会被保存到cachedir指定的目录下
keepcache=1
自己制作yum源
#mkdir /myyum
把想用yum安装的软件包拷贝到目录下
#createrepo /myyum //此目录就可以作为yum源了。