Linux常用指令

116 阅读18分钟

linux中一切皆文件

指令

  • 指令也是程序,可以使用which 指令来查询该指令的程序在哪个位置,但对shell内置的指令如cd不生效
  • 指令是有输入的,通常参数最后的指定文件即是输入来源,只是有的指令默认了输入文件位置,所以省略不写,比如ls ./默认写成ls
  • 管道|,将左边指令的标准输出直接给右边指令,此时右边指令就不需要指定来源
  • 输入重定向<,grep "text" << file.txt等价于grep "text" file.txt
  • 输出重定向>或>>,将指令的输出由标准输出(屏幕)指定到特定文件中,前者覆盖写,后者追加写
  • 错误输出重定向2>或2>>,与输出重定向类似,只是输出的是错误信息,可与上面指令写在一个指令中,command > output.log 2> error.log
  • 组合重定向&>或&>>:同时重定向stdout和stderr

1. 文件结构

根目录:/

  1. bin:shell指令
  2. sbin:管理员才能执行的shell指令
  3. home:普通用户家目录
  4. root:管理员主目录
  5. lib:库文件
  6. lost+found:宕机后存储恢复信息
  7. *etc:系统管理所需要的配置信息
  8. usr:用户的应用程序和文件
  9. local:用户安装程序目录
  10. opt:安装包存放的位置
  11. var:不断扩充的东西,如日志
  12. temp:临时文件,都可以访问,也会定期删除
  13. dev:设备管理器
  14. media:自动识别的设备,比如U盘
  15. mnt:挂载
  16. selinux:安全子系统
  17. boot:启动相关文件
  18. proc:系统内存映射
  19. srv:启动后要提取的数据
  20. sys:2.6之后内核出现的新东西

2. vi/vim:后者是前者增强版本,如多了语法高亮

屏幕截图 2025-03-05 103847.png

3.用户管理、组管理

每个文件都有一个所有者(用户),每个所有者都存在一个组

相关文件/etc/

  1. passwd:存放用户信息(如 UID、主目录等),都可以访问
  2. shadow:存放口令配置信息(如加密后的密码,密码修改时间),只有root可访问
  3. group:组的基本信息

组管理

  1. groupadd 组名
  2. groupdel 组名

用户管理

  1. useradd 选项 用户名
  • -m:会自动增加同名家目录到/home/下
  • -d 路径:指定家目录
  1. userdel 选项 用户名
  • -r:删除用户的同时删除其家目录
  1. usermod 选项 用户名
  • -g 组名:改变用户所属组
  • -d 目录名:改变用户家目录
  1. passwd 用户名:给用户的设置密码,默认给自己
  2. su - 用户名:切换用户,输入exit切换回原来的用户
  3. whoami:查看登录用户名
  4. id 用户名:查询用户

4. 文件管理

基本常识(很重要)

文件系统的核心作用是管理块设备(如磁盘分区),并提供标准化的API(如open/read/write)来操作磁盘

  1. 文件分为目录和普通文件
  2. 文件拥有权限属性rwx
  • 对文件:r可读,w可修改内容(不代表可删),x可执行
  • 对目录:r可被ls列出,w可重命名,可内部增删文件,x可进入该目录
  1. 不同用户对于文件而言有不同身份(所有者u,组成员g,其他组成员o),导致对于文件的权限不同,具体可看如下图 image.png

