基础篇:
常见接口:
SATA硬盘-->/dev/sda
SAS硬盘--> /dev/sda
U 盘 / 移动硬盘 (USB)→ /dev/sda
VirtIO 虚拟硬盘 (虚拟机专用)→ /dev/vda
centos ubuntu区别:
安装软件命令:
CentOS:yum install
Uhuntu:apt install
更新软件源: sudo apt update
更新已安装软件: sudo apt upgrade -y
安装核心工具 :sudo apt install -y vim htop net-tools curl wget git tree
清空文件内容:
方法1:esc + :%d
方法2:esc + gg+dG
方法3(如果文件未打开):sudo > /etc/netplan/00-installer-config.yaml
查看文件内容:
cat
less(支持大文件) ↑ ↓ 翻页 q退出查看
head (查看前10行) tail(查看后10行)
ping baidu.com -c 3 (向百度主机发送3次探测包)
ping baidu.com -w 5( 等待回应时间超过5,就判定超时)
linux:一切皆文件
FHS标准目录结构:
/:跟目录,万物之源
/bin:存放二进制可执行命令,所有用户都可以执行
/sbin:存放系统管理命令,只有root用户能执行
/etc:配置文件目录
/var:变化文件目录,日志文件,数据库数据通常都在里面
/home:普通用户的家目录
/root:root用户的家目录
/dev:设备文件目录
/proc:内核参数与进程信息
绝对路径vs相对路径:
/:开始是绝对路径,完整路径
.:代码当前目录
..:代表上级目录
~:代表当前用户家用目录
cd与目录切换:
cd -:回到上一次所在目录
cd ~:回到当前用户的家目录
cd是shell内置命令,不是外部程序,无法改变父shell的目录
ls -l 查询文件和目录的权限
-rw-r--w-- 1 root root 1002 Mar 8 14:00 text.text
- 指文件(d 指目录,b块设备文件-硬盘,c字符设备文件)
rw- 文件所有者读写权限
r-- 文件所有组读权限
w-- 其他用户写权限
1 硬链接数(普通文件默认1,目录文件默认2)
root 所有者
root 所有组
1002 文件大小(单位字节)
Mar 8 14:00 时间
text.txt 文件名
chmod 修改权限:
只修改目录权限:chmod 755 目录名
修改目录包括下面文件的权限: chmod -R 755 目录名
修改目录包括下面某些文件的权限:chmod 755 目录名 目录名/文件名 目录名/文件名
x:执行权限,执行命令成勋
r: 读权限
w: 写权限
权限值:r=4 w=2 x=1
chmod u+x 脚本 给文件所有者加执行权限
chmod a=r text.txt 所有人都只有只读权限
chmod g-w text.txt 去掉组的写权限
目录必须有 x 才能进去! 只给 r 没用,进不去。
chown 修改所有者和组
chown user1 text.txt
chown user1:group1 text.txt
chown -R user1:group documents
Umask是什么?他是怎么影响和修改新建文件和目录的权限的?
umask是通过掩码的方式从默认权限中去掉指定的权限,文件默认最大权限是666,目录默认最大权限是777,减去umask就是实际的权限值,比如,umask设置成002,那新建文件的权限值就是664,新建的目录权限就是775,那组权限就有写权限了。
特殊权限:
suid(u+s)
chmod u+s 命令 :当任何用户执行这个命令时,就会临时变成这个命令的所有者
sticky(o+t)
chmod o+t 目录:只能删除自己的文件,不能删除别人的文件
常用 644 作为文件权限,安全只读;755 作为目录权限,可进入不可修改。
echo 内部命令+外部命令
type -a echo 显示系统里所有叫 echo 的命令(全部版本)
free 查看内存
lsblk 查看硬盘大小
arch 查看系统架构
uname -r 查看内核CPU版本
cat /etc/os-release 查看系统版本信息
lsb_release -a 查看系统版本信息
cat /etc/redhat-release 查看文件里面的centos版本
lab_release is 返回系统类型 是ubuntu还是centos
时间:
date:
系统时间
clock:
硬件时间:主板芯片
修改系统时间 date -s 'yesterday'
将系统时间按照硬件时间校正:clock -s
将硬件时间按照系统时间校正:clock -w
查看时间时区相关信息: timedatectl status
查看所有时区:timedatectl list-timezones
修改时区: timedatectl set-timezone +时区名
查看当前时区:ll /etc/localtime
/etc/localtime 软链接 指向/user/share/zoneinfo/下面的是时区文件
显示2026 4月日历 :cal 4 2026
显示公元4年日历: cal 4 没有公元0年,最小为1
关机重启:
关机:shut down halt/poweroff +[time]
重启:shut down reboot+[time]
time: +3 表示三分钟之后 还可以指定hh:mm
unix2dos 将unix文件转换成dos文件
hexdump 查看文件二进制内容
保存加退出 ctrl+o 回车,ctrl+x
无法输入命令:ctrl+x
输出字符串加命令结果:echo "my name iss `hostname`"
mv 给文件目录修改姓名//移动
cp -av test.txt test.txt.bak 显示拷贝过程,同时拷贝过去属性。
rename txt txt.bak *.txt 将t*.txt 文件 有txt改为txt.bak后缀 批量修改
rm 删除文件 可以用mv 代替rm
rm -rf :-r是递归 -f是不用询问yes or no
无法删除的文件: rm -- -f 或者rm ./-f
lsof |grep delete
shred 安全删除文件。删的彻底
目录操作:
tree /目录
mkdir /data/dir1/{test1,test2,test3} -pv :创建三个目录,存在不保存,不存在创建,且显示过程
inode表
节点编号,每个文件或目录都有自己唯一的节点编号 命令+-i 可以查看节点编号,每个分区各自分配自己的节点编号,相同的节点编号 允许有多个名字
df 磁盘查看命令,显示分区多少,磁盘多少。
echo file{1..50580} | xargs touch ✅ 能创建大量文件,echo 将文件打印出来,并通过管道| 传输给touch新建。
touch file{1..50580} ❌ 超过系统命令长度限制,失败。
touch 一个文件,提示no space left on device,但是df 可以看到还有很多控空间,为什么?节点被用完了,可以用df -i 查看剩余节点个数
ll !* : ll 上一个命令的所有参数
ln 创建文件硬链接,文件夹不能创建硬链接,但是他有硬链接(和原文件的inode字节编码一样),目录的硬链接=2+子目录数量,不支持跨设备,跨分区,删除原文件,硬链接文件还可以访问
ln -s 软连接,当原始文件被删除之后,软连接文件无法找到原文件,但本身的软连接依旧存在,当重新新建一个源文件,就又可以了,软连接不关心原文件内容,只是一个指向名字相同路径相同的文件,软连接文件和源文件的inode 节点编号不一样。
软链接即支持跨设备,又支持文件夹,原文件的路径一定要相对于软连接文件的路径,不是当前路径
- 同一个挂载点(同一个 /dev/xxx) → 可以硬链接
- 不同挂载点(不同 /dev/xxx) → 跨设备 / 跨分区 → 不能硬链接
/下的普通子目录不是跨设备,只是目录结构
问题:如何在软件版本更新之后,不改变路径的情况下,能一直访问最新版本的文件?
答案:删除原本软链接,新建一个新的软连接指向新版本。rm -f app(软连接)
问题:硬链接和软链接区别?
答案:硬链接本质是同一个文件,软链接不是。硬链接支持跨设备,软链接不是。硬链接inode 相同,软连接不同。创建新的硬链接,链接数会增加,删除硬链接,链接数会减少,软链接都不会变化。硬链接不支持文件夹,软链接支持。硬链接的原始文件路径是相对于当前工作目录,软链接的原始文件是相对于链接文件的相对路径。删除原文件,硬链接数减一,但链接文件不受影响,删除原文件,软连接文件将无法访问。硬链接的文件类型和原文件一致,软连接文件和原文件无关。硬链接文件大小和原文件一致,软连接文件文件大小是原始文件的路径长度。
tty 输出当前所在终端设备文件
who 和ls /dev/tty* 和 ls /dev/pts可以查看所有终端设备,linux 的所有终端文件都放在/dev ,名字固定
w可以查看正在被使用 的终端
IO重定向:
重定向就是将键盘输入,屏幕正常输出,屏幕错误输出,这个三个流改道,走向别的文件或着别的屏幕地方。
标准输出重定向stdout:> 或者 1>
ls 1> file.txt 把正常消息输出到文件,或者ls > /dev/tty1 把消息输出到另一个终端设备上
>> 追加输出,不覆盖,往后加
错误输出重定向stderr:2> 或者2>>
ls 不存在的目录 2>> error.log 将错误信息输出到error.log 文件中,不覆盖
输入重定向stdin:cat < file.txt 或者cat 0< file.txt 或者 cat <<EOF 多行数据内容 EOF 会将eof之间多行的内容输入
> file.txt 2>&1 或者 &> file.txt 正确错误一起覆盖输入file.txt
> file.txt:标准输出到 file.txt2>&1:错误输出 定向到 标准输出的位置
输入重定向,可以将内容写到文件里,输入命命令就可以执行文件里面的内容。
实现邮件通信:
yum -y install postfix mailx
systemctl enable --now postfix
mail -s hello wang <mail.txt :给wang发个hello的邮件,内容为mail.txt文件的内容
cat >file.txt <<EOF
line1
line2
EOF
file.txt的内容是line1line2 ,EOF是结束标识
vim /etc/mail.rc 编辑mail.rc文件
cat 即使输入也是输出
重定向可以将输出的信息正确或者错误信息放在一个文件内,用来隐藏输出信息
tr 'a-z' 'A-Z' 将输入的含有abc......的小写换成大写ABC......
tr -d 'abc' 将输入内容中的abc字符删除之后,再输出
| 管道左边的正常输出作为管道右边的正常输入
tee 既能存文件,又能屏幕输出,将命令结果一边输出到屏幕,一遍输出到文件
用法1: 命令 | tee 文件名 将命令结果输入到文件,同时又输出到屏幕
用法2: 命令 |tee -a 文件名 非覆盖,将命令结果追加到文件
wget -o - http://www.baidu.com/hello.sh :把日志输出到屏幕,而不是文件
-o = log file把 wget 的日志信息输出到哪里
- = 标准输出(屏幕)
大写 -O = 输出文件(Output file);-o (小写)日志输出