复习 Linux 常用命令 2
1、组和权限管理
linux 中每个文件有所有者、所在组、其他组的概念。一般文件的创建者,就是这个文件的所有者。
1.1、ls 指令
ls 指令 可以查看当前目录中的文件情况,通过选项能查看目录中各文件的所有者等信息。
# 以长格式显示当前目录中的文件和目录
ls -l
# 显示当前目录中的所有文件和目录,包括隐藏文件
ls -a
# -d 只列出目录(不递归列出目录内的文件)。
ls -d
# 显示所有文件及目录 (. 开头的隐藏文件也会列出)
ls -lh
# 按照修改时间排序显示当前目录中的文件和目录
ls -t
# -r 倒序显示文件和目录。
ls -r
# 递归显示当前目录中的所有文件和子目录
ls -R
# 显示/etc/passwd文件的详细信息
ls -l /etc/passwd
# ls -l 指令示例
[root@hecs-144144 local]# ls -l
total 56
-rwxrwxrwx 1 root root 3832 May 21 00:05 agent_install.sh
drwxrwxrwx. 2 root root 4096 Jul 8 2022 bin
在使用 ls -l 命令时,第一列的字符表示文件或目录的类型和权限。其中第一个字符表示文件类型,例如:
字符 | 说明 |
---|---|
- | 表示普通文件 |
d | 表示目录 |
l | 表示符号链接 |
c | 表示字符设备文件 |
b | 表示块设备文件 |
s | 表示套接字文件 |
p | 表示管道文件 |
在使用 ls -l 命令时,第一列的其余 9 个字符表示文件或目录的访问权限,分别对应三个字符一组的 rwx 权限.
字符 | 说明 |
---|---|
r | 表示读取权限(read),可以读取、查看 |
w | 表示写入权限(write),可以修改,但是不代表可以删除该文件。删除一个文件的前提条件是,对该文件所在目录有写权限,才能删除该文件。 |
x | 表示执行权限(execute) |
- | 表示没有对应权限 |
在使用 ls -l 命令时,第一列的其余 9 个字符表示文件或目录的访问权限,前三个字符表示所有者的权限 ,中间三个字符表示所属组的权限 ,后三个字符表示其他用户的权限 。例如:
ls -l 命令中,第三列和第四列分别表示文件/目录,所属的所有者和所在组。
1.2、chown 指令
# chown 指令能修改文件所有者。
chown 用户名 文件名
1.3、chgrp 指令
# chgrp 指令能修改文件所在组
chgrp 组名 文件名
1.4、chmod 指令
chmod 指令有两种方式,可以修改文件或目录的权限。
-
第一种方式:+、-、= 变更权限
-
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
-
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o 的总和)
-
# chmod 指令 方式一示例:
chmod u=rwx,g=rx,o=x 文件目录名
chmod o+w 文件目录名
chmod a-x 文件目录名
# 将文件 file1.txt 设为所有人皆可读取
chmod ugo+r file1.txt
# 将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *
模式 | 名字 | 说明 |
---|---|---|
r | 读 | 设置为可读权限 |
w | 写 | 设置为可写权限 |
x | 执行权限 | 设置为可执行权限 |
X | 特殊执行权限 | 只有当文件为目录文件,或其他类型用户有可执行权限时,才将文件权限设置可执行 |
s | setuid/gid | 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 |
t | 粘贴位 | 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 |
- 第二种方式:通过数字变更权限(八进制语法)
# 下面指令等同于 chmod u=rwx,g=rx,o=x 文件目录名
chmod 751 文件目录名
# 下面指令等同于 chmod ug=rwx,o=x file
chmod 771 file
# | 权限 | rwx |
---|---|---|
7 | 读+写+执行 | rwx |
6 | 读+写 | rw- |
5 | 读+执行 | r-x |
4 | 只读 | r– |
3 | 写+执行 | -wx |
2 | 只写 | -w- |
1 | 只执行 | –x |
0 | 无 | — |
1.5、chown 指令
# chown 指令用于修改 文件所有者
chown [选项] 新的文件所有者ID 文件目录
# 将 file 的所有者修改为 newowner
chown newowner file
# 将 file 的所有者修改为 newowner,所有组修改为 newgroup
chown newowner:newgroup file
# 将当前前目录下的所有文件与子目录的所有者修改为 runoob,所有组修改为 runoobgroup
chown -R runoob:runoobgroup *
chown 常用选项
选项 | 说明 |
---|---|
-c | 显示更改的部分的信息 |
-f | 忽略错误信息 |
-h | 修复符号链接 |
-v | 显示详细的处理信息 |
-R | 处理指定目录以及其子目录下的所有文件 |
1.6、chgrp 指令
# chgrp 指令,改变文件的所在组
chgrp newgroup file
2、crond 任务调度
crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意: 新创建的cron任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启cron来马上执行。
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等。
- 个别用户工作:个别用户可能希望执行某些程序。如对mysql数据库的备份。
2.1、crontab
# crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
# -u user 指设定指定user的时程表,前提是你必须要有其权限(比如说是root), 才能指定他人的时程表。
# 如果不使用 -u user 的话,就是表示设定自己的时程表。
# 语法
crontab [ -u user ] file
# 或
crontab [ -u user ] { -l | -r | -e }
# 终止任务调度
crontab -r
# 列出当前有哪些任务调度
crontab -l
# 重启任务调度
service crond restart
参数说明:
参数 | 说明 |
---|---|
-e | 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) |
-r | 删除目前的时程表 |
-l | 列出目前的时程表 |
[root@hecs-144144 ~]# crontab -l
no crontab for root
2.2、时间格式
# f1表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。
# program 表示要执行的程序。
f1 f2 f3 f4 f5 program
# 示例:
# 每一分钟执行一次 /bin/ls:
* * * * * /bin/ls
# 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
# 每两个小时重启一次apache
0 */2 * * * /sbin/service httpd restart
# 每天7:50开启ssh服务
50 7 * * * /sbin/service sshd start
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
5个占位符说明
项目 | 含义 | 范围 |
---|---|---|
第一个 “*” | 一小时当中的第几分钟 | 0-59 |
第二个 “*” | 一天当中的第几小时 | 0-23 |
第三个 “*” | 一个月当中的第几天 | 1-31 |
第四个 “*” | 一年当中的第几月 | 1-12 |
第五个 “*” | 一周当中的星期几 | 0-7(0和7都代表星期天) |
特殊符号说明
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个*表示一个小时中每分钟都执行一次。 |
, | 代表不连续的时间。比如 “0 8,12 * * *” 表示每天8:00 ,12:00 执行。 |
- | 代表连续的时间范围。比如"0 5 * * 1-6" 表示每周1到周6的 5:00 执行。 |
*/n | 代表每隔多久执行一次。比如"*/10 * * * *"表示每隔十分钟执行一次。 |
-
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推。
-
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推。
-
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推。
-
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推。
常用时间格式
执行时间 | 时间格式 |
---|---|
每分钟定时执行一次 | * * * * * |
每小时定时执行一次 | 0 * * * * |
每天定时执行一次 | 0 0 * * * |
每周定时执行一次 | 0 0 * * 0 |
每月定时执行一次 | 0 0 1 * * |
每月最后一天定时执行一次 | 0 0 L * * |
每年定时执行一次 | 0 0 1 1 * |
2.3、脚本无法执行问题
如果我们使用 crontab 定时执行脚本无法执行,但如果直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。
解决方法:
-
1、所有命令需要写成绝对路径形式,如: /usr/local/bin/docker
-
2、在 shell 脚本开头使用以下代码:
#!/bin/sh . /etc/profile . ~/.bash_profile
-
3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh
2.4、案例
每分钟将系统时间写到 /usr/zim/cron_test.log 文件中
# 第一步: 新建 /usr/zim/crontab_test.sh 文件
[root@hecs-144144 zim]# cat crontab_test.sh
date>>/usr/zim/cron_test.log
# 第二步:使用 chmod 744 /usr/zim/crontab_test.sh 赋权。 我这里使用的是 777
[root@hecs-144144 zim]# ls -l
total 8
-rwxrwxrwx 1 root root 30 Aug 27 20:14 crontab_test.sh
-rwxrwxrwx 1 root root 116 Aug 27 20:22 cron_test.log
# 第三步:输入 crontab -e 命令 进入后,点击i ,
# 再输入 */1 * * * * /usr/zim/crontab_test.sh
# 再点击 ESC ,输入 :wq
# 出现以下即成功创建
[root@hecs-144144 zim]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
# 第四步:重启任务调度
service crond restart
# 第五步:列出当前有哪些任务调度
[root@hecs-144144 zim]# crontab -l
*/1 * * * * /usr/zim/crontab_test.sh
# 第六步:查看日志验证
[root@hecs-144144 zim]# tail -f cron_test.log
Sun Aug 27 20:19:26 CST 2023
Sun Aug 27 20:20:26 CST 2023
Sun Aug 27 20:21:26 CST 2023
Sun Aug 27 20:22:27 CST 2023
# 第七步:删除当前任务
[root@hecs-144144 zim]# crontab -r
# 第八步:再列出当前有哪些任务调度
[root@hecs-144144 zim]# crontab -l
no crontab for root
3、进程管理
3.1、ps 指令
# 查看系统执行的进程,使用 ps 指令
ps [选项]
# 显示当前终端的所有进程信息
ps -a
# 以用户的格式显示进程信息
ps -u
# 显示root进程用户信息
ps -u root
# 显示后台进程运行参数
ps -x
# 一般来讲使用的参数是 ps -aux
ps -aux
[root@myCentos6 ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.0 19344 1548 ? Ss 08:07 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 08:07 0:00 [kthreadd]
# 查找指定进程格式:
# ps -ef 是以全格式显示当前所有的进程 -e 显示所有进程 -f 全格式
ps -ef | grep 进程关键字
# 查找指定进程格式:
ps -aux | grep 进程关键字
ps 显示的信息选项
字段 | 说明 |
---|---|
PID | 进程识别号 |
TTY | 终端机号 |
TIME | 此进程所消CPU时间 |
COMMAND | 进程执行时的命令行,如果过长会被截断显示 |
%CPU | 占用的cpu百分比 |
%MEM | 占用内存的百分比 |
VSZ | 使用的虚拟内存 |
STAT | 进程的状态:S-休眠,s-该进程是会话的先导进程,N-进程拥有比普通进程优先级更低的优先级,r-运行,D-短期等待,Z-僵死进程,T-被跟踪或被停止等等 |
START | 启动时间 |
3.2、kill 和 killall 指令
# kill 指令通过进程号终止进程
kill [选项] 进程号
# -9 表示强迫进程立即停止
kill -9 进程号
# killall 通过进程名称杀死进程,支持通配符
killall 进程名称
3.3、pstree 指令
# 查看进程树
pstree [选项]
# 常用选项
-p :显示进程的PID
-u :显示进程的所属用户
3.4、service 服务管理指令
在 Centos7.0后,不再使用 service ,而是使用 systemctl
service 服务名 [start|stop|restart|reload|status]
# 查看当前防火墙的状况(state NEW tcp dpt:22 ),关闭、重启防火墙
service iptables status
[root@myCentos6 ~]# service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
# 关闭防火墙
service iptables stop
# 启动防火墙
service iptables start
3.5、chkconfig 指令
通过 chkconfig 指令,可以给每个服务的各个运行级别设置自启动/关闭.
注意:chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot 才能生效。
# 查看服务
chkconfig -- list | grep XXX
# chkconfig 服务名 --list
chkconfig iptables --list
[root@myCentos6 ~]# chkconfig iptables --list
iptables 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
# chkconfig --level 5 服务名 on/off
# 将 sshd 服务在运行级别为5 的情况下,不用自启动
chkconfig --level 5 sshd off
# 当运行级别为5 时,关闭防火墙
chkconfig --level 5 iptables off
# 在所有运行级别下,开启防火墙
chkconfig iptables on
服务的运行级别(runlevel)
Linux 系统有7种运行级别,常用的级别是3 和5
-
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
-
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录。
-
运行级别2:多用户状态(没有NFS),不支持网络。
-
运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令模式。
-
运行级别4:系统未使用,保留
-
运行级别5:X11控制台,登录后进入图形 GUI模式
-
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。
3.6、top 指令
top 指令是常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的接口,帮助我们去查看系统执行时的进程、线程和系统参数的信息。
# 基本语法
top [选项]
# 指定系统状态更新的时间(每隔10s 自动更新,默认是3s)
top -d 10
[root@myCentos6 ~]# top -d 10
top - 09:54:37 up 18 min, 2 users, load average: 0.22, 0.27, 0.23
Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2038376k total, 729048k used, 1309328k free, 28480k buffers
Swap: 2097148k total, 0k used, 2097148k free, 376260k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13487 root 20 0 173m 7964 4540 S 0.2 0.4 0:01.40 vmtoolsd
14617 root 20 0 293m 17m 14m S 0.2 0.9 0:01.46 vmtoolsd
19 root 20 0 0 0 0 S 0.1 0.0 0:01.00 events/0
14996 root 20 0 15032 1312 940 R 0.1 0.1 0:00.11 top
1 root 20 0 19348 1544 1228 S 0.0 0.1 0:01.87 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.02 migration/0
总体系统信息:
- uptime:系统的运行时间和平均负载。
- tasks:当前运行的进程和线程数目。
- CPU:总体 CPU 使用率和各个核心的使用情况。
- 内存(Memory):总体内存使用情况、可用内存和缓存。
进程信息:
列头 | 说明 |
---|---|
PID | 进程的标识符 |
USER | 运行进程的用户名。 |
PR(优先级) | 进程的优先级。 |
NI(Nice值) | 进程的优先级调整值。 |
VIRT(虚拟内存) | 进程使用的虚拟内存大小。 |
RES(常驻内存) | 进程实际使用的物理内存大小。 |
SHR(共享内存) | 进程共享的内存大小。 |
%CPU | 进程占用 CPU 的使用率。 |
%MEM | 进程占用内存的使用率。 |
TIME+ | 进程的累计 CPU 时间。 |
选项说明
选项 | 功能 |
---|---|
-d | <秒数> :指定 top 命令的刷新时间间隔,单位为秒,默认3秒。 |
-i | 不显示闲置(idle)或无用的进程。 |
-p | <进程ID> :仅显示指定进程ID的信息 |
-c | 显示完整的命令行而不截断。 |
-n | <次数> :指定 top 命令运行的次数后自动退出。 |
交互操作说明
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认就是此项 |
M | 以内存的使用率排序 |
N | 以PID 排序 |
q | 退出top |
k | 输入k回车,再输入要结束的进程ID号,可以终止指定的进程。 |
3.7、netstat 指令
# netstat 命令用于显示网络状态。
# 基本语法
netstat [选项]
# 常用选项
-an : 按一定的顺序排列输出
-p : 显示哪个进程在调用
[root@hecs-144144 ~]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 20570/./redis-serve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 461774/sshd
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 3 [ ] DGRAM 11550 1/systemd /run/systemd/notify
unix 2 [ ] DGRAM 11552 1/systemd /run/systemd/cgroups-agent
unix 2 [ ACC ] STREAM LISTENING 108115 25251/mysqld /var/lib/mysql/mysql.sock
Active Bluetooth connections (servers and established)
Proto Destination Source State PSM DCID SCID IMTU OMTU Security
Proto Destination Source State Channel
# netstat -anp | grep nacos
4、软件包管理
4.1、rpm 包管理
RPM软件包管理器Red-Hat package Manager,详细记录软件包安装、卸载、升级等变化信息。
# 查询已安装的 rpm 列表
rpm -qa
[root@myCentos6 ~]# rpm -qa
system-config-firewall-base-1.2.27-7.2.el6_6.noarch
m17n-db-oriya-1.5.5-1.1.el6.noarch
avahi-ui-0.6.25-15.el6.x86_64
# 查询具体已安装的包
rpm -qa | grep xxx
[root@myCentos6 ~]# rpm -qa | grep setup
setup-2.8.14-20.el6_4.1.noarch
setuptool-1.19.9-4.el6.x86_64
cryptsetup-luks-libs-1.2.0-11.el6.x86_64
system-setup-keyboard-0.7-4.el6.x86_64
# 查询软件包是否安装
rpm -q 软件包名
# 查询软件包信息
rpm -qi 软件包名
[root@myCentos6 ~]# rpm -qi setup
Name : setup Relocations: (not relocatable)
Version : 2.8.14 Vendor: CentOS
Release : 20.el6_4.1 Build Date: 2013年10月02日 星期三 17时06分19秒
Install Date: 2023年08月24日 星期四 01时10分42秒 Build Host: c6b10.bsys.dev.centos.org
Group : System Environment/Base Source RPM: setup-2.8.14-20.el6_4.1.src.rpm
Size : 666477 License: Public Domain
Signature : RSA/SHA1, 2013年10月02日 星期三 19时15分22秒, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : https://fedorahosted.org/setup/
Summary : A set of system configuration and setup files
Description :
The setup package contains a set of important system configuration and
setup files, such as passwd, group, and profile.
# 查询文件所属的软件包 例子:rpm -qf /etc/paswd
rpm -qf 文件全路径名
# 卸载 rpm 包 基本语法(如果其他软件依赖当前需要卸载的软件包,卸载时会产生错误信息)
rpm -e 包名称
# 卸载示例:卸载火狐浏览器
rpm -e firefox
# 安装 rpm 包,基本语法
rpm -ivh 包的全路劲名称
# 参数说明
i : install 安装
v : verbose 提示
h : hash 进度条
# 安装 firefox rpm包示例
rpm -ivh firefox-45.0.1-1.el6.centos.x86_64.rpm
4.2、yum 前端软件包管理器
yum 是一个shell 前端软件包管理器,yum 管理的前提是可以联网。
# 查询 yum 服务器是否有需要安装的软件列表
yum list | grep xx
# 示例:
yum list | grep firefox
# 下载安装指定的 yum 包
yum install xxx
.