linux速查
linux速查
重置root管理员密码
# 重启linux系统 出现引导界面按下键盘上的e键进入内核编辑界面
# linux16 的那一行后面,空格,再追加 init=/bin/sh
# 然后按下Ctrl+X组合键来运行修改过的内核程序 大约30秒过后,进入到系统的紧急求援模式
# 挂载根目录
mount -o remount, rw /
# 选择要修改密码的用户名,这里选择root用户进行修改,可以更换为你要修改的用户
passwd root
# 更新系统信息 touch /.authorelabel
touch /.authorelabel
# 最后输入以下命令重启系统即可
exec /sbin/init 或 exec /sbin/reboot
RPM(红帽软件包管理器)
在RPM(红帽软件包管理器)公布之前,要想在Linux系统中安装软件只能采取源码包的方式安装。早期在Linux系统中安装程序是一件非常困难、耗费耐心的事情,而且大多数的服务程序仅仅提供源代码,需要运维人员自行编译代码并解决许多的软件依赖关系,因此要安装好一个服务程序,运维人员需要具备丰富知识、高超的技能,甚至良好的耐心。而且在安装、升级、卸载服务程序时还要考虑到其他程序、库的依赖关系,所以在进行校验、安装、卸载、查询、升级等管理软件操作时难度都非常大
RPM机制则为解决这些问题而设计的。RPM有点像Windows系统中的控制面板,会建立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。目前RPM的优势已经被公众所认可,使用范围也已不局限在红帽系统中了。
rpm -ivh filename.rpm # 安装
rpm -Uvh filename.rpm # 升级
rpm -e filename.rpm # 卸载
rpm -qpi filename.rpm # 查询软件描述信息
rpm -qpl filename.rpm # 列出软件文件信息
rpm -qf filename.rpm # 查询文件属于哪个rpm
Yum软件仓库
Yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。
yum repolist all # 列出所有的仓库
yum list all # 列出仓库中的所有软件包
yum info 软件包名称 # 查看软件包信息
yum install 软件包名称 # 安装软件包
yum reinstall 软件包名称 # 重新安装软件包信息
yum update 软件包名称 # 升级软件包
yum remove 软件包 # 移除软件包
yum clean all # 清除所有仓库缓存
yum check-update # 检查可更新的软件包
yum grouplist # 查看系统中已安装的软件包组
yum groupinstall 软件包组 # 安装软件包组
yum groupremove 软件包组 # 移除软件包组信息
yum groupinfo 软件包组 # 查看软件包组信息
systemd初始化进程
Linux操作系统的开机过程从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核初始化,最后启动初始化进程。
初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。红帽RHEL 7系统已经替换掉了熟悉的初始化进程服务System V init,正式采用全新的systemd初始化进程服务。RHEL 7系统选择systemd初始化进程服务已经是一个既定事实,因此也没有了“运行级别”这个概念,Linux系统在启动时要进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元(Unit), systemd用目标(target)代替了System V init中运行级别的概念,这两者的区别如表所示。
System V init | systemd目标名称 | 作用 |
---|---|---|
0 | runlevel0.target,poweroff.target | 关机 |
1 | runlevel1.target,rescue.target | 单用户模式 |
2 | runlevel2.target,multi-user.target | 等同于级别三 |
3 | runlevel3.target,multi-user.target | 多用户的文本界面 |
4 | runlevel4.target,multi-user.target | 等同于级别三 |
5 | runlevel5.target,graphical.target | 多用户的图形界面 |
6 | runlevel6.target,reboot.target | 重启 |
emergency | emergency.target | 紧急shell |
如果想要将系统默认的运行目标修改为“多用户,无图形”模式,可直接用ln命令把多用户模式目标文件连接到/etc/systemd/system/目录
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令
System Vinit命令 | systemctl 命令(RHEL 7 系统) | 作用 |
---|---|---|
service foo start | systemctl start foo.service | 启动服务 |
service foo restart | systemctl restart foo.service | 重启服务 |
service foo stop | systemctl stop foo.service | 停止服务 |
service foo reload | systemctl reload foo.serivce | 重新加载配置文件(不终止服务) |
service foo status | systemctl status foo.service | 查看服务状态 |
ystemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
System V init命令 | systemctl 命令(RHEL 7 系统) | 作用 |
---|---|---|
checkconfig foo on | systemctl enable foo.service | 开机自动启动 |
chkconfig foo off | systemctl disable foo.service | 开机不自动启动 |
chkconfig foo | systemctl is-enabled foo.service | 查看特定服务是否为开机自动启动 |
chkconfig --list | systemctl list-unit-files --type=type=service | 查看各个级别下服务的启动与禁用情况 |
用户与Linux系统的交互
格式:命令名称 [命令参数] [命令对象]
长格式:man --help 短格式:man -h
man man
echo命令
# 输出字符串或变量
[root@localhost ~]# echo hello world
hello world
[root@localhost ~]# echo $BASH
/usr/bin/bash
date命令
[root@localhost ~]# date
2022年 11月 02日 星期三 22:54:55 CST
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2022-11-02 22:55:06
[root@localhost ~]# date -s "2021-01-08 22:53:28"
2021年 01月 08日 星期五 22:53:28 CST
[root@localhost ~]# date
2021年 01月 08日 星期五 22:53:35 CST
[root@localhost ~]# date "+%j" # date命令中的参数%j可用来查看今天是当年中的第几天
008
wget命令
wget命令用于在终端中下载网络文件,格式为“wget [参数]下载地址”
[root@localhost ~]# wget https://www.linuxprobe.com/docs/LinuxProbe.pdf --no-check-certificate
--2021-01-08 22:58:00-- https://www.linuxprobe.com/docs/LinuxProbe.pdf
正在解析主机 www.linuxprobe.com (www.linuxprobe.com)... 117.169.12.168
正在连接 www.linuxprobe.com (www.linuxprobe.com)|117.169.12.168|:443... 已连接。
警告: 无法验证 www.linuxprobe.com 的由 “/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=Encryption Everywhere DV TLS CA - G1” 颁发的证书:
颁发的证书还未生效。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:23335661 (22M) [application/pdf]
正在保存至: “LinuxProbe.pdf”
100%[=========================================================================================================>] 23,335,661 9.31MB/s 用时 2.4s
2021-01-08 22:58:03 (9.31 MB/s) - 已保存 “LinuxProbe.pdf” [23335661/23335661])
参数 | 作用 |
---|---|
-b | 后台下载模式 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片视频 |
-r | 递归下载 |
ps命令
ps命令用于查看系统中的进程状态,格式为“ps [参数]”。
参数 | 作用 |
---|---|
-a | 显示所有进程(包括其他用户) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行
# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 194092 7248 ? Ss 14:21 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 14:21 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 14:21 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 14:21 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 14:21 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 14:21 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 14:21 0:04 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 14:21 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 14:21 0:00 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 14:21 0:00 [watchdog/1]
root 13 0.0 0.0 0 0 ? S 14:21 0:00 [migration/1]
root 14 0.0 0.0 0 0 ? S 14:21 0:00 [ksoftirqd/1]
root 16 0.0 0.0 0 0 ? S< 14:21 0:00 [kworker/1:0H]
# 所有者 ID号 cpu占用 内存占用 虚拟内存使用 固定内存占用 所在终端 进程状态 启动时间 cpu使用时间 命令名称和参数
top命令
top命令用于动态地监视进程活动与系统负载等信息,其格式为top (Windows任务管理器)
top - 23:10:22 up 8:48, 3 users, load average: 0.18, 0.09, 0.06
Tasks: 228 total, 1 running, 225 sleeping, 2 stopped, 0 zombie
%Cpu(s): 2.6 us, 1.2 sy, 0.0 ni, 96.1 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 3861260 total, 220208 free, 1303200 used, 2337852 buff/cache
KiB Swap: 975868 total, 975868 free, 0 used. 2184816 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2239 root 20 0 3678012 310132 107300 S 9.0 8.0 2:15.29 gnome-shell 1704 root 20 0 510376 194192 96164 S 8.0 5.0 0:54.58 X 62138 root 20 0 768724 36612 20888 S 2.3 0.9 0:08.44 gnome-terminal- 58817 root 20 0 1100340 43056 14704 S 0.7 1.1 1:15.03 containerd
第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。数据均为CPU数据并以百分比格式显示
第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
pidof命令
pidof命令用于查询某个指定服务进程的PID值,格式为“pidof [参数] [服务名称]”。
[root@localhost ~]# pidof sshd
1134
kill命令
kill命令用于终止某个指定PID的服务进程,格式为“kill [参数] [进程PID]”。
[root@localhost ~]# kill 1134
killall命令
killall命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [进程名称]”。
注:如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下Ctrl+C组合键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行
ifconfig命令
ifconfig命令用于获取网卡配置与网络状态等信息,格式为“ifconfig[网络设备] [参数]
[root@localhost ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:58ff:fe25:553e prefixlen 64 scopeid 0x20<link>
ether 02:42:58:25:55:3e txqueuelen 0 (Ethernet)
RX packets 54 bytes 3432 (3.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 432 (432.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.129.133 netmask 255.255.255.0 broadcast 192.168.129.255
inet6 fe80::f521:ece1:60d7:e5ab prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9b:d7:c6 txqueuelen 1000 (Ethernet)
RX packets 530437 bytes 756707251 (721.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 66538 bytes 4277794 (4.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 696 bytes 59560 (58.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 696 bytes 59560 (58.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
uname命令
uname命令用于查看系统内核与系统版本等信息,格式为uname [-a]
[root@localhost ~]# uname -a
Linux 192.168.129.133 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
如果要查看当前系统版本的详细信息,则需要查看redhat-release文件
[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
uptime命令
uptime用于查看系统的负载信息,格式为uptime
[root@localhost ~]# uptime
23:32:03 up 9:40, 3 users, load average: 0.00, 0.01, 0.05
free命令
free用于显示当前系统中内存的使用量信息,格式为free [-h]
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 1.3G 240M 94M 2.2G 2.1G
Swap: 952M 8K 952M
#可用 #进程共享 #磁盘缓存内存
who命令
who用于查看当前登入主机的用户终端信息,格式为who [参数]
[root@localhost ~]# who
root :0 2022-10-15 00:19 (:0)
root pts/0 2022-11-02 21:30 (:0)
root pts/1 2022-11-02 21:51 (:0)
last命令
last命令用于查看所有系统的登录记录,格式为last [参数]
使用last命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!
[root@localhost ~]# last
root pts/1 :0 Wed Nov 2 21:51 still logged in
root pts/0 :0 Wed Nov 2 21:30 still logged in
root pts/0 :0 Wed Nov 2 21:16 - 21:29 (00:12)
root pts/1 :0 Sun Oct 30 23:17 - 21:15 (2+21:58)
root pts/0 :0 Sat Oct 15 00:19 - 21:16 (18+20:56)
root :0 :0 Sat Oct 15 00:19 still logged in
reboot system boot 3.10.0-1160.71.1 Sat Oct 15 00:19 - 23:37 (19+23:18)
reboot system boot 3.10.0-1160.71.1 Sat Oct 15 00:18 - 23:37 (19+23:18)
reboot system boot 3.10.0-1160.71.1 Sat Oct 15 00:13 - 00:13 (00:00)
root pts/1 :0 Fri Aug 26 08:09 - 08:09 (00:00)
root pts/0 :0 Fri Aug 26 08:09 - 08:12 (00:02)
root pts/0 :0 Fri Aug 26 08:06 - 08:07 (00:00)
root :0 :0 Fri Aug 26 08:04 - crash (49+16:08)
reboot system boot 3.10.0-1160.71.1 Fri Aug 26 08:03 - 00:13 (49+16:09)
wtmp begins Fri Aug 26 08:03:31 2022
history命令
history命令用于显示历史执行过的命令,格式为history [-c]
history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果1000不够用,可自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。
[root@localhost ~]# history
1 ping www.baidu.com
2 ip addr
3 [root@localhost ~]# yum install net-tools -y
4 docker version
5 ls
6 mkdir Chpater1
7 cd Chpater1/
8 yum -y install gcc
9 yum -y install gcc-c++
历史命令会被保存到用户家目录中的.bash_history文件中
sosreport命令
sosreport命令用于收集系统配置及架构信息并输出诊断文档,格式为sosreport
[root@localhost ~]# sosreport
sosreport (version 3.9)
This command will collect diagnostic and configuration information from
this CentOS Linux system and installed applications.
An archive containing the collected information will be generated in
/var/tmp/sos.di8p85 and may be provided to a CentOS support
representative.
Any information provided to CentOS will be treated in accordance with
the published support policies at:
https://wiki.centos.org/support
The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.
No changes will be made to system configuration.
按 ENTER 键继续,或者 CTRL-C 组合键退出。#回车
Please enter the case id that you are generating this report for []:#回车
Setting up archive ...
Setting up plugins ...
[plugin:firewalld] skipped command 'nft list ruleset': required kmods missing: nfnetlink, nf_tables. Use '--allow-system-changes' to enable collection.
[plugin:ipa] skipped command 'getcert list': required services missing: certmonger.
[plugin:networking] skipped command 'nft list ruleset': required kmods missing: nf_tables.
[plugin:networking] skipped command 'ip -s macsec show': required kmods missing: macsec. Use '--allow-system-changes' to enable collection.
[plugin:networking] skipped command 'ss -peaonmi': required kmods missing: inet_diag, udp_diag, tcp_diag, netlink_diag, af_packet_diag, unix_diag. Use '--allow-system-changes' to enable collection.
[plugin:sssd] skipped command 'sssctl config-check': required services missing: sssd.
Running plugins. Please wait ...
Finishing plugins [Running: yum]
Finished running plugins
生成压缩归档......
Your sosreport has been generated and saved in:
/var/tmp/sosreport-192-2022-11-03-qwowzaw.tar.xz # 发送给技术人员
Size 10.75MiB
Owner root
md5 b8e69c28c3ad7fcd3a50f7adfecf103e
Please send this file to your support representative.
当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。
pwd命令
pwd命令用于显示用户当前所处的工作目录,格式为pwd [选项]
cd命令
cd命令用于切换工作路径,格式为cd [目录名称]
cd -命令返回到上一次所处的目录
ls命令
ls命令用于显示目录中的文件信息,格式为ls [选项] [文件]
cat命令
cat命令用于查看纯文本文件(内容较少的),格式为cat [选项] [文件]
-n 显示行号
more命令
more命令用于查看纯文本文件(内容较多的),格式为more [选项]文件
head命令
head命令用于查看纯文本文档的前N行,格式为“head [选项] [文件]”。
head -n 20 a.cfg
tail命令
tail命令用于查看纯文本文档的后N行或持续刷新内容,格式为tail [选项] [文件]
tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”
tr命令
tr命令用于替换文本文件中的字符,格式tr [原始字符] [目标字符]
cat filename | tr [a-z] [A-Z] # 小写变大写
wc命令
wc命令用于统计指定文本的行数、字数、字节数,格式为wc [参数]文本
- -l 只显示行数
- -w 只显示单词数
- -c 只显示字节数
[root@localhost ~]# wc -l /etc/passwd # 统计当前系统中有多少个用户
44 /etc/passwd
stat命令
stat命令用于查看文件的具体存储信息和时间等信息,格式为stat文件名称。
[root@localhost ~]# stat anaconda-ks.cfg
文件:"anaconda-ks.cfg"
大小:1894 块:8 IO 块:4096 普通文件
设备:803h/2051d Inode:33582178 硬链接:1
权限:(0600/-rw-------) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2022-11-03 23:42:21.278650501 +0800
最近更改:2022-08-26 08:03:02.385066189 +0800
最近改动:2022-08-26 08:03:02.385066189 +0800
创建时间:-
cut命令
cut命令用于按“列”提取文本字符,格式为cut [参数]文本
diff命令
diff命令用于比较多个文本文件的差异,格式为diff [参数]文件
使用--brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处
touch命令
touch命令用于创建空白文件或设置文件的时间,格式为touch [选项] [文件]
参数 | 作用 |
---|---|
-a | 仅修改“读取时间”(atime) |
-m | 仅修改“修改时间” (mtime) |
-d | 同时修改atime 与 mtime |
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1894 8月 26 08:03 anaconda-ks.cfg
[root@localhost ~]# echo abc12345 >> anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1903 11月 4 00:02 anaconda-ks.cfg
[root@localhost ~]# touch -d "2019-09-01 13:13" anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1903 9月 1 2019 anaconda-ks.cfg
mkdir命令
mkdir命令用于创建空白的目录,格式为mkdir [选项]目录
-p 递归创建
cp命令
cp命令用于复制文件或目录,格式为cp [选项]源文件 目标文件。
- 如果目标文件是目录,则会把源文件复制到该目录中;
- 如果目标文件也是普通文件,则会询问是否要覆盖它;
- 如果目标文件不存在,则执行正常的复制操作。
参数 | 作用 |
---|---|
-p | 保留原始文件的属性 |
-d | 若对象为链接文件,则保留链接文件的属性 |
-r | 递归复制 用于目录 |
-i | 若目标文件存在询问是否覆盖 |
-a | == -pdr |
mv命令
mv命令用于剪切文件或将文件重命名,格式为mv [选项]源文件 [目标路径|目标文件名]
rm命令
rm命令用于删除文件或目录,格式为rm [选项]文件
dd命令
dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为dd [参数]
参数 | 作用 |
---|---|
if | 输入文件名称 |
of | 输出文件名称 |
bs | 设置每个块的大小 |
count | 设置要复制块的个数 |
[root@localhost ~]# dd if=/dev/zero of=560_file count=1 bs=560M
记录了1+0 的读入
记录了1+0 的写出
587202560字节(587 MB)已复制,5.94452 秒,98.8 MB/秒
file命令
file命令用于查看文件的类型,格式为file文件名
[root@localhost ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
[root@localhost ~]# file /dev/sda
/dev/sda: block special
tar命令
tar命令用于对文件进行打包压缩或解压,格式为tar [选项] [文件]
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有什么文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压过程 |
-f | 目标文件名 |
-P | 保留原始的权限和属性 |
-p | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
[root@localhost ~]# tar -czvf etc.tat.gz /etc
tar: 从成员名中删除开头的“/”
/etc/
/etc/fstab
/etc/crypttab
····
[root@localhost ~]# mkdir etc
[root@localhost ~]# tar xzvf etc.tat.gz -C ./etc
etc/
etc/fstab
etc/crypttab
etc/mtab
·····
grep命令
grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为grep [选项] [文件]
参数 | 作用 |
---|---|
-b | 将可执行文件当作文本文件来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小 |
-h | 显示行号 |
-v | 反向选择--仅列出没有关键词的行 |
find命令
find命令用于按照指定条件来查找文件,格式为find [查找路径]寻找条件 操作、
参数 | 作用 |
---|---|
-name | 匹配名称 |
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间(-n指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 …… {}; | 后面可跟用于进一步处理搜索结果的命令(下文会有演示) |
[root@localhost ~]# find /etc -name "host*" -print
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/etc/avahi/hosts
[root@localhost ~]# find / -perm -4000 -print
\find: ‘/proc/73163/task/73163/fd/5’: 没有那个文件或目录
find: ‘/proc/73163/task/73163/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/73163/fd/6’: 没有那个文件或目录
find: ‘/proc/73163/fdinfo/6’: 没有那个文件或目录
/var/lib/docker/overlay2/8f6674c61338e50e09a91240923484d9434214af748ef56d8503b68c438b0ef2/diff/bin/mount
/var/lib/docker/overlay2/8f6674c61338e50e09a91240923484d9434214af748ef56d8503b68c438b0ef2/diff/bin/su
/var/lib/docker/overlay2/8f6674c61338e50e09a91240923484d9434214af748ef56d8503b68c438b0ef2/diff/bin/umount
/var/lib/docker/overlay2/8f6674c61338e50e09a91240923484d9434214af748ef56d8503b68c438b0ef2/diff/usr/bin/chfn
/var/lib/docker/overlay2/8f6674c61338e50e09a91240923484d9434214af748ef56d8503b68c438b0ef2/diff/usr/bin/chsh
[root@localhost ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;
find: 用户名 ‘linuxprobe’ 未知
[root@localhost ~]# find / -user qrrk -exec cp -a {} /root/findresults/ \;
find: ‘/proc/73228/task/73228/fd/5’: 没有那个文件或目录
find: ‘/proc/73228/task/73228/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/73228/fd/6’: 没有那个文件或目录
find: ‘/proc/73228/fdinfo/6’: 没有那个文件或目录
cp: 无法以目录"/home/qrrk" 来覆盖非目录"/root/findresults/qrrk"
[root@localhost ~]# find / -user root -exec cp -a {} /root/findresults/ \;
cp: 无法创建目录"/root/findresults/proc/irq": 权限不够
cp: 无法创建目录"/root/findresults/proc/sys/crypto": 权限不够
cp: 无法创建目录"/root/findresults/proc/sys/dev": 权限不够
cp: 读取"/proc/sys/fs/binfmt_misc/register" 时出错: 无效的参数
cp: 扩展"/root/findresults/proc/sys/fs/binfmt_misc/register" 失败: 无效的参数
输入输出重定向
- 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
- 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
- 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。
输入重定向
符号 | 作用 |
---|---|
命令 <文件 | 将文件作为命令的标准输入 |
命令 <<分界符 | 从标准输入中读入,直到遇见分界符才停止 |
命令 <文件1 >文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
输出重定向
符号 | 作用 |
---|---|
命令 >文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2>文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >>文件 | 将标准输出重定向到一个文件中(追加到原内容后) |
命令 2>>文件 | 将标准输出重定向到一个文件中(追加到原内容后) |
命令 >>文件 2>&1 或 命令 &>>文件 | 将标准输出和错误输出共同写入到文件中(追加到原内容后) |
管道命令符
命令A|命令B:命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”
命令行的通配符
[root@192 ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 11月 3 23:42 /dev/sda
brw-rw----. 1 root disk 8, 1 11月 3 23:42 /dev/sda1
brw-rw----. 1 root disk 8, 2 11月 3 23:42 /dev/sda2
brw-rw----. 1 root disk 8, 3 11月 3 23:42 /dev/sda3
[root@192 ~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 11月 3 23:42 /dev/sda1
brw-rw----. 1 root disk 8, 2 11月 3 23:42 /dev/sda2
brw-rw----. 1 root disk 8, 3 11月 3 23:42 /dev/sda3
[root@192 ~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 11月 3 23:42 /dev/sda1
brw-rw----. 1 root disk 8, 2 11月 3 23:42 /dev/sda2
brw-rw----. 1 root disk 8, 3 11月 3 23:42 /dev/sda3
[root@192 ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 11月 3 23:42 /dev/sda1
brw-rw----. 1 root disk 8, 3 11月 3 23:42 /dev/sda3
常用的转义字符
- 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
- 单引号(''):转义其中所有的变量为单纯的字符串。
- 双引号(""):保留其中的变量属性,不进行转义处理。
- 反引号(``):把其中的命令执行后返回结果
[root@192 ~]# PRICE=5
[root@192 ~]# echo "Price is $PRICE"
Price is 5
[root@192 ~]# echo "Price is $$PRICE"
Price is 74546PRICE
[root@192 ~]# echo "Price is \$$PRICE" # $$作用是显示当前程序的进程ID号码
Price is $5
[root@192 ~]# echo `uname -a`
Linux 192.168.129.133 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[root@192 ~]# uname -a
Linux 192.168.129.133 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
环境变量
命令在Linux中的执行分为4个步骤:
第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
第2步:Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用alias命令来创建一个属于自己的命令别名,格式为“alias别名=命令”。若要取消一个命令别名,则是用unalias命令,格式为“unalias别名”。
第3步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令。
第4步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。
变量名称 | 作用 |
---|---|
HOME | 用户的主目录 |
SHELL | 用户在使用的shell解释器名称 |
HISTSIZE | 输出的历史命令记录条数 |
HISTFILESIZE | 保存的历史命令记录条数 |
MALL | 邮件保存路径 |
LANG | 系统语言、语系名称 |
RANDOM | 生成一个随机数字 |
PS1 | Bash解释器的提示符 |
PATH | 定义解释器搜素用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |
可以使用export命令将其提升为全局变量,这样其他用户也就可以使用它
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 |
?字符串 | 在文本中从下至上搜索该字符串 |
/字符串 | 在文本中从上至下搜索该字符串 |
/etc/hostname #主机名称文件 配置主机名称
/etc/sysconfig/network-scripts #目录中存放着网卡的配置文件 配置网卡信息
/etc/yum.repos.d/ #目录中存放着Yum软件仓库的配置文件 配置Yum软件仓库
Shell
- $0对应的是当前Shell脚本程序的名称,
- $#对应的是总共有几个参数,
- $*对应的是所有位置的参数值,
- $?对应的是显示上一次命令的执行返回值,
- $1、$2、$3……则分别对应着第N个位置的参数值
运算符 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
[root@192 ~]# [ -d /etc/fstab ]
[root@192 ~]# echo $?
1
操作符 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
操作符 | 作用 |
---|---|
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
if
if 条件测试操作
then 命令序列
fi
#! /bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then mkdir -p $DIR
fi
if 条件测试操作
then 命令序列1
else 命令序列2
fi
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
for
for 变量名 in 取值列表
do
命令序列
done
while
while 条件测试操作
do
命令序列
done
case
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
......
*)
默认序列
esac
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
计划任务服务程序
- 一次性计划任务:今晚11点30分开启网站服务。
- 长期性计划任务:每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz。
如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm任务序号”。
如果我们希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。
字段 | 说明 |
---|---|
分 | 取值为0~59的整数 |
时 | 取值为0~23的任意整数 |
日 | 取值为1~31的任意整数 |
月 | 取值为1~12的任意整数 |
星期 | 取值为0~7的任意整数,其中0与7均为星期日 |
命令 | 要执行的命令或程序脚本 |
useradd
useradd命令用于创建新的用户,格式为useradd [选项]用户名
参数 | 作用 |
---|---|
-d | 指定用户的家目录(默认为/home/username) |
-e | 帐号有效截至日期,格式:YYYY-MM-DD. |
-u | 指定该用户的默认UID |
-g | 指定一个初始的用户基本组(必须已存在) |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认Shell |
groupadd
groupadd命令用于创建用户组,格式为groupadd [选项]群组名
usermod
usermod命令用于修改用户的属性,格式为usermod [选项]用户名
参数 | 作用 |
---|---|
-c | 填写帐号的备注信息 |
-d -m | -m与-d连用,可重新指定用户的家目录并自动把旧的数据转移过去。 |
-e | 帐户到期时间,格式“YYYY-MM-DD” |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登陆系统 |
-U | 解锁用户,允许其登陆系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
passwd
passwd命令用于修改用户密码、过期时间、认证信息等,格式为passwd 选项 用户名
参数 | 作用 |
---|---|
-l | 锁定用户禁止其登陆 |
-u | 解除锁定,允许用户登陆。 |
--stdin | 允许从标准输入修改用户密码,如(echo "NewPassWord" | passwd --stdin Username) |
-d | 使帐号无密码 |
-e | 强制用户下次登陆时修改密码 |
-S | 显示用户的密码状态 |
userdel
userdel命令用于删除用户,格式为userdel [选项]用户名
参数 | 作用 |
---|---|
-f | 强制删除用户 |
-r | 同时删除用户,家目录与其相关文件 |
文件权限与归属
- -:普通文件。
- d:目录文件。
- l:链接文件。
- b:块设备文件。
- c:字符设备文件。
- p:管道文件。
chattr
chattr命令用于设置文件的隐藏权限,格式为chattr [参数]文件
参数 | 作用 |
---|---|
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而 不能新建或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) |
A | 不再修改这个文件或目录的最后访问时间(atime) |
b | 不在修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用dump命令备份时忽略本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后回复 |
t | 让文件系统支持尾部合并(tail-merging) |
X | 可以直接访问压缩文件中的内容 |
su
su命令用于变更使用者的身份(切换登录者),格式为su[-]用户名
sudo命令用于给普通用户提供额外权利来完成原本超级用户才能完成的任务,格式为sudo[参数]命令名称
参数 | 作用 |
---|---|
-h | 列出帮助信息。 |
-l | 列出当前用户可执行的命令。 |
-u 用户名或UID值 | 以指定的用户身份执行命令。 |
-k | 清空安全时间,下次执行sudo 时需要再次密码验证。 |
-b | 在后台执行指定的命令。 |
-p | 更改询问密码的提示语。 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~