操作指令

  1. mkdir 选项 目录名
  • -p 递归创建,如果父目录不存在会自动创建
  1. touch 文件名
  2. ln 目标路径 链接名:创建硬链接文件
  • -s 创建软链接文件

  1. rm 选项 文件(目录)路径
  • -r递归删除,如果删除目录中存在目录,则必须增加此
  • -f强制删除,不会再要求输入确认

  1. cd 路径:跳转到该路径下
  2. vim 文件名
  3. mv 源路径 目标路径
  • 若源路径与目标路径相同,则为重命名
  • 不同则为移动
  1. chown 用户名 文件名:改变文件所有者
  2. chgrp 组名 文件名:改变文件所属组
  3. chmod 操作 文件名
  • 操作方法一:+-=变更权限,u所有者,g组内成员,o其他成员
    • 如chmod u=rwx,g=rx,o=rx abc
    • 如chmod u-x,g+w abc
  • 操作方法二:r=4,w=2,x=1
    • 如 chmod 765 abc 等价于 chmod u=rwx,g=rw,o=rx abc
  1. cp -r 源路径 目标路径:将源文件(目录)拷贝到目标文件(目录)中
  2. \cp -r 源路径 目标路径:强制覆盖
  3. scp 选项 源路径 目标路径:Linux之间跨网络复制文件和目录
  • -r:递归复制整个目录。
  • 远端路径格式:用户名@IP地址:路径,如root@192.168.31.186:/root/example.txt
  1. truncate 选项 文件名:设置文件大小,如果文件不存在,会创建文件
  • -s 512:设置文件大小为512字节,如果比原文件小,则会丢弃后面内容,如果比文件大,则填充\0
  • -o:设置文件大小单位为io块
  • -c:不创建文件

  1. ls 选项
  • -i 显示文件(包括目录)名和对应的iNode编号
  • -a 显示所有文件
  • -l 单行显示文件
  • -r 递归显示所有子文件
  • -h 以人类可读格式显示
  • -t 按修改时间排序
  1. cat 选项 文件名
  • -n 显示文件内容的同时显示行号
  1. more 文件名:全屏按页显示文本文件内容
  • 空格:下翻一页
  • 回车:下翻一行
  • q:退出
  • =输出当前行
  • :f输出文件名和行号
  1. less 文件名:也是全屏显示,但是并不是全部加载进内存才显示,适合查看大文件
  • 空格/pagedown
  • pageup
  • q:退出
  • /字符串或?字符串:查找字符串
  • n/N 向下/上查找
  1. head -n 行数 文件:查看文件前几行
  2. tail 选项 文件 -n 行数:查看文件后几行 -f 实时跟踪文件,用于服务器输出日志 -F 更强大,即使文件重命名或重建,也会一直跟踪
  3. find 搜索范围 选项 字符串:搜索文件目录中的文件
  • 搜索范围
    • 即指定在哪个目录下查找
  • 选项
    • -name:用文件名匹配字符串
    • -user:用所有者匹配字符串
    • -size:+n大于n,-n小于n,n为等于,单位KMG,如+1M代表>1M
  1. grep 选项 查找内容 文件路径:搜索文本文件中的内容
  • -n 返回内容包括行号
  • -i 查找时忽略大小写
  1. wc 选项 目录:word count
  • -l 按行统计
  • -w 按单词统计,以空白符为分割
  • -c 按字符统计
  1. tree 目录路径:以树状图显示目录结构
  2. pwd:查看当前处于的文件夹
  3. cd ~:回到家目录,root则回到/root/

5.硬盘管理

基础知识

  1. 文件系统是os用于管理多个磁盘的逻辑结构,使得用户对磁盘 操作的基本单位变成了文件
  2. 电脑可以有多个磁盘,一个磁盘可以有多个分区,每个分区对应一个文件系统,然后挂载到一个目录下,对目录的操作就是对磁盘的操作
  3. Linux中同时也是将磁盘、分区组织成块类型(b)文件,只能将其挂载到目录下才能操作,不可直接操作
  4. 每个磁盘都分为引导块和数据块,引导区在第一个扇区(512B),引导区内容MBR分为引导代码、分区表(64字节)和结束标志(表示则是有效的MBR扇区)
  5. 分区表记录着分区的位置,每个分区信息占据16B,所以只能有4个分区,但是明显不够,后续就将这4个16B分成了主分区、拓展区和逻辑区
  1. 拓展分区把其中一个主分区变成容器,内部再套娃(逻辑分区),从而达到将硬盘分为>4的分区
  2. MBR是老版本,最新的方式是GPT,使得分区没有限制且磁盘容量大于2T,(因分区表用32位记录扇区数2^32×512B≈2TB)
  3. 同时之前的BIOS(Legacy)由于每次启动都需要检查硬件并对其初始化,所以开机较慢,目前最新的是UFIE,能跳过这部分直到硬件出现问题才会检测,使得开机变快
  1. 分区又分为系统分区和普通分区,系统分区不同的是起始位置存储着os引导程序,来将os加载到内存,然后将控制权交给os,此时也就开机成功
  2. 每个磁盘分区有多个部分:超级块、iNode区和数据区等
  3. 每个文件都指向一个iNode节点,记录着:
  • 文件描述内容,比如文件修改时间,文件类型
  • 文件存储的数据在磁盘什么位置,目录文件中的数据就是目录项,目录项由文件名及其对应的iNode节点编号组成

