Linux
systemd
systemctl 管理服务命令
命令(systemctl 参数 服务名) | 作用 |
---|---|
systemctl start foo | 开启服务 |
systemctl stop foo | 关闭服务 |
systemctl restart foo | 重启服务 |
systemctl reload foo | 重新加载服务配置文件(不终止服务) |
systemctl status foo | 查看服务 |
systemctl enable foo | 开机自启动 |
systemctl disabel foo | 开机不自动启动 |
systemctl is-enabled foo | 查看该服务是否为开机自动启动 |
systemctl list-unit-files --type=service | 查看各个级别下服务的启动与禁用情况 |
常用系统工作命令
命令名称 [命令参数] [命令对象]
echo
echo [字符串|$变量]
echo命令用于在终端输出字符串或者变量提取后的值
[linuxprobe@linuxprobe Desktop]$ echo linux
linux
[linuxprobe@linuxprobe Desktop]$ echo $SHELL
/bin/bash
date
date [选项][+指定的格式]
date命令用于显示及设置系统的时间或者日期
参数 | 作用 |
---|---|
%t | 跳格 [类似Tab健] |
%Y | 年 |
%m | 月 |
%d | 日 |
%H | 小时(24小时制) |
%I(大写i) | 小时(12小时制) |
%M | 分钟 |
%S | 秒 |
%j | 今年中的第几天 |
按默认格式显示当前时间
[linuxprobe@linuxprobe Desktop]$ date
Fri Aug 14 18:26:02 CST 2020
按照“年-月-日 时:分:秒”的格式显示当前时间
[linuxprobe@linuxprobe Desktop]$ date "+%Y-%m-%d %H:%M:%S"
2020-08-14 18:26:05
设置时间
[root@linuxprobe ~]# date -s "20180630 9:00:00"
Sat Jun 30 09:00:00 CST 2018
[root@linuxprobe ~]# date
Sat Jun 30 09:00:01 CST 2018
可用来查询今天是当年中的第几天。这个参数能够很好的地区分备份时间的新旧,即数字越大,越靠近当前的时间。
[root@linuxprobe ~]# date
Fri Aug 14 18:39:09 CST 2020
[root@linuxprobe ~]# date "+%j"
227
reboot
reboot命令用于重启操作系统,由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用root管理员来重启
[root@linuxprobe ~]# reboot
poweroff
poweroff命令用于关闭系统,由于关闭计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用root管理员来关闭
[root@linuxprobe ~]# poweroff
wget
wget [参数] 下载地址
wget 命令用于在终端下载网络文件
参数 | 作用 |
---|---|
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断电续传 |
-p | 下载页面内所有资源,包括图片、视频 |
-r | 递归下载 |
ps命令
ps [参数]
ps 命令用于查看系统中的进程状态
参数 | 作用 |
---|---|
-a | 显示所有进程(包括其他用户的进程) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
5种常见的进程状态,被别是运行、中断、不可中断、僵死和停止。
- R(运行):进程正在运行或在运行队列中等待。
- S(中断):进程处于休眠中,当某个条件形成后或者接到信号时,则脱离该状态。
- D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
- Z(僵死):进程已经终止,但进程描述符依然存在,直到父进程调用 wait4() 系统函数后将进程释放。
- T(停止):进程收到停止信号后停止运行。
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
---|---|---|---|---|---|---|---|---|---|---|
进程的所有者 | 进程ID号 | 运算器占用率 | 内存占用率 | 虚拟内存使用量(单位是KB) | 占用的固定内存量(单位是KB) | 所在终端 | 进程状态 | 被启动的时间 | 实际使用CPU的时间 | 命令名称与参数 |
top
top命令用于动态地监视进程活动与系统负载等信息
[root@linuxprobe ~]# top
前5行的系统整体的统计信息其所代表的含义
- | - | - | - | - |
---|---|---|---|---|
系统时间 | 运行时间 | 登录终端数 | 系统负载 | |
进程总数 | 运行中的进程数 | 睡眠中的进程数 | 停止中的进程数 | 僵死的进程数 |
用户占用资源百分比 us | 系统内核占用资源百分比 sy | 改变过优先级的进程资源百分比 ni | 空闲的资源百分比 id | |
物理内存总量 | 内存使用量 | 内存空闲量 | 作为内核缓存的内存量 | |
虚拟内存总量 | 虚拟内存使用量 | 虚拟内存空闲量 | 已被提前加载的内存量 |
load average (系统负载): 三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低。
pidof
pidof [参数] [服务名称]
pidof命令用于查询某个指定服务进程的PID值
[root@linuxprobe ~]# pidof sshd
1715
kill
kill [参数] [进程PID]
kill命令用于终止某个指定PID的服务进程
[root@linuxprobe ~]# kill 1715
killall
killall [参数] [进程名称]
killall命令用于终止某个指定名称的服务所对应的全部进程
[root@linuxprobe ~]# pidof httpd
13581 13580 13579 13578
[root@linuxprobe ~]# killall httpd
[root@linuxprobe ~]# pidof httpd
[root@linuxprobe ~]#
如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个 & 符号,这样命令将进入系统后台来执行。
系统状态检测命令
ifconfig
ifconfig [网络设备] [参数]
ifconfig命令用于获取网卡配置与网络状态等信息
uname
uname [-a]
uname命令用于查看系统内核与系统版本等信息。
查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
[root@linuxprobe ~]# uname -a
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
如果要查看当前系统版本的详细信息,则需要查看redhat-release文件。
[root@linuxprobe ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
uptime
uptime命令用于查看系统的负载信息
它显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况;负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。
[root@linuxprobe ~]# uptime
00:18:55 up 5:15, 2 users, load average: 0.07, 0.07, 0.05
free
free [-h]
free命令用于显示当前系统中内存的使用量信息。
[root@linuxprobe ~]# free -h
total used free shared buffers cached
Mem: 1.8G 1.7G 91M 10M 1.4M 534M
-/+ buffers/cache: 1.2G 627M
Swap: 2.0G 0B 2.0G
主要关注已用量和可用量
内存总量 | 已用量 | 可用量 | 进程共享的内存量 | 磁盘缓存的内存量 | 缓存的内存量 | |
---|---|---|---|---|---|---|
total | used | free | shared | buffers | cached | |
Mem(内存) | 1.8G | 1.7G | 91M | 10M | 1.4M | 534M |
-/+ buffers/cache | 1.2G | 627M | ||||
Swap(交换分区) | 2.0G | 0B | 2.0G |
who
who [参数]
who命令用于查看当前登入主机的用户终端信息
[root@linuxprobe ~]# who
root :0 2020-08-18 13:25 (:0)
root pts/0 2020-08-18 13:26 (:0)
登录的用户名 | 终端设备 | 登录到系统的时间 |
---|---|---|
root | :0 | 2020-08-11 11:35 (:0) |
root | pts/0 | 2020-08-11 11:36 (:0) |
last
last [参数]
last命令用于查看所有系统的登录记录
[root@linuxprobe Desktop]# last
root pts/0 :0 Tue Aug 18 13:26 still logged in
root :0 :0 Tue Aug 18 13:25 still logged in
(unknown :0 :0 Tue Aug 18 13:24 - 13:25 (00:00)
reboot system boot 3.10.0-123.el7.x Tue Aug 18 21:24 - 13:29 (-7:-55)
linuxpro pts/0 :0 Tue Aug 11 11:36 - 13:24 (7+01:48)
linuxpro :0 :0 Tue Aug 11 11:35 - 13:24 (7+01:49)
(unknown :0 :0 Tue Aug 11 11:32 - 11:35 (00:02)
reboot system boot 3.10.0-123.el7.x Tue Aug 11 19:30 - 13:24 (6+17:53)
wtmp begins Tue Aug 11 19:30:47 2020
history
history [-c]
history命令用于显示历史执行过的命令
使用 -c 参数则会清空所有命令历史记录。使用 " !编码数字 " 的方式来重复执行某一次的命令。
历史命令会被保存到用户家目录中的 .bash_history文件中。Linux 系统中以点( . )开头的文件均是隐藏文件,这些文件大多数为系统服务文件,可以用 cat 命令查看其文件内容。
[root@linuxprobe Desktop]# history
1 ls
2 pwd
3 cd /ect
4 date -j
5 date "+%j"
6 date
7 date -s "20200814 18:39:00"
8 date "+%j"
9 date
10 date "+%j"
11 wget http://www.linuxprobe.com/docs/LinuxProbe.pdf
12 ps -aux
13 top
14 pidof sshd
15 kill 1715
16 pidof sshd
17 systemctl start sshd
18 pidof sshd
19 pidof httpd
20 systemctl start hhtpd
21 ifconfig
22 uname -a
23 cat /etc/redhat-release
24 uptime
25 free -h
26 cat /var/log/messages
27 more /var/log/me
28 more /var/log/messages
29 who
30 who
31 last
32 history
[root@linuxprobe Desktop]# !30
who
root :0 2020-08-18 13:25 (:0)
root pts/0 2020-08-18 13:26 (:0)
[root@linuxprobe Desktop]# history -c
[root@linuxprobe Desktop]# history
1 history
sosreport
sosreport 命令用于收集系统配置及架构信息并输出诊断文档
当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。
工作目录切换命令
pwd
pwd [选项]
pwd命令用于显示用户当前所处的工作目录
[root@linuxprobe Desktop]# pwd
/root/Desktop
cd
cd [目录名称]
cd命令用于切换工作路径
cd- | cd .. | cd~ |
---|---|---|
返回到上一次所在的目录 | 进入上级目录 | 切换到当前用户的家目录 |
[root@linuxprobe var]# cd log
[root@linuxprobe log]# cd ~
[root@linuxprobe ~]# cd -
/var/log
[root@linuxprobe log]# cd ..
[root@linuxprobe var]#
ls
ls [选项] [文件]
ls 命令用于显示目录中的文件信息
" -a " 参数看到全部文件(包括隐藏文件)
" -l " 参数可以查看文件的属性、大小等详细信息
" -d " 参数查看目录属性信息
[root@linuxprobe ~]# ls -la
total 56
dr-xr-x---. 14 root root 4096 Aug 18 13:25 .
drwxr-xr-x. 17 root root 4096 Aug 18 21:24 ..
-rw-------. 1 root root 1043 Aug 11 19:30 anaconda-ks.cfg
-rw-------. 1 root root 406 Aug 18 13:24 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwx------. 9 root root 4096 Aug 18 13:26 .cache
drwx------. 15 root root 4096 Aug 18 13:26 .config
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwx------. 3 root root 24 Aug 11 11:30 .dbus
drwxr-xr-x. 2 root root 17 Aug 18 15:44 Desktop
drwxr-xr-x. 2 root root 6 Aug 18 13:25 Documents
drwxr-xr-x. 2 root root 6 Aug 18 13:25 Downloads
-rw-------. 1 root root 16 Aug 18 13:25 .esd_auth
-rw-------. 1 root root 314 Aug 18 13:25 .ICEauthority
-rw-r--r--. 1 root root 1094 Aug 11 11:31 initial-setup-ks.cfg
drwxr-xr-x. 3 root root 18 Aug 18 13:25 .local
drwxr-xr-x. 2 root root 6 Aug 18 13:25 Music
drwxr-xr-x. 2 root root 6 Aug 18 13:25 Pictures
drwxr-xr-x. 2 root root 6 Aug 18 13:25 Public
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
drwxr-xr-x. 2 root root 6 Aug 18 13:25 Templates
drwxr-xr-x. 2 root root 6 Aug 18 13:25 Videos
[root@linuxprobe ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Aug 18 21:24 /etc
文本文件编辑命令
cat
cat [选项] [文件]
cat 命令用于查看纯文本文件(内容较少的)
" -n " 参数显示行号
[root@linuxprobe ~]# cat -n initial-setup-ks.cfg
1 #version=RHEL7
2 # X Window System configuration information
3 xconfig --startxonboot
4
5 # License agreement
6 eula --agreed
7 # System authorization information
8 auth --enableshadow --passalgo=sha512
9 # Use CDROM installation media
10 cdrom
11 # Run the Setup Agent on first boot
12 firstboot --enable
13 # Keyboard layouts
14 keyboard --vckeymap=us --xlayouts='us'
15 # System language
16 lang en_US.UTF-8
17
18 ignoredisk --only-use=sda
19 # Network information
20 network --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto
21 network --bootproto=dhcp --hostname=linuxprobe.com
22 # Root password
23 rootpw --iscrypted $6$yf5cSSI3ZUWDt0RC$/Qi7l7jApCzNTrpCWKXXoXvzXRA8EEFcG.h5eMopUYKLTasj0pJnWxjNTzlRVuD9lcF/FTDS/XIHfwRlJdHOP1
24 # System timezone
25 timezone America/New_York --isUtc
26 # System bootloader configuration
27 bootloader --location=mbr --boot-drive=sda
28 autopart --type=lvm
29 # Partition clearing information
30 clearpart --all --initlabel --drives=sda
31
32 %packages
33 @base
34 @core
35 @desktop-debugging
36 @dial-up
37 @fonts
38 @gnome-desktop
39 @guest-agents
40 @guest-desktop-agents
41 @input-methods
42 @internet-browser
43 @multimedia
44 @print-client
45 @x11
46
47 %end
48
more
more [选项] 文件
more 命令用于查看纯文本文件(内容较多的)
[root@linuxprobe ~]# more initial-setup-ks.cfg
#version=RHEL7
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
ignoredisk --only-use=sda
# Network information
network --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto
network --bootproto=dhcp --hostname=linuxprobe.com
# Root password
--More--(51%)
head
head [选项] [文件]
head 命令用于查看纯文本文件的前 N 行
[root@linuxprobe ~]# head -n 10 initial-setup-ks.cfg
#version=RHEL7
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
tail
tail [选项] [文件]
tail 命令用于查看纯文本文档的后 N 行或者持续刷新内容,想要实时查看最新日志文件时,这命令特别适合
[root@linuxprobe ~]# tail -n 10 initial-setup-ks.cfg
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@multimedia
@print-client
@x11
%end
[root@linuxprobe ~]# tail -f /var/log/messages
Aug 21 16:49:47 linuxprobe gnome-keyring-daemon[12373]: couldn't create login keyring: An error occurred on the device
Aug 21 16:49:47 linuxprobe dbus-daemon: dbus[1052]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Aug 21 16:49:47 linuxprobe dbus[1052]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Aug 21 16:49:47 linuxprobe systemd: Starting Hostname Service...
Aug 21 16:49:47 linuxprobe dbus-daemon: dbus[1052]: [system] Successfully activated service 'org.freedesktop.hostname1'
Aug 21 16:49:47 linuxprobe dbus[1052]: [system] Successfully activated service 'org.freedesktop.hostname1'
Aug 21 16:49:47 linuxprobe systemd: Started Hostname Service.
Aug 21 16:50:01 linuxprobe systemd: Starting Session 54 of user root.
Aug 21 16:50:01 linuxprobe systemd: Started Session 54 of user root.
Aug 21 16:50:15 linuxprobe fprintd: ** Message: No devices in use, exit
tr
tr [原始字符] [目标字符]
tr 命令用于替换文本文件中的字符
[root@linuxprobe Desktop]# cat haha
aaabbbcccdddeeefff
[root@linuxprobe Desktop]# cat haha | tr [a-z] [A-Z]
AAABBBCCCDDDEEEFFF
wc
wc [参数] 文本
wc 命令用于统计指定文本的行数、字数、字节数
参数 | 作用 |
---|---|
-l | 显示行数 |
-w | 显示单词数 |
-c | 显示字节数 |
[root@linuxprobe Desktop]# wc -l /etc/passwd
38 /etc/passwd
stat
stat 文件名称
stat 命令用于查看文件的具体存储信息和时间等信息
Aceess | Modify | Change |
---|---|---|
最后一次查看文件内容时间 | 最后一次修改文件内容时间 | 最后一次修改文件属性信息时间 |
[root@linuxprobe Desktop]# stat haha
File: ‘haha’
Size: 19 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 71452994 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-08-21 16:56:31.307571830 +0800
Modify: 2020-08-21 16:56:26.481571556 +0800
Change: 2020-08-21 16:56:26.482571556 +0800
Birth: -
cut
cut [参数] 文本
cut 命令用于按 “列” 提取文本字符
" -f " 参数来设置需要查看的列数
" -d "参数来设置间隔符号
[root@linuxprobe Desktop]# head -n 10 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@linuxprobe Desktop]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
polkitd
unbound
colord
usbmuxd
avahi
avahi-autoipd
libstoragemgmt
saslauth
qemu
rpc
rpcuser
nfsnobody
rtkit
radvd
ntp
chrony
abrt
pulse
gdm
gnome-initial-setup
postfix
sshd
tcpdump
linuxprobe
diff
diff [参数] 文本
diff命令用于比较多个文本文件的差异
" --brief " 参数来确认两个文件是否不同
" -c " 参数来详细比较出多个文件的差异之处
[root@linuxprobe Desktop]# cat haha
aaabbbcccdddeeefff
aaabbbcccdddeeefff
aaabbbcccdddeeefff
111111111111111111
aaabbbcccdddeeefff
[root@linuxprobe Desktop]# cat haha1
aaabbbcccdddeeefff
aaabbbcccdddeeefff
aaabbbcccdddeeefff
111111111111122222
aaabbbcccdddeeefff
[root@linuxprobe Desktop]# diff --brief haha haha1
Files haha and haha1 differ
[root@linuxprobe Desktop]# diff -c haha haha1
*** haha 2020-08-21 17:08:36.825613076 +0800
--- haha1 2020-08-21 17:09:39.921616663 +0800
***************
*** 1,5 ****
aaabbbcccdddeeefff
aaabbbcccdddeeefff
aaabbbcccdddeeefff
! 111111111111111111
aaabbbcccdddeeefff
--- 1,5 ----
aaabbbcccdddeeefff
aaabbbcccdddeeefff
aaabbbcccdddeeefff
! 111111111111122222
aaabbbcccdddeeefff
文件目录管理命令
touch
touch [选项] [文件]
touch 命令用于创建空白文件或设置文件的时间
参数 | 作用 |
---|---|
-a | 修改 “ 读取时间 ” (atime) |
-m | 修改 “修改时间 ”(mtime) |
-d | 同时修改atime与mtime |
[root@linuxprobe Desktop]# ls -l haha
-rw-r--r--. 1 root root 95 Aug 21 17:08 haha
[root@linuxprobe Desktop]# echo "haha" >> haha
[root@linuxprobe Desktop]# ls -l haha
-rw-r--r--. 1 root root 100 Aug 21 17:22 haha
[root@linuxprobe Desktop]# touch -d "2020-8-21 17:00" haha
[root@linuxprobe Desktop]# stat haha
File: ‘haha’
Size: 100 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 71452992 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-08-21 17:00:00.000000000 +0800
Modify: 2020-08-21 17:00:00.000000000 +0800
Change: 2020-08-21 17:23:12.921662883 +0800
mkdir
mkdir [选项] 目录
mkdir 命令用于创建空白的目录
" -p "参数用来递归创建出具有嵌套叠层关系的文件目录
[root@linuxprobe Desktop]# mkdir -p a/b/c/d/e
[root@linuxprobe Desktop]# cd a
[root@linuxprobe a]# cd b
[root@linuxprobe b]# cd c
[root@linuxprobe c]#
cp
cp [选项] 源文件 目标文件
cp 命令用于复制文件或者目录
- 如果目标文件是目录,则会把源文件复制到该目录中
- 如果目标文件也是普通文件,则会询问是否要覆盖它
- 如果目标文件不存在,则执行正常的复制操作
参数 | 作用 |
---|---|
-p | 保留原始文件的属性 |
-d | 若对象为 “链接文件”,则保留该 “链接文件” 的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于-pdr(p、d、r 为上述参数) |
mv
mv [选项] 源文件 [目标路径 | 目标文件名]
mv 命令用于剪切文件或将文件重命名
rm
rm [选项] 文件
rm 命令用于删除文件或者目录
" -f "参数来强制删除
" -r "参数来删除目录
dd
dd [参数]
dd 命令用于按照指定大小和个数的数据块来复制文件或转换文件
参数 | 作用 |
---|---|
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个 “块” 的大小 |
count | 设置要复制 “块” 的个数 |
例如我们可以用 dd 命令从 /dev/zero 设备文件中取出一个大小为 560MB 的数据块,然后保存成名为560_file的文件。
[root@linuxprobe c]# dd if=/dev/zero of=560_file count=1 bs=560M
1+0 records in
1+0 records out
587202560 bytes (587 MB) copied, 2.13431 s, 275 MB/s
[root@linuxprobe c]# ls -lh
total 560M
-rw-r--r--. 1 root root 560M Aug 22 10:22 560_file
drwxr-xr-x. 3 root root 14 Aug 21 17:27 d
dd 命令的功能也绝不仅限于复制文件这么简单。如果你想把光驱设备中的光盘制作成 iso 格式的镜像文件,在 Window 系统中需要借助第三方软件才能做到,但在 Linux 系统中可以直接使用 dd 命令来压制出光盘镜像文件,将它变成一个可立即使用的 iso 镜像
[root@linuxprobe c]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-Linux.iso
file
file 文件名
file 命令用于查看文件的类型
[root@linuxprobe Desktop]# file haha
haha: ASCII text
[root@linuxprobe Desktop]# file a
a: directory
打包压缩与搜索命令
tar
tar [选项] [文件]
tar 命令用于对文件进行打包压缩或解压
在 Linux 系统中,常见的文件格式比较多,其中主要使用的是 .tar 或 .tar.gz 或 .tar.bz2 格式,我们不用担心格式太多而记不住,其实这些格式大部分都是由 tar 命令来生成。
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
" -f "参数要放在参数的最后一位,代表要压缩或解压的软件包名称
一般使用 " tar -czvf 压缩包名称.tar.gz 要打包的目录 " 命令把指定的文件进行打包压缩
相应的解压命令为 " tar -xzvf 压缩包名称.tar.gz "
[root@linuxprobe Desktop]# tar -czvf a.tar.gz ./a
./a/
./a/b/
./a/b/c/
./a/b/c/d/
./a/b/c/d/e/
./a/b/c/560_file
./a/etc.tar.gz
[root@linuxprobe Desktop]# mkdir b
[root@linuxprobe Desktop]# tar -xzvf a.tar.gz -C ./b
./a/
./a/b/
./a/b/c/
./a/b/c/d/
./a/b/c/d/e/
./a/b/c/560_file
./a/etc.tar.gz
grep
grep [选项] [文件]
grep 命令用于在文本中执行关键词搜索
参数 | 作用 |
---|---|
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有 “关键词” 的行 |
[root@linuxprobe Desktop]# grep -n /sbin/nologin /etc/passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
……………………………………………省略部分输出过程信息………………………………………………………
find
find [查找路径] 寻找条件 [操作]
find 命令用于按照指定条件来查找文件
它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息)
参数 | 作用 |
---|---|
-name | 匹配名称 |
-perm | 匹配权限(mode 为完全匹配,-mode 为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间( -n 指 n 天以内,+n 指 n 天以前) |
-atime -n +n | 匹配访问文件的时间( -n) |
-ctime -n +n | 匹配修改文件权限的时间( -n 指 n 天以内,+n 指 n天以前) |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件 f1 新但比 f2 旧的文件 |
–type b/d/c/p/l/f | 匹配文件类型(后面的字母参赛依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
-size | 匹配文件的大小(+50KB 为查找超过 50KB 的文件,而且 -50KB 为查找小于 50KB 的文件) |
-prune | 忽略某个目录 |
-exec …… { }; | 后面可跟用于进一步处理搜索结果的命令 |
-exec 参数的重要作用
这个参数用于把 find 命令搜索到的结果交由紧随其后的命令作进一步处理,十分类似管道符
例:在整个文件系统中找出所有归属于 linuxprobe 用户的文件并复制到 /root/findresults 目录。重点是“-exec {} \” 参数,其中的 {} 表示 find 命令搜索出的每一个文件,并且命令的结尾必须是 “;”。
[root@linuxprobe Desktop]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;
[root@linuxprobe Desktop]# find /etc -name "host*"
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname
[root@linuxprobe Desktop]#
Vim
Vim中常用的命令
命令 | 作用 |
---|---|
dd | 删除(剪切)光标所在整行 |
5dd | 删除(剪切)光标处开始的 5 行 |
yy | 复制光标所在整行 |
5yy | 复制光标处开始的5行 |
n | 显示搜索命令定位到的下一个字符串 |
N | 显示搜索命令定位到的上一个字符串 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
末行模式中可用的命令
命令 | 作用 |
---|---|
:w | 保存 |
:q | 退出 |
:q! | 强制退出(放弃对文档的修改内容) |
:wq! | 强制保存退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:命令 | 执行该命令 |
:整数 | 跳转到该行 |
:s/one/two | 将当前光标所在行的第一个 one 替换成 two |
:s/one/two/g | 将当前光标所在行的所以 one 替换成two |
:%s/one/two/g | 将全文中的所有 one 替换成 two |
?字符串 | 在文本中从下至上搜索该字符串 |
/字符串 | 在文本中从上至下搜索该字符串 |
shell
一个完整的shell脚本拥有:
- 脚本声明 #!/bin/bash
- 脚本注释 #注释内容
- 脚本命令 ls、pwd等命令
[root@linuxprobe ~]# vim demo.sh
[root@linuxprobe ~]#
[root@linuxprobe ~]# cat demo.sh
#!/bin/bash
#For Example By linuxprobe.com
pwd
ls -al
[root@linuxprobe ~]# bash demo.sh
/root
total 76
dr-xr-x---. 15 root root 4096 Aug 27 15:26 .
drwxr-xr-x. 18 root root 4096 Aug 21 17:27 ..
-rw-------. 1 root root 1043 Aug 11 19:30 anaconda-ks.cfg
…………………………………省略部分内容……………………………………………
两种方式执行shell脚本
一、bash 解释器命令直接运行Shell脚本
二、完整的路径方式执行,有时会因为权限不足,需要增加权限(chmod)
接收参数
参数 | 作用 |
---|---|
$0 | 脚本名称 |
$# | 参数个数 |
$* | 全部参数都输出一次 |
$1、$2 | 第一个参数、第二个参数 |
判断参数
shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0 ,否则便返回其他随机数值。条件测试语法的执行格式: [ 条件表达式 ] ,切记条件表达式两边均应有一个空格。
按照测试对象来划分,条件测试语句可以分成4种:
- 文件测试语句
- 逻辑测试语句
- 整数值比较语句
- 字符串比较语句
文件测试所用的参数
运算符 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
" $? "变量显示上一条命令执行后的返回值。0 为真,非 0 为假。
[root@linuxprobe ~]# [ -d /etc/fastb ]
[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# [ -f /etc/fstab ]
[root@linuxprobe ~]# echo $?
0
逻辑测试所用的参数
逻辑语句可用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。
**分别是 与、或、非:" &&、||、!"
[root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist
整数值比较语句
运算符 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
[root@linuxprobe ~]# [ 10 -gt 10 ]
[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# [ 10 -eq 10 ]
[root@linuxprobe ~]# echo $?
0
字符串比较语句
运算符 | 作用 |
---|---|
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
[root@linuxprobe ~]# [ -z $String ]
[root@linuxprobe ~]# echo $?
0
[root@linuxprobe ~]# String="aaa"
[root@linuxprobe ~]# [ -z $String ]
[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# echo $LANG
en_US.UTF-8
[root@linuxprobe ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US
流程控制语句
if 条件测试语句
if 条件测试操作
then
命令语句
fi
-------------------------
if 条件测试操作
then
命令语句
else
命令语句
fi
-------------------------
if 条件测试操作
then
命令语句
elif
then
命令语句
else
命令语句
fi
-------------------------
for 条件循环语句
for 变量名 in 取值列表
do
命令语句
done
-------------
read -p "请输入数据:" parameter #把输入的值存到parameter
while 条件循环语句
while 条件测试操作
do
命令语句
done
--------------
let arg #arg:要执行的表达式
例:
自加操作:let i++
自减操作:let i--
let a=5+4
let b=9-3
echo $a $b
结果为
9 6
case 条件测试语句
case 变量值 in
条件1)
命令语句
;;
条件2)
命令语句
;;
*)
默认命令序列
esac
计划任务
计划任务分为一次性计划与长期性计划任务
- 一次性计划任务:今晚 09 点 00 分开启网站服务
- 长期性计划:每周一的凌晨 3 点 20 分把 /home/wwwroot 目录打包备份为backup.tar.gz
顾名思义,一次性计划任务只执行一次,一般满足临时的工作需求。我们可以用 at 命令实现这种功能,只需要写成 “ at 时间 ” 的形式就可以。如果想要查看已设置好但还未执行的一次性计划任务,可以用 “ at -l ”命令。想要将其删除,可以用 “ atrm 任务序号 ”。在使用 at 命令来设置一次性计划任务时,默认采用的是交互式方法。
root@linuxprobe ~]# at 23:30
at> systemctl restart httpd
at> <EOT> #这里 同时按下 Ctrl+D 组合键来结束编写计划任务
job 1 at Thu Aug 27 23:30:00 2020
[root@linuxprobe ~]# at -l
1 Thu Aug 27 23:30:00 2020 a root
[root@linuxprobe ~]# atrm 1
[root@linuxprobe ~]# at -l
[root@linuxprobe ~]#
长期性任务:
创建、编辑计划任务的命令为 “ crontab -e ”,查看当前计划任务的命令为 “ crontab -l ”,删除某条计划任务的命令为 “ crontab -r ”。另外,如果你是以管理员的身份登录的系统,还可以在 crontab 命令中加上 -u 参数来编辑他人的计划任务。
在正式部署计划任务前,先记住这个口诀 “ 分、时、日、月、星期 命令 ”。这是使用 crond 服务设置任务的参数格式,需要注意的是,如果有些字段没有设置,则需要使用星号( * )占位。
字段 | 说明 |
---|---|
分 | 取值为 0~59 的整数 |
时 | 取值为 0~23 的整数 |
日 | 取值为 1~31 的整数 |
月 | 取值为1~12 的整数 |
星期 | 取值为 0~7 的整数,其中 0 和 7 均为星期日 |
命令 | 要执行的命令或脚本程序 |
假设一个每周一、三、五的凌晨 3 点 25 分,都需要使用 tar 命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。我们可以使用 crontab -e 命令来创建计划任务。为自己创建计划任务无需使用 -u 参数,具体的实现效果的参数如 crontab -l 命令。
[root@linuxprobe Desktop]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe Desktop]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
除了用逗号( ,)来分别表示多个时间段,例如 “ 8,9,12 ” 表示 8月、9月和12月。还可以用减号( - )来表示一段连续的时间周期(例如字段 “日” 的取值为 “ 12-15 ”,则表示每月的12~15日)。以及用除号( / )表示执行任务的时隔时间(例如 “ */2 ” 表示每隔 2 分钟执行一次任务)。
如果在 crond 服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨1点钟自动清空 /tmp 目录内的所有文件。尤其需要注意的是,在 crond 服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知绝对路径,请用 whereis 命令来查询,rm 命令路径为:/usr/bin/rm
[root@linuxprobe Desktop]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
计划任务中的 “分” 字段必须有数值,绝不能为空或者是 * 号,而 “日” 和 “星期” 字段不能同时使用,否则会发生冲突。
用户身份与文件权限
- 管理员 UID 为 0:系统的管理员用户。
- 系统用户 UID 为 1~999:Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
- 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。
UID 是不能冲突的,而且管理员创建的普通用户的UID默认是从1000开始的(即使前面有闲置的号码)
useradd
useradd [选项] 用户名
useradd 命令用于创建新的用户
使用该命令创建用户账户时,默认的用户家目录会被存放在 /home 目录中。
参数 | 作用 |
---|---|
-d | 指定用户的家目录(默认为 /home/username ) |
-e | 账户的到期时间,格式为 YYYY-MM-DD |
-u | 指定该用户的默认 UID |
-g | 指定一个初始的用户基本组(必须已存在) |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认 Shell 解释器 |
下面我们创建一个普通用户并指定家目录的路径、用户的 UID 以及 Shell 解释器。在下面的命令中,请注意 /sbin/nologin,它是终端解释器中的一员,与 Bash 解释器有着天壤之别。一旦用户的解释器被设置为 nologin ,则代表该用户不能登录到系统中:
[root@linuxprobe Desktop]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxone
[root@linuxprobe Desktop]# id linuxone
uid=8888(linuxone) gid=8888(linuxone) groups=8888(linuxone)
[root@linuxprobe Desktop]# su - linuxone
This account is currently not available.
groupadd
groupadd [选项] 群组名
groupadd 命令用于创建用户组
为了能够更加高效地指派系统中各个用户的权限,在工作中常常会把几个用户加入到同一个组里面,这样便可以针对一类用户统一安排权限。
usermod
usermod [选项] 用户名
usermod 命令用于修改用户的属性
修改如用户的 UID 、基本/扩展用户组、默认终端等。
参数 | 作用 |
---|---|
-c | 填写用户账户的备注信息 |
-d -m | 参数 -m 与参数 -d 连用,可重新指定用户的家目录并自动把旧的数据转移过去 |
-e | 账户的到期时间,格式为 YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录系统 |
-U | 解锁用户,允许其登录系统 |
-s | 变更默认终端 |
-u | 修改用户的 UID |
[root@linuxprobe Desktop]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),10(wheel)
[root@linuxprobe Desktop]# usermod -G root linuxprobe
[root@linuxprobe Desktop]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
[root@linuxprobe Desktop]# usermod -u 7777 linuxprobe
[root@linuxprobe Desktop]# id linuxprobe
uid=7777(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
passwd
passwd [选项] [用户名]
passwd 命令用于修改用户密码、过期时间、认证信息等
普通用户只能使用 passwd 命令修改自身的系统密码,而 root 管理员则有权限修改其他所有人密码。
参数 | 作用 |
---|---|
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
--stdin | 允许通过标准输入修改用户密码,如 echo “NewPassWord” | passwd --stdin Username |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录时修改密码 |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
userdel
userdel [选项] 用户
userdel 命令用于删除用户
在执行删除操作时,该用户的家目录默认会保留下来,此时可以使用 -r 参数将其删除。
参数 | 作用 |
---|---|
-f | 强制删除用户 |
-r | 同时删除用户及用户家目录 |
[root@linuxprobe Desktop]# id linuxone
uid=8888(linuxone) gid=8888(linuxone) groups=8888(linuxone)
[root@linuxprobe Desktop]# userdel linuxone
[root@linuxprobe Desktop]# id linuxone
id: linuxone: no such user
文件权限与归属
linux系统中一切都是文件,但是每个文件的类型不尽相同,因此 Linux 系统使用了不同的字符来加以区分。
- -:普通文件
- d:目录文件
- l:链接文件
- b:块设备文件
- c:字符设备文件
- p:管道文件
文件的特殊权限
chmod
chmod [参数] 权限 文件或者目录名称
chmod 命令用于设置文件或目录的权限
对目录进行操作需要加上参数 -R 来表示递归操作,意思是对目录内所有的文件进行整体操作
[root@linuxprobe Desktop]# ls -al haha
-rw-r--r--. 1 root root 100 Aug 21 17:00 haha
[root@linuxprobe Desktop]# chmod 777 haha
[root@linuxprobe Desktop]# ls -al haha
-rwxrwxrwx. 1 root root 100 Aug 21 17:00 haha
chown
chown [参数] 所有者:所属组 文件或目录名称
chown 命令用于设置文件或目录的所有者和所属组
对目录进行操作需要加上参数 -R 来表示递归操作,意思是对目录内所有的文件进行整体操作
[root@linuxprobe Desktop]# ls -al haha1
-rw-r--r--. 1 root root 95 Aug 21 17:09 haha1
[root@linuxprobe Desktop]# chown root:linuxprobe haha1
[root@linuxprobe Desktop]# ls -al haha1
-rw-r--r--. 1 root linuxprobe 95 Aug 21 17:09 haha1
SUID
SUID 是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。例如,所有用户都可以执行 passwd 命令来修改自己的用户密码,而用户密码保存在 /etc/shadow 文件中。仔细查看这个文件就会发现它的默认权限是 000 ,也就是说除了 root 管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用 passwd 命令时如果加上 SUID 特殊权限位,就可让普通用户临时获取程序所有者的身份,把变更的密码信息写入到 shadow 文件中。
查看 passwd 命令属性时发现所有者的权限由 rwx 变成 rws,其中 x 改成 s 就意味着该文件被赋予了 SUID 权限。如果原本的权限是 rw- ,那么被赋予特殊权限后将变成大写的S。
[root@linuxprobe Desktop]# ls -l /etc/shadow
----------. 1 root root 1141 Aug 28 04:26 /etc/shadow
[root@linuxprobe Desktop]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 30 2014 /bin/passwd
SGID
SGID 主要实现如下两种功能:
- 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
- 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
SGID 的第一种功能是参考 SUID 而设计的,不同点在执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。
SBIT
SBIT 特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。意思是当对某个目录设置了SBIT 粘滞位权限后,那该目录中的文件就只能被所有者执行删除操作了。文件能否被删除并不取决于自身的权限,而是看其所在目录是否有写入权限。
文件的隐藏属性
chattr
chattr [参数] 文件
chattr 命令用于设置文件的隐藏权限
如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加 “ +参数 ”,如果想要把某个隐藏功能移出文件,则需要追加“ -参数 ”。
参数 | 作用 |
---|---|
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用 0 填充原文件所在硬盘区域) |
A | 不再修改这个文件或目录的最后访问时间(atime) |
b | 不再修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用 dump 命令备份时忽略本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 |
t | 让文件系统支持尾部合并( tail-merging ) |
X | 可以直接访问压缩文件中的内容 |
lsattr
lsattr [参数] 文件
lsattr 命令用于显示文件的隐藏权限,文件的隐藏权限必须使用 lsattr 命令来查看。
文件访问控制列表
一般权限、特殊权限、隐藏权限其实有一个共性——权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。通俗来讲,基于普通文件或者目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了 ACL ,则目录中的文件会继承其 ACL;若针对文件设置了 ACL ,则文件不再继承其所在目录的 ACL。
setfacl
setfacl [参数] 文件名称
setfacl 命令用于管理文件的 ACL 规则
文件的 ACL 提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用 setfacl 命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用 -R 递归参数;针对普通文件则使用 -m 参数;如果想要删除某个文件的 ACL,则可以使用 -b 参数。
[root@linuxprobe ~]# ls -ld /root
dr-xr-x---. 15 root root 4096 Aug 27 15:26 /root
[root@linuxprobe ~]# setfacl -Rm u:linuxprobe:rwx /root
[root@linuxprobe ~]# su - linuxprobe
Last login: Tue Sep 1 17:11:28 CST 2020 on pts/1
[linuxprobe@linuxprobe ~]$ cd /root
[linuxprobe@linuxprobe root]$ ls
anaconda-ks.cfg Desktop Downloads initial-setup-ks.cfg Pictures Templates
demo.sh Documents findresults Music Public Videos
[linuxprobe@linuxprobe root]$ cat anaconda-ks.cfg
[linuxprobe@linuxprobe root]$ exit
logout
[root@linuxprobe ~]# ls -ld /root
dr-xrwx---+ 15 root root 4096 Aug 27 15:26 /root
文件的权限最后一个点(.)变成了加号(+),这就意味着该文件已经设置了 ACL 了。
getfacl
getfacl 文件名称
getfacl 命令用于显示文件上设置的 ACL 信息
[root@linuxprobe ~]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:linuxprobe:rwx
group::r-x
mask::rwx
other::---
su
su-账户
su 命令用于切换用户身份,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户
[root@linuxprobe ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@linuxprobe ~]# su - linuxprobe
Last login: Wed Sep 2 01:45:13 CST 2020 on pts/1
[linuxprobe@linuxprobe ~]$ id
uid=7777(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
su命令与用户名之间有一个减号(-),这意味着完全彻底换到新用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。建议在切换用户身份时添加这个减号(-)。
sudo
sudo [参数] 命令名称
sudo 命令用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务
参数 | 作用 |
---|---|
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u 用户名或 UID 值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证操作 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
总的来说,sudo 命令具有如下功能 :
- 限制用户执行指定命令
- 记录用户执行的每一条命令
- 配置文件( /etc/sudoers )提供集中的用户管理、权限与主机等参数
- 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码
如果担心直接修改配置文件出现问题,则可以使用 sudo 命令提供的 visudo 命令来配置用户权限。这条命令在配置用户权限时将禁止多个用户同时修改 sudoers 配置文件,还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。只有 root 管理员才可以使用 visudo 命令编辑 sudo 服务的配置文件。
visudo
在visudo命令下,操作方法与 Vim 编辑器中用到的方法一直,按照下面的格式将第99行(大概位置)填写上指定的信息:
谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表
[root@linuxprobe ~]# visudo
[root@linuxprobe ~]# su - linuxprobe
Last login: Wed Sep 2 02:02:57 CST 2020 on pts/1
[linuxprobe@linuxprobe ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[linuxprobe@linuxprobe ~]$ sudo cat /etc/shadow
[sudo] password for linuxprobe:
root:$6$yf5cSSI3ZUWDt0RC$/Qi7l7jApCzNTrpCWKXXoXvzXRA8EEFcG.h5eMopUYKLTasj0pJnWxjNTzlRVuD9lcF/FTDS/XIHfwRlJdHOP1:18485:0:99999:7:::
bin:*:16141:0:99999:7:::
...........部分内容省略...............
倘若添加 NOPASSWD 参数,这样用户每次执行 sudo 命令时就不再需要密码验证了。
参考书籍——Linux就该这么学