Linux相关知识点
一、什么是Linux
Linux 是一个开源、免费的操作系统内核,支持多用户、多任务运行,以稳定、安全、高效著称,广泛应用于服务器、嵌入式设备和个人电脑。基于 Unix 设计理念,它由全球开发者共同维护,并衍生出众多发行版
二、Linux分类
1、企业
RHEL、CentOS、SLE、Ubuntu LTS
2、个人
Ubuntu Desktop、Fedora、Linux Mint、Debian
三、Linux中的操作与命令
1、文件相关
ls
查询目录内容
ls [选项] [目录或文件]
-a
显示目录下所有文件,包括隐藏文件
-l
详细的显示目录下的文件信息
-R
递归显示目录下的文件
-h
文件大小单位为K、M、G,与-l搭配使用
-A
除了"."、".."外的所有文件
-F
在文件名后加符号区分文件
-d
只看文件夹文件夹本身
touch
新建空文件,或修改文件的时间戳
touch [选项] 文件名
vim
文本编辑器
vim [选项] 文件名
i,a
进入编辑模式,i从当前光标开始编辑,a从当前光标下一位开始编辑
h,j,k,l
分别是向左下右上移动光标
^
去到光标所在行的行首
$
去到光标所在行的行尾
gg
去到第一行的行首
G
去到最后一行的行首
#G
指定去到第#行的行首
yy
复制光标所在行
#yy或y#y
从光标所在行向下复制#行
p
从光标所在行的下一行开始粘贴
dd
删除光标所在行
#dd或d#d
从光标所在行向下删除#行
dw
删除光标所在的单词
x
删除光标所在的字符
u
撤销操作
/关键字
查找关键字
末行模式
set nu
显示行号
set nonu
取消显示行号
set ic
忽略大小写
%s/test/linux/g
查找替换,全文查找test并替换为linux
%:表示对整个文件进行操作(也可以指定行范围,如 :10,20s/old/new/g)。
s:替换(substitute)命令。
/g:全局替换(每行所有匹配项,不加 g 则只替换每行的第一个匹配)。
wq
保存并退出
q!
强制退出
ESC
切换到命令模式
mkdir
创建空目录
mkdir [选项] 目录名称
-v
显示命令执行过程
-p
如果父目录不存在,则创建父目录
mv
将目录由一个目录移到另一个目录,可用于改名
mv [选项] 源文件或目录 目标文件或目录
rmdir
删除空目录
rmdir [选项] 目录名称
-p
删除目录后如果父目录为空,则父目录也删除
rm
删除一个目录中一个或多个文件
rm [选项] 文件名
-r
递归删除目录以及目录的内容
-f
强制删除文件,删除过程不提示
cp
文件或目录的复制
cp [选项] 源文件或目录 目标文件或目录
-R
递归复制
scp
远程拷贝
scp [选项] 源文件 目标路径
-r
递归复制
-P
指定端口
cat
一次性查看文件内容 ,适用于内容较少
cat [选项] 文件名
-n
显示行号
-b
与-n相似,但空白行不加行号
less/more
查看文件内容,支持上下翻页,适用于内容较多
less [选项] 文件名
more [选项] 文件名
head
从文件头部开始显示文件部分内容,默认10行
head [选项] 文件名
-n
指定显示文件行数
tail
从文件尾部开始显示文件部分内容,默认10行
tail [选项] 文件名
-n
指定显示文件行数
-f
实时显示文件追加内容
tr
简单的替换命令,从标准输入中替换字符,将结果写到标准输出
tr [选项] 字符串1 字符串2
cat test.txt | tr "m" "M"
|(管道)
把一个命令的输出传递给另外一个命令作为输入
head test.txt | tail -n 2
grep
按行查找文件中符合条件的字符串
grep [选项] 文件名
-i
忽略大小写
-h
显示行号
-v
显示不包含匹配文本的所有内容
-A num
输出匹配行以及之后的num行
-B num
输出匹配行以及之前的num行
cut
按行截取并显示指定文件内容
cut [选项] 文件名
-d
指定截取的字段分隔符
-f
显示指定的字段内容
如-f1就显示分割后第一个字段
find
find path -option 关键字
-name
通过文件名查找
-iname
通过文件名查找,忽略大小写
-user
通过拥有者查找
-size
通过文件大小查找
-mtime
通过文件最后修改时间查找
-type
通过文件类型查找
-maxdepth
控制查找深度
tar
(归档)打包、压缩文件
tar [选项] 输出文件.tar[.gz|.bz2|.xz] 文件或目录...
-z:调用gzip
-j:调用bzip2
-J:调用xz
-x:拆包
-c:创建打包文件
-v:显示命令执行过程
-f:指定文件名称
-C:指定解压目录
zip
gzip 文件名
unzip
unzip 文件名.zip
bzip2
bzip2 文件名
bunzip2
bunzip2 文件名.bz2
gzip
gzip 文件名
gunzip
gunzip 文件名.gz
xz
xz 文件名
unxz
unxz 文件名.xz
cd
切换目录
cd [选项] [文件目录]
cd ~用户名:去指定用户家目录
重定向
标准输入,0
标准输出,1
标准错误,2
command > file 标准输出重定向到一个文件,错误仍然输出屏幕
command > > file 标准输出重定向到一个文件(追加)
command 1 > file 标准输出重定向到一个文件 command 2 >> file 标准错误重定向到一个文件(追加)
command > file 2>&1 标准输出和标准错误一起重定向到一个文件
command >> file 2>&1 标准输出和标准错误一起重定向到一个文件(追加)
command 1> file 2>file2 标准输出重定向file,标准错误重定向到file2文件
command < file 以file作为文件标准输入 command < file1 >file2 以file1作为标准输入,file2作为标准输出 /dev/null
文件是黑洞 ls > /dev/null 2 >&1
pwd
显示当前工作目录的绝对路径
echo
字符串输出
echo [选项] 字符串
-e
开启转义
-n
不输出换行符
echo对转义很敏感,若要屏蔽可用\
test
文件测试
用于检查某个条件是否成立
语法:test condition 或者 [ condition ]
中括号两边要有空格
test -e 文件名 如果文件存在则为真
test -d 文件名 如果文件存在且为目录则为真
test -f 文件名 如果文件存在且为普通文件则为真
test -L 文件名 如果文件存在且为符号链接则为真
test -r 文件名 如果文件存在且可读为真
test -s 文件名 如果文件存在且至少有一个字符则为真
字符串测试
= 等于则为真
!= 不相等则为真
\> 大于则为真
\< 小于则为真
-z 字符串长度为0则为真
-n 字符串的长度不为0则为真
数值测试
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
逻辑操作符
-a 或 && 逻辑与,两边为真则为真,否则为假
-o 或 || 逻辑或,操作符两边有一边为真,结果就为真,否则为假
! 逻辑否,条件为假,结果为真
sed
行命令编辑器,能逐行处理文件,将输出结果发送到屏幕
sed [选项] AddressCommand 文件名
-n
静默模式,进现实处理后的行,与p配合
sed -n '3,9p' /etc/passwd 只显示第3到9行
sed ‘s/abc/ABC/g’ /etc/passwd 将/etc/passwd中所有abc替换为ABC
awk
强大的文本分析工具,用于数据分析并生成报告
awk [选项] ‘PATTERN{ACTION STATMENTS}’ 文件名
内置变量
$0:整行内容
$1, $2...:第 1、2...列(默认以空格/Tab 分隔)
NR:当前行号
NF:当前行的列数
FS:输入字段分隔符(默认空格)
OFS:输出字段分隔符(默认空格)
模式(PATTERN):筛选条件(如 /regex/、NR>10,可省略)。
动作(ACTION STATMENTS):处理命令(如 print $1,必须用 {} 包裹)
du
du -h test.txt 查看test.txt文件占用磁盘情况
wc
统计文件中行数、单词数、字节数/字符数
wc [选项] 文件名
-l 仅统计行数(Line count)
-w 仅统计单词数(Word count)
-c 仅统计字节数(Byte count)
-m 仅统计字符数(Character count,需文本支持多字节)
-L 显示最长行的长度(字符数)
source
与bash类似,运行命令
source /etc/profile
bash
bash 文件名.sh
tee
把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中如果想看到输出的同时,把输出也同时拷入一个文件
-a:追加
whereis
whereis [选项] 命令
-b
只查找二进制文件
-m
只查找手册页
-s
查找源程序文件
2、用户相关
chmod
用于改变文件或目录的访问权限
文字设定法
chmod [who] [+|-|=] [mode] 文件名
who:u、g、o、a
属主、属组、其他用户、所有用户
数值设定法
chmod [mode] 文件名
-R
递归授予权限
su
切换用户身份
su [选项] [用户名]
- 或 -l 模拟登录(加载目标用户的环境变量,如 $HOME, $PATH)
-c 以目标用户身份执行单条命令后退出
-s 指定 Shell(如 -s /bin/bash)
-m 保留当前环境变量(不切换用户配置)
chown
更改文件或目录的属主和属组
chown [选项] 用户或组 (属主:属组)文件或目录
-R
递归修改
useradd
新建用户
useradd [选项] 用户名
groupadd
用户分组
groupadd [选项] 组名称
passwd
修改密码
passwd [选项] 用户名
userdel
删除用户
userdel [选项] 用户名
-r
完全删除用户
groupdel
删除组
groupdel [选项] 组名称
id
显示用户和组的身份信息,包括 UID(用户ID)、GID(组ID) 以及所属的 附加组
id [选项] [用户名]
-u 仅显示 UID(用户ID)
-g 仅显示主 GID(组ID)
-G 显示所有所属组的 GID
ssh
加密远程登录和管理
ssh [选项] [用户名@]主机名或IP [命令]
-p 指定远程主机的SSH端口(默认22)
-i 指定私钥文件(默认用 ~/.ssh/id_rsa)
-v 显示详细连接过程(调试用,-vvv 更详细)
3、系统相关
at
at [ -f script ] 时间
设定任务执行时间
at -f:运行脚本
at -l:查看所有任务
at-r:删除任务
systemctl
systemctl start mariadb 启动mysql服务
systemctl status httpd 查看运行状态
systemctl stop httpd 关闭服务
systemctl restart mariadb 启动mysql服务
setenforce
临时关闭selinux
setenforce 0
date
date [选项]
date + "%Y-%m-%d"
df
df -h:查看系统磁盘使用情况
reboot
重启系统
shutdown
关机
yum
基于RPM,从指定的服务器自动下载RPM包并安装
yum [选项] 软件名
-y
忽略二次提醒
yum install <package> 安装指定软件包
yum remove <package> 卸载软件包
yum update 更新所有已安装的软件包
yum update <package> 更新指定软件包
yum check-update 检查可用的更新(不执行更新)
yum search <keyword> 搜索软件包
yum info <package> 查看软件包信息
yum list 列出所有已安装和可用的软件包
yum list installed 列出已安装的软件包
yum list available 列出可用的软件包
yum repolist 查看已启用的仓库
rpm
通过包管理工具,安装rpm二进制文件
rpm
-ivh
安装软件
-qa
查询所有已安装文件
--prefix
指定包安装路径
-e
卸载软件
tree
以树状结构显示目录内容
tree [选项] [目录路径]
-a 显示所有文件(包括隐藏文件)
-d 仅显示目录(不显示文件)
-L n 限制显示层级深度(如 -L 2 只显示2层)
crontab
分 时 日 月 周
-u:root用户才能使用
-e:编辑crontab文件
-l:列出crontab文件中的内容
-r:删除crontab文件
ifconfig
配置和显示网络接口信息
ifup
启动网卡
ifup 网卡
kill
kill [选项] 进程号
-s
指定需要发送的型号,可以是信号名也可以是数字
-p
指定kill命令
-l
显示信号名称列表
-9
强行杀掉指定进程
top
top [选项]
netstat
netstat -tupln
获取主机端口占用情况
ps
显示当前运行进程的快照
ps 选项
-ef
显示系统所有进程信息
free
提供简洁的查看系统内存使用情况
free [选项]
-h
优雅显示
ping
ping ipaddr 检查与被测主机网络是否流畅
wget
命令行下载工具
wget [选项] [URL]
-O <文件名> 指定下载文件的保存名称
-P <目录> 指定下载文件的保存目录
-q 静默模式(不显示输出)
-r 递归下载(下载整个网站)
-c 断点续传(继续未完成的下载)
-b 后台下载
curl
用于与服务器进行数据传输
curl [选项] [URL]
#下载文件(自动命名)
curl -O https://example.com/file.zip
断点续传
curl -C - -O https://example.com/bigfile.zip
上传文件
curl -T file.txt ftp://ftp.example.com/
env
查看当前所有环境变量
read
从键盘或文件的某一行文本中读入信息,并将其赋给一个变量
read -p:提示信息
history
查看历史命令
help
查看shell内部命令帮助文档
help命令
man
查看命令的在线帮助手册
man命令
sleep
sleep 时间
&
命令放后台执行
command &
ip
替代传统的 ifconfig
# 显示所有网络接口
ip link show
# 启用/禁用接口
ip link set eth0 up
ip link set eth0 down
ln
在不同位置访问同一文件或目录
创建硬链接
ln /path/to/file /path/to/hard_link
创建软连接
# 为文件创建软链接
ln -s /path/to/original_file.txt /path/to/link_file
# 为目录创建软链接
ln -s /home/user/documents /home/user/docs_shortcut
4、一些需要注意的点
(1)ls -l结果中 “-”、“d”、“l”分别代表什么
- 普通文件 文本文件、二进制文件、压缩文件等常规文件。
d 目录(Directory) 包含其他文件或目录的文件夹。
l 符号链接(Link) 指向其他文件或目录的软链接(类似 Windows 的快捷方式)。
(2)su - 与su的区别
su - 和 su 的主要区别在于是否加载目标用户的环境变量和配置文件。不加-是不完全,临时的切换
(3)用enable如何设置开机自启
systemctl enable myapp.service
(4)$?代表什么意思
查看上一条命令是否成功
四、shell脚本
脚本开头为#!
系统变量
系统创建的,大写的,系统变量可以继承,用户变量不可以
export VAR =value 创建环境变量
echo $VAR 查看环境变量
unset VAR 清除变量
用户变量
用户自己创建的变量
set 查看当前所有变量
位置变量
属于只读变量,$1,$2,$3……
特殊变量
s# 传递到脚本的参数个数
$$ 脚本运行的当前进程id号
$@ 传入脚本的所有参数
$? 显示最后命令的退出状态,0表示正确,其他任何值表示错误
流程控制语句
条件判断
if [ condition ]; then
# 条件成立时执行的代码
elif [ condition2 ]; then
# 条件2成立时执行的代码
else
# 所有条件都不成立时执行的代码
fi
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-z "string" 字符串为空
-n "string" 字符串非空
-f file 文件存在
-d dir 目录存在
循环结构
for循环
for var in item1 item2 ...; do
# 循环体
done
C风格for循环
for ((i=0; i<5; i++)); do
echo "Count: $i"
done
while循环
while [ condition ]; do
# 循环体
done
until循环
until [ condition ]; do
# 循环体(条件为假时执行)
done
选择结构
case "$variable" in
pattern1)
# 匹配 pattern1 时执行的代码
;;
pattern2)
# 匹配 pattern2 时执行的代码
;;
*)
# 默认情况
;;
esac
循环控制
break 退出当前循环
continue 跳过当前循环,进入下一次循环
exit 退出整个脚本
五、如何验证服务启动成功了
(1)使用ps命令:ps -ef | grep 服务名
(2)使用netstat -tupln获取主机端口的占用情况
(3)使用curl直接访问,若能访问成功就代表服务起好了
(4)使用systemctl status 服务名,查看服务状态,若显示active(running)就表示服务起好了