拓展:系统根据iNode编号获得对应的iNode,当使用ls -l:
1.首先根据本目录的iNode节点获得子文件iNode节点编号
2.再去读子文件的iNode节点以获得子文件的描述,然后再输出显示

  1. 硬盘想要被文件系统使用,必须先挂载到某个空目录之下(原有内容会被隐藏,卸载当前挂载的硬盘后内容会恢复),但是挂载之前硬盘中没有合适的文件系统,则需要格式化

浅谈格式化
文件系统要想管理磁盘分区,就得依赖一些元数据,比如inode表和数据块分配表,格式化就是在产生这些数据(即创建文件系统),同时将空间分为iNode节点空间和数据区等

挂载浅谈

  1. 挂载就是将块设备的文件系统挂到操作系统的文件系统中,此时os下的文件系统才会去按照文件的方式管理这块设备
  2. Linux默认所有块设备都是按照顶级目录到子目录的方式进行管理的,所以挂载就是将指定的目录代替成块设备的顶级目录,这样进入指定的目录,就是进入了块设备 image.png 挂载后
    image.png

# Linux磁盘格式化

# linux 挂载_图解Linux中的挂载原理

linux为什么需要挂载

  1. 系统启动过程

1. BIOS/UEFI 初始化

  • 传统BIOS
    • 读取磁盘第一个扇区(MBR,512字节),检查最后2字节是否为0x55AA
    • 加载MBR中的Stage 1引导代码(如GRUB的boot.img)到内存0x7C00执行。
  • UEFI
    • 直接读取ESP分区(FAT32格式)中的.efi文件(如grubx64.efi),跳过MBR。

2. GRUB 引导加载

传统BIOS模式(GRUB2)
  1. Stage 1(MBR中)
    • 仅446字节,功能是加载Stage 1.5core.img)。
    • core.img通常存储在MBR后的空闲扇区(约30KB),包含基本文件系统驱动(如ext4、FAT)。
  2. Stage 2(完整GRUB)
    • /boot分区读取配置文件(grub.cfg)。
    • 加载内核vmlinuz)和initramfs到内存。
UEFI模式
  • 直接执行ESP分区中的grubx64.efi,无需core.img(因UEFI自带FAT32驱动)。

3 内核与 initramfs

  • 内核限制
    • 内核自身不包含所有硬件驱动(如LVM、加密模块),这些驱动存储在根文件系统的/lib/modules中。
    • 但挂载根文件系统需要这些驱动 → 死循环
  • initramfs 的作用
    • 提供临时根文件系统(内存中),包含:
      • 必要的磁盘驱动(如dm-cryptnvme)。
      • 工具(mountvgchangecryptsetup)。
    • 解锁加密/LVM卷,挂载真正的根文件系统(如/dev/mapper/ubuntu--vg-root)。

4. 根切换与系统启动

  1. pivot_root
    • 将initramfs的临时根切换到真实的根文件系统。
    • 卸载initramfs释放内存。
  2. 启动用户空间
    • 执行/sbin/init(或systemd)。
    • 根据/etc/fstab挂载其他分区(如/home)。

image.png 系统启动过程

相关文件

/etc/fstab:启动后自动挂载的文件系统配置,file system table

操作指令

1、增加硬盘

  1. fdisk 磁盘路径:对磁盘分区,分区后需重启系统
  • m获得帮助
  • n开始分区,后续按提示开始分区
  • 结束后按w写入磁盘
  • 按q退出,若没有按w,不会记录
  1. mkfs -t 文件系统类型 分区目录:格式化磁盘分区
  • make file system
  • 文件系统类型可以输入mkfs后按两下tab获得

如果挂载的文件原本不是空的,说明这块磁盘分区对应部分有数据,直接挂载的话,此时会由于磁盘分区不同而导致"数据丢失";但是如果把新挂载的卸载掉,数据就会回来,因为此时文件就是管理的之前磁盘分区对应位置的数据

  1. 挂载
    3.1 mount 分区目录 挂载目录:将硬盘分区挂载到指定目录,重启后会丢失
    3.2 umount 分区目录或挂载目录:重启后也会丢失
    3.3 写入/etc/fstab,每次启动会自动挂载,且并不是写挂载目录,而写的是磁盘分区的uuid

