Linux基础
1 计算机系统
服务器按应用功能可分为
Web服务器、数据库服务器、文件服务器、中间件应用服务器、日志服务器、监控服务器、程序版本控制服务器、虚拟机服务器、邮件服务器、打印服务器、域控制服务器、多媒体服务器、通讯服务器、ERP服务器等
服务器OS: RHEL ,CentOS , Rocky , Ubuntu ,Windows Server ,AIX
获取发行版,国内镜像网站下载
##下载安装注意要开启虚拟化功能
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
https://mirrors.tuna.tsinghua.edu.cn/centos/
2 Linux基础
2.1 设置主机名
##个人设置后面跟IP比较便于后续做练习,重进生效
[root@anolis-31 ~]$hostnamectl set-hostname anolis-31.wang.org
##查看版本号
[root@anolis-31 ~]$cat /etc/os-release
NAME="Anolis OS"
VERSION="8.9"
ID="anolis"
ID_LIKE="rhel fedora centos"
VERSION_ID="8.9"
PLATFORM_ID="platform:an8"
PRETTY_NAME="Anolis OS 8.9"
ANSI_COLOR="0;31"
HOME_URL="https://openanolis.cn/"
2.2 命令提示符prompt
##\e 控制符\033
##\u 当前用户
##\h 主机名简称
##\w 当前工作目录
##.bashrc,只对当前用户有效,修改颜色观察方便
[root@anolis-31 ~]$echo "PS1='\[\e[1;35m\][\u@\h \W]\$\[\e[0m\]'" >> .bashrc
##使用id命令确认当前用户是否为管理员,id为0是管理员
[root@anolis-31 ~]$id
uid=0(root) gid=0(root) 组=0(root)
2.3 执行命令
##命令查看
[root@anolis-31 ~]$type echo
echo 是 shell 内建
[root@anolis-31 ~]$whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@anolis-31 ~]$which ls
alias ls='ls --color=auto'
/usr/bin/ls
##注意查看别名,unalias取消;可使用“\”执行原命令
[root@anolis-31 ~]$alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
##可使用“\”分行
[root@anolis-31 ~]$\
> echo \
> hello \
>
hello
2.4 echo打印特殊字符
##-E (默认)不支持 \ 解释功能
##-n 不自动换行
##-e 启用 \ 字符的解释功能 显示变量
##启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
###\a 发出警告声
###\b 退格键
###\c 最后不加上换行符号
###\n 换行且光标移至行首
###\r 回车,即光标移至行首,但不换行
###\\ 插入\字符
##''单引号取消变量
[root@anolis-31 ~]$echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@anolis-31 ~]$echo '$PATH'
$PATH
2.5 命令行:`` $() '' "" 区别变量和命令
##$(COMMAND)
##`COMMAND`
##''内容视为字符;""内容区别变量;``和$()引用命令
[root@rocky-41 ~]#echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@rocky-41 ~]#echo "echo $HOSTNAME"
echo rocky-41
[root@rocky-41 ~]#echo `echo $HOSTNAME`
rocky-41
[root@rocky-41 ~]#echo $(echo $HOSTNAME)
rocky-41
2.5 命令行:{}实现重复打印
[root@rocky-41 ~]#echo file{1,3,5}
file1 file3 file5
[root@rocky-41 ~]#echo file{1..5}
file1 file2 file3 file4 file5
[root@rocky-41 ~]#echo file{a..d}
filea fileb filec filed
2.6 bash快捷键
##比较习惯的快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出,解锁
Ctrl + c 终止命令
Ctrl + w 从光标处向左删除至单词首
esc+. 上一个命令的选项
3 文件管理和IO重定向
3.1 文件系统目录结构
##常用目录
/: 根目。
/bin: 存放系统最基本的命令执行文件(二进制文件),如ls、cp、rm等。
/boot: 包含Linux内核及引导加载程序(如GRUB)所需的文件。
/dev: 设备文件存储位置,存放着Linux所有外部设备。
/etc: 系统配置文件存放的目录,一些服务器的配置文件也在这里,如用户账号及密码配置文件。
/home: 用户主目录的基点。
/lib: 系统最基本的动态链接共享库。
/lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/mnt: 临时挂载点目录,通常用于挂载额外的文件系统或设备。
/opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。
/proc: 虚拟文件系统,存放着关于系统内核、进程、外部设备状态等信息。
/root: Linux超级权限用户root的家目录。
/sbin: 存放系统管理命令。
/srv: 该目录存放一些服务启动之后需要提取的数据。
/tmp: 用于存放临时文件的目录。
/usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的“Program Files”目录。
/usr/bin: 存放系统用户使用的应用程序。
/usr/sbin: 存放超级用户(root)使用的系统管理程序。
/usr/lib: 存放程序使用的共享库文件。
/usr/local: 存放软件升级包。
/usr/share: 存放结构化的独立的数据文件。
/usr/src: 存放内核源代码默认的目录。
/usr/include: Linux下开发和编译应用程序所需要的头文件。
/var: 包括各种日志文件(如系统启动日志等)、用户邮件目录等。
##文件类型
- 普通文件
d 目录文件directory
l 符号链接文件link
b 块设备block
c 字符设备character
p 管道文件pipe
s 套接字文件socket
3.2 文件通配符
##常用文件通配符
* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
? 匹配任何单个字符 ,一个汉字也算一个字符
~ 当前用户家目录
- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 一个字母
[A-Z] 一个字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
[^a-z] 匹配列表中的所有字符以外的字符
##其它常用预定义的字符类
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母 ,表示 a-z
[:upper:]: 任意大写字母 ,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[root@rocky-41 ~]#ll [[:lower:]].conf
-rw-r--r-- 1 root root 0 Jun 20 17:18 a.conf
[root@rocky-41 ~]#ll [[:upper:]].conf
-rw-r--r-- 1 root root 0 Jun 20 17:19 A.conf
3.3 文件操作命令
pwd\basename&dirname\ls\stat\cp+date\tree\mkdir
[root@anolis-31 ~]$basename /etc/passwd
passwd
[root@anolis-31 ~]$dirname /etc/passwd
/etc
[root@anolis-31 ~]$pwd
/root
##ls常用选项
##-a 包含隐藏文件
##-l 显示额外的信息
##-S 按从大到小排序,-h打印大小格式
##-t 按mtime排序,-u配合-t选项,显示并按atime从新到旧排序
[root@anolis-31 etc]$ls -l -S -h | head
总用量 1.1M
-rw-r--r--. 1 root root 677K 5月 26 2023 services
-rw-r--r-- 1 root root 15K 6月 19 11:09 ld.so.cache
-rw-r--r--. 1 root root 8.4K 5月 25 20:12 kdump.conf
-rw-r-----. 1 root tss 6.9K 7月 18 2022 tcsd.conf
-rw-r--r--. 1 root root 6.5K 9月 10 2018 protocols
-rw-r--r--. 1 root root 5.1K 7月 25 2023 DIR_COLORS.256color
-rw-r--r--. 1 root root 5.1K 7月 19 2022 man_db.conf
-rw-r--r--. 1 root root 5.1K 1月 24 23:25 makedumpfile.conf.sample
-rw-r--r-- 1 root root 4.9K 6月 27 2023 wgetrc
##stat显示文件状态
[root@anolis-31 etc]$stat passwd
文件:passwd
大小:1128 块:8 IO 块:4096 普通文件
设备:fc00h/64512d Inode:16791118 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2024-06-20 11:08:55.280029695 +0800
最近更改:2024-06-19 11:08:52.581685463 +0800
最近改动:2024-06-19 11:08:52.582685463 +0800
创建时间:2024-06-19 11:08:52.581685463 +0800
##cp复制文件和目录
###-r, -R 递归复制目录及内部的所有内容
###-a 归档,常用于备份功能,保留权限等属性
[root@anolis-31 ~]$cp -R /etc /data/
[root@anolis-31 ~]$ll /data/
总用量 12
drwxr-xr-x 80 root root 8192 6月 20 17:40 etc
##有没有“/”都可以,-R就是递归复制目录
[root@anolis-31 ~]$cp -R /etc/ /data/
cp:是否覆盖'/data/etc/yum.repos.d/AnolisOS-AppStream.repo'? ^C
##加了*,则表示拷贝目录下的所有文件
[root@anolis-31 ~]$cp -R /etc/* /data/
[root@anolis-31 ~]$ll /data/
##cp+date,目录备份
[root@anolis-31 ~]$cp -a /etc/ /data/etc-`date +%F_%H-%M-%S`
[root@anolis-31 ~]$ll /data/
总用量 36
drwxr-xr-x. 80 root root 8192 6月 20 16:37 etc-2024-06-20_17-44-41
drwxr-xr-x. 80 root root 8192 6月 20 16:37 etc-2024-06-20_17-44-51
drwxr-xr-x. 80 root root 8192 6月 20 16:37 etc-2024-06-20_17-45-01
##tree -d值显示目录
[root@anolis-31 ~]$tree /data/ -d | head
/data/
├── etc-2024-06-20_17-44-41
│ ├── alternatives
│ ├── audit
│ │ ├── plugins.d
│ │ └── rules.d
│ ├── authselect
│ │ └── custom
│ ├── bash_completion.d
│ ├── binfmt.d
##mkdir -p多层级目录直接创建
[root@anolis-31 ~]$mkdir /data/fdir/sdir
mkdir: 无法创建目录 “/data/fdir/sdir”: No such file or directory
[root@anolis-31 ~]$mkdir -p /data/fdir/sdir
[root@anolis-31 ~]$ll /data/fdir/sdir
总用量 0
3.4 inode节点,ln创建链接
##inode文件的元数据
##df -i查看,inode节点使用完即使有物理空间也无法创建新文件
[root@anolis-31 ~]$df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 243341 390 242951 1% /dev
tmpfs 248239 1 248238 1% /dev/shm
tmpfs 248239 554 247685 1% /run
tmpfs 248239 18 248221 1% /sys/fs/cgroup
/dev/mapper/ao-root 8910848 65767 8845081 1% /
/dev/sda1 524288 310 523978 1% /boot
tmpfs 248239 5 248234 1% /run/user/0
[root@anolis-31 ~]$df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 973364 0 973364 0% /dev
tmpfs 992956 0 992956 0% /dev/shm
tmpfs 992956 8816 984140 1% /run
tmpfs 992956 0 992956 0% /sys/fs/cgroup
/dev/mapper/ao-root 17811456 2549040 15262416 15% /
/dev/sda1 1038336 207608 830728 20% /boot
tmpfs 198588 0 198588 0% /run/user/0
##硬链接本质上就给一个文件起一个新的名称,实质是同一个文件,不会有新的inode节点,所以不支持跨分区
##一般使用软链接,unlink取消
##软连接最好不要删除,rm -rf /data/dirlink/,无操作可能删掉软链接对应目录内的文件
[root@anolis-31 ~]$ln -s /etc/passwd /root/passwd.link
[root@anolis-31 ~]$ll
总用量 0
lrwxrwxrwx 1 root root 11 6月 20 18:00 passwd.link -> /etc/passwd
[root@anolis-31 ~]$unlink passwd.link
3.5 cat+>>+EOF重定向多行文件
##fd文件描述符,所有操作都会有进程,都有会文件描述符
[root@anolis-31 ~]$sleep 30
##新窗口打开查看,0:标准输入,1:标准输出,2:标准错误
[root@anolis-31 ~]$ll /proc/`pidof sleep`/fd
总用量 0
lrwx------ 1 root root 64 6月 20 18:14 0 -> /dev/pts/0
lrwx------ 1 root root 64 6月 20 18:14 1 -> /dev/pts/0
lrwx------ 1 root root 64 6月 20 18:14 2 -> /dev/pts/0
##将输入或输出显示到非屏幕,即非如上的/dev/pts/0,实现重定向
###1> 或 > 把STDOUT重定向到文件
###2> 把STDERR重定向到文件
###&> 把标准输出和错误都重定向
###>> 两个箭头表示追加,不覆盖
##使用>>+EOF实现脚本输入文件
[root@anolis-31 ~]$cat >>hello.sh <<EOF
> echo hello
> EOF
3.6 |&tee 管道重定向,xargs参数替换
##STDERR默认不能通过管道转发,可利用2>&1实现
##使用 | 管道传送结果,使用xargs接受每个结果
[root@anolis-31 ~]$ls /etc/ | head | xargs echo
adjtime aliases alternatives anacrontab anolis-release at.deny audit authselect bash_completion.d bashrc
##使用tee实现两个重定向
[root@anolis-31 ~]$ls /etc/ | head | tee a.txt | xargs echo
adjtime aliases alternatives anacrontab anolis-release at.deny audit authselect bash_completion.d bashrc
[root@anolis-31 ~]$cat a.txt
adjtime
aliases
alternatives
anacrontab
anolis-release
at.deny
audit
authselect
bash_completion.d
bashrc
3.7 find文件查找与处理
##find [OPTION]... [查找路径] [查找条件] [处理动作]
##-name 支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
##-iname 不区分字母大小写
##-type f普通文件,d目录,l链接文件
##-size [+|-] unit
##-atime 按时间
##组合条件 -a与,-o或,-not !非
##处理动作 -ls显示信息;-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会 交互式要求用户确认
##查找大于10M的文件
[root@anolis-31 ~]$find /var -size +10M -ls
33575047 35308 -rw-r--r-- 1 root root 36155392 6月 19 11:09 /var/lib/rpm/Packages
##将/var/log下存在20天前的root属主的文件迁移
[root@anolis-31 ~]$find /var/log/ -ctime +20 -user root -exec mv {} /data/log \;
3.8 tar打包和解压缩
##.gz后缀:gzip包
##.zip后缀:zip包
##tar.gz后缀,tar目录后压缩
##查看内容不解压缩,对应后缀的命令
[root@anolis-31 ~]$unzip -l nginx-module-vts-master.zip
[root@anolis-31 ~]$gunzip --list nginx-1.24.0.tar.gz
[root@anolis-31 ~]$tar -t -f nginx-1.24.0.tar.gz
##打包目录并压缩
[root@anolis-31 ~]$tar zcvf etc.tar.gz /etc/
[root@anolis-31 ~]$tar jcvf etc.tar.bz2 /etc/
##解压缩到指定目录
[root@anolis-31 ~]$tar xf etc.tar.gz -C /data/
[root@anolis-31 ~]$unzip nginx-module-vts-master.zip -d /data/
4 用户组和权限
4.1 用户和组
##管理员:uid0,1-60000其它为普通用户
##用户组:gid0,1-999系统组(CentOS7以后),1000+用户使用
[root@anolis-31 ~]$id
uid=0(root) gid=0(root) 组=0(root)
[root@anolis-31 ~]$id wang
uid=1000(wang) gid=1000(wang) 组=1000(wang)
##/etc/passwd:用户及其属性信息(名称、 UID、主组ID等)
##/etc/shadow:用户密码及其相关属性
##/etc/group:组及其属性信息
##/etc/gshadow:组密码及其相关属性
##/home/wang家目录;/bin/bash默认使用的shell
[root@anolis-31 ~]$getent passwd | grep wang
wang:x:1000:1000:wang:/home/wang:/bin/bash
##密码一般sha512加密;0随时可以改密码;99999密码永不过期;
[root@anolis-31 ~]$getent shadow | grep wang
wang:$6$nAfbArduVPH.4nYC$akfoN2stL.wyujdrWzpKU/ZV1BvvdZU4hsv1F7VAp5HttLt3wLmFOWMCO4W.RFY1c8ayyUmxn7ddubHMMeW58/::0:99999:7:::
4.2 useradd/groupadd管理命令
##useradd常用选项
##-u UID
##-g GID 指明用户所属基本组,可为组名,也可以GID
##-c "COMMENT“ 用户的注释信息
##-d HOME_DIR 以指定的路径(不存在)为家目录
##-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
##-r 创建系统用户
##-m 创建家目录,用于系统用户
##-M 不创建家目录,用于非系统用户
##-p 指定加密的密码
##创建系统用户时,先创建组,-r系统组,-g指定id
[root@anolis-31 ~]$groupadd -g 48 -r apache
##创建系统用户,-r系统用户,-u指定id,-g指定组,-s指定默认shell(nologin不登录),-d指定家目录,-c描述,最后加用户名称
[root@anolis-31 ~]$useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache
##验证
[root@anolis-31 ~]$getent passwd | tail -1
apache:x:48:48:Apache:/var/www:/sbin/nologin
[root@anolis-31 ~]$getent group | tail -1
apache:x:48:
##usermod -L锁定与-U解锁用户,无法登录,但root用户可以切换
[root@anolis-31 ~]$usermod -L wang
[root@anolis-31 ~]$usermod -U wang
##userdel删除,-f强制,-r删除家目录和邮箱
##groupdel删除,-f强制
[root@anolis-31 ~]$userdel -rf wang
[root@anolis-31 ~]$groupdel apache
groupdel:不能移除用户“apache”的主组
[root@anolis-31 ~]$groupdel -f apache
4.3 passwd设置密码
##默认有密码策略,不能设置简单密码
##常用-e:强制用户下次登录修改密码;-f:强制操作
[root@anolis-31 ~]$echo -e '123456\n123456' | passwd -f wang
更改用户 wang 的密码 。
新的 密码:无效的密码: 密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
##下次登录需要修改复杂密码
[root@anolis-31 ~]$passwd -e wang
##生成6位数密码,且最后无换行符
[root@anolis-31 ~]$cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 6
UD3TKi
范例:新增用户的脚本
##set -o nounset:在扩展一个没有设置的变量时,显示错误信息
##set -o errexit:如果一个命令返回一个非0退出状态值(失败)就退出
#!/bin/bash
set -o nounset
set -o errexit
username="wang0624"
password=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 6)
useradd $username
echo -e "$password\n$password" | passwd -f $username
passwd -e $username
4.5 权限说明
##用户类型:
##u owner,属主
##g group,属组
##o other,其它
##
##文件权限:
##r 可使用文件查看类工具,比如: cat,可以获取其内容
##w 可修改其内容 ,文件的是否被删除和文件的权限无关
##x 即可以执行(运行)此文件(此文件的内容必须是可执行)
##
##目录权限:
##r 可以使用ls查看此目录中文件名列表,但无法看到文件的属性meta信息
##w 可在此目录中创建文件,也可删除此目录中的文件
##x 可以cd进入此目录,可以使用ls -l file或stat file 查看此目录中指定文件的元数据,当预先知道文件名称时 ,也可以查看文件的内容,属于目录的可访问的最小权限
##root默认权限目录755,文件644
[root@anolis-31 ~]$touch auth.txt
[root@anolis-31 ~]$mkdir auth
[root@anolis-31 ~]$
[root@anolis-31 ~]$ll
drwxr-xr-x 2 root root 6 6月 20 21:32 auth
-rw-r--r-- 1 root root 0 6月 20 21:32 auth.txt
##普通用户默认权限目录775,文件664
[wang@anolis-31 ~]$ touch auth.txt
[wang@anolis-31 ~]$ mkdir auth
[wang@anolis-31 ~]$ ll
总用量 0
drwxrwxr-x 2 wang wang 6 6月 20 21:33 auth
-rw-rw-r-- 1 wang wang 0 6月 20 21:33 auth.txt
4.6 chown/chmod修改主组/权限
##chown修改属组属主
[root@anolis-31 ~]$chown wang:wang newuserpasswd.sh
[root@anolis-31 ~]$ll newuserpasswd.sh
-rw-r--r-- 1 wang wang 246 6月 20 19:35 newuserpasswd.sh
##-R递归
[root@anolis-31 ~]$chown -R wang:wang /data/
##chmod修改权限,[ugoa][+-=][rwx]
[root@anolis-31 ~]$chmod a=rwx a.txt
4.7 特殊权限
##SUID 作用于二进制可执行文件上,用户将继承此程序所有者的权限
##SGID 作用于二进制可执行文件上,用户将继承此程序所有组的权限
## 作于于目录上, 此目录中新建的文件的所属组将自动从此目录继承
##STICKY 作用于目录上,此目录中的文件只能由所有者自已来删除
[root@anolis-31 ~]$ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 33432 7月 19 2022 /usr/bin/passwd
[root@anolis-31 ~]$ll -d /tmp/
drwxrwxrwt. 2 root root 6 6月 20 21:47 /tmp/
[root@anolis-31 ~]$chmod u+s auth.conf
[root@anolis-31 ~]$chmod g+s auth
[root@anolis-31 ~]$chmod o+t auth
[root@anolis-31 ~]$ll
总用量 8
drwxr-sr-t 2 root root 6 6月 20 21:45 auth
-rwSr--r-- 1 root root 0 6月 20 21:45 auth.conf
##chattr [+-][ia],i只能查看不能修改,a只能>>追加
##lsattr显示特殊权限
[root@anolis-31 ~]$chattr +i a
[root@anolis-31 ~]$chattr +a a
[root@anolis-31 ~]$lsattr a
----ia--------------- a
##访问控制列表ACL,实现灵活的权限管理
##setfacl -m u:用户名:权限 文件名
##setfacl -x u:用户名 文件名 # 删除特定用户的 ACL
##setfacl -b 文件名 # 删除所有 ACL
##getfacl 文件名 查看
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!