2、查询硬盘

  1. lsblk:列出所有块设备,包括磁盘及其下面的磁盘分区
  2. blkid 磁盘目录:查询磁盘分区的uuid,默认显示所有
  3. df -h:查所有磁盘利用率
  4. du 选项 路径:查指定目录占用的磁盘空间
  • -h 带计量单位
  • -a 含文件
  • -c 增加汇总值
  • --max-depth=1 子目录深度为1

3、LVM逻辑卷

  1. 传统磁盘是一个磁盘分区格式化挂载,无法做到将多个磁盘同时挂载到一个目录下

  2. LVM是将多个磁盘/磁盘分区变为物理卷PV(physical volume),然后将多个物理卷变为卷组VG(Volume Group类似于大磁盘),然后从VG中分配逻辑卷LV(Logical Volume类似于分区)

  3. 对于卷组VG,存在最小分配单元PE(Physical Extend),一般是4MB

  4. 逻辑卷命名:

  • etc/卷组/逻辑卷

  • etc/mapper/卷组-逻辑卷

  1. 创建:PV->VG->LV
  2. 扩容:对逻辑卷分配内存后,还需要通知文件系统,不同文件系统有不同的指令,如xfs使用xfs_growfs 逻辑卷

image.png

6. 进程管理

基础知识

  1. 进程分为普通进程和服务(守护进程);
  2. 普通进程并不是说转为后台后就变成了服务,普通进程可能会随着本次终端关闭而停止,而服务却是独立运行于终端之外的,由systemctl专门管理;

操作指令

  1. ps 选项
  • -e 显示所有进程(侧重于进程间的父子关系)
  • -f 全格式显示
  • aux 以人可读方式显示所有用户进程(侧重于资源占用)
  1. kill 选项 进程号:有时候进程会忽视此命令,必须强制执行
  • -9 强制终止
  1. killall 进程名称:停止所有与名称匹配的进程
  2. pstree 选项:显示进程树,能看见父子关系
  • -p 显示进程号
  • -u 显示用户
  1. systemctl 选项 服务名
  • start/stop/restart 启动/停止/重启服务
  • status 查看服务进程状态,是否处于运行
  • list-unit-files 查服务开机启动状态
  • enable/disable 设置/关闭服务开机自启动
  • is-enabled 查询某个服务是否自启动
  1. service 服务名 选项
  • start/stop/restart/status
  • reload 重新装载服务
  1. top 选项:动态监控进程
  • -d 5:每5s更新一次
  • -p PID:监控某个进程
  • 交互:按P以CPU排序,M以内存,N以PID,U查询该用户执行的进程,K杀死某个进程

7、网络管理

基础知识

  1. 虚拟机、容器的网络管理有很多方式,常见的桥接和NAT
  • 桥接:分配一个与宿主机同一局域网的独立 IP 地址,这样就可以通过网关直接访问外部服务器,相当于一张网卡有两个IP image.png
  • NAT:虚拟机和主机组成一个局域网,分别配置网关以及各自在此局域网中的IP地址,虚拟机访问外部网络,数据由虚拟机->网关->主机,然后由主机发送出去 image.png
  • ssh:全称是security shell,意在通过shell能控制所有远程电脑,比较与telnet更加安全,端口号22

操作指令

  1. ifconfig:查看网络信息,Windows系统是ipconfig
  2. ip 选项 操作:比ifconfig更加强大
  • addr/route show:显示ip地址/路由表
  • neigh:查看ARP缓存表
  • addr add/del IP地址/掩码 dev 网卡:添加/删除网络接口IP地址
  1. ping IP地址:测试网络是否有问题
  2. netstat 选项:动态监控网络
  • -an 以一定顺序输出
  • -p 显示进程
  1. ssh 用户名@IP地址:连接并操控远程服务器
  2. nslookup 域名:DNS查询
  3. traceroute 域名:路由跟踪,TTL从1开始递增,直到数据包到达目的地址,每次显示的是中间路由器返回的ICMP包

实操

1、将IP改为静态获取

  1. cd /etc/netplan,找到里面yaml文件
  2. 在网卡之下添加addresses、routes和nameservers等配置信息,务必注意格式,不能有tab,只能是空格
  3. netplan apply,配置生效

2、ssh远程连接服务器

  1. 服务器端,/etc/ssh/sshd_config中记录着ssh的配置信息,如果允许远程登录root,则需要添加PermitRootLogin yes
  2. 客户端,直接使用ssh 用户名@服务器IP,然后输入密码后即登录成功

8、软件包管理Ubuntu

基础知识

  1. apt的安装包都来自于etc/apt/sources.list.d/ubuntu.sources中记录的服务器,原本都是记录的外网的地址,需要手动改为内网镜像

镜像:其实就是国内服务器,将外国的服务器的资源定期扒拉,这样就与访问国外服务器效果一致

  1. 如果没有包管理工具,仅仅下载软件是不行的,还得安装许多依赖,不同软件的依赖可能有冲突,这对手动维护无疑是大挑战

基本操作

apt包管理

  1. apt update:“眼”,先获得apt服务器中的元信息(如软件列表、软件版本)存储到/var/lib/apt/lists中
  2. apt upgrade:更新已下载软件
  3. apt install 软件名=版本号:“手”,根据名字,获得元信息,然后请求服务器相关数据
  4. apt source 软件名:获取软件源代码
  5. apt show 软件名
  6. apt remove/purge 软件名:前者会留下配置文件,后者彻底删除
  7. apt autoremove/clean:清理无用依赖/缓存文件

网络资源

下载
1.wget

wget就是用来从指定的url下载文件,包括ftp,类似于迅雷

  1. wget 选项 url:默认下载到当前文件夹,并以url中最后一个/之后 的字符来命名下载的文件
  • -O 字符串:以指定字符串命名下载文件
  • --limit-rate=300k:限速下载,因为默认是全部宽带下载,如果下载其他文件就没法使用带宽
  • -c:断点续传,重新启动下载中断的文件,而不会从头开始下载
  • -b:后台下载,同时将下载进度记录到wget-log,使用tail -f wget-log能实时查看当前进度
  • -i 路径:根据路径指定的文件中的多个url,来同时下载多个文件
  • --ftp-user=USERNAME --ftp-password=PASSWORD:ftp下载,当然不输入这些则是匿名下载
2.curl

不带任何参数,就是发出get请求,类似于浏览器

1.curl 参数 url

  • -d 字符串:发送POST方法,并设置请求头content-type
  • -H 字符串:自定义请求头内容
  • -O:注意是大写O,用于下载
  • -o 字符串输出保存到指定文件,wget是大写O
3.打包

打包并不等于压缩,打包类似于将多个文件的内容全部copy到一个tar文件中

  1. tar [options] -f archive.tar [files...]
  • -f:指定归档文件的名称,必须要

  • -c:创建新的归档文件,后缀名为tar
  • -r:向指定的tar文件中添加文件
  • -x:解包归档文件
  • -t:列出归档文件中的内容(被归档文件)

  • -z:使用gzip压缩或解压归档文件
  • -j:使用bzip2解压压缩归档文件

  • -v:显示详细输出,列出被添加到归档中的文件
4.压缩
  1. tar -czvf xxx.tar.zip [files]
  2. zip 选项 xxx.zip [dirs,files]
  • -r:递归添加,如果不添加的话,压缩包中不包括子目录之下的文件
  • -P 密码:大写P,加密压缩
  1. gzip 选项 [files]
  • d: xxx.gz:解压
  • r:递归压缩
5.解压
  1. tar -xzvf xxx.tar.zip
  2. unzip 选项 xxx.zip:解压后默认会删除压缩包
  • -d 指定解压路径
  • -l 列举压缩文件的内容
  • -P 密码:指定密码解压
  • -k:保留原始文件
  1. gunzip 选项 xxx.gz
  • 选项同上

9、其他常用指令

日期

  1. date 选项:默认显示当前时间
  • -s 时间:设置时间
  1. cal:显示日历

任务调度

cron服务处于后台,查询相应配置,来定时执行指定任务;用crontab指令来编辑配置

  1. crontab 选项:系统在某个时间执行特定命令
  • -l:查询crontab中的任务
  • -r:删除当前用户的cron任务
  • -e:编辑任务,其实就是编辑对应文件

image.png