全场景覆盖,550条Linux常用指令

0,背景

在网上搜罗了550条指令,基本上涵盖了绝大多数的使用场景,还是要根据自己的开发场景来看,没有必要全会,毕竟熟能生巧,而且用到了现场查询都没问题。

1、基本命令

uname -m                    # 显示机器的处理器架构
uname -r                    # 显示正在使用的内核版本
dmidecode -q                # 显示硬件系统部件信息 (SMBIOS / DMI)
hdparm -i /dev/hda          # 罗列磁盘的架构特性 (仅限 /dev/hda)
hdparm -tT /dev/sda         # 在磁盘上执行测试性读取操作,显示读写性能 (仅限 /dev/sda)
arch                        # 显示机器的处理器架构(与 `uname -m` 功能相同)
cat /proc/cpuinfo           # 显示 CPU 信息
cat /proc/interrupts        # 显示系统的中断统计
cat /proc/meminfo           # 校验内存使用情况
cat /proc/swaps             # 显示正在使用的 swap 分区信息
cat /proc/version           # 显示内核版本信息
cat /proc/net/dev           # 显示网络适配器及其统计信息
cat /proc/mounts            # 显示当前已加载的文件系统
lspci -tv                   # 罗列 PCI 设备(以树状结构展示)
lsusb -tv                   # 显示 USB 设备(以树状结构展示)
date                        # 显示当前系统日期和时间
cal 2007                    # 显示 2007 年的日历
date 041217002007.00        # 设置系统日期和时间 (格式:月日时分年.秒)
clock -w                    # 将时间修改并保存到 BIOS

2、关机

shutdown -h now              # 关闭系统 (立即关闭) (1)
init 0                       # 关闭系统 (通过 init 命令设置运行级别为 0) (2)
telinit 0                    # 关闭系统 (通过 telinit 命令设置运行级别为 0) (3)
shutdown -h hours:minutes &  # 按指定时间关闭系统 (后台执行)
shutdown -c                  # 取消按预定时间关闭系统
shutdown -r now              # 重启系统 (立即重启) (1)
reboot                       # 重启系统 (通过 reboot 命令) (2)
logout                       # 注销当前用户

3、文件和目录

cd /home                   # 进入 '/home' 目录
cd ..                       # 返回上一级目录
cd ../..                    # 返回上两级目录
cd                          # 进入个人的主目录
cd ~user1                   # 进入用户 user1 的主目录
cd -                        # 返回上次所在的目录
pwd                         # 显示当前工作目录的完整路径
ls                          # 查看当前目录中的文件
ls -F                       # 查看目录中的文件,并标识文件类型(如目录、可执行文件等)
ls -l                       # 显示文件和目录的详细信息(权限、所有者、大小等)
ls -a                       # 显示目录中的所有文件,包括隐藏文件(以 '.' 开头的文件)
ls *[0-9]*                  # 显示包含数字的文件名和目录名
tree                        # 显示目录结构,从当前目录开始以树形结构展示 (需要安装 tree 命令)
lstree                      # 显示目录结构,从根目录开始以树形结构展示 (可能需要安装额外工具)
mkdir dir1                  # 创建一个名为 'dir1' 的目录
mkdir dir1 dir2             # 同时创建两个目录:'dir1' 和 'dir2'
mkdir -p /tmp/dir1/dir2     # 创建一个目录树,如果父目录不存在则一并创建
rm -f file1                 # 强制删除文件 'file1'(即使文件不存在也不会报错)
rmdir dir1                  # 删除空目录 'dir1'
rm -rf dir1                 # 删除目录 'dir1' 及其中的所有内容
rm -rf dir1 dir2            # 同时删除两个目录及它们的内容
mv dir1 new_dir             # 重命名目录 'dir1' 为 'new_dir' 或将其移动到新位置
cp file1 file2              # 复制文件 'file1' 到 'file2'
cp dir/* .                  # 复制目录 'dir' 下的所有文件到当前工作目录
cp -a /tmp/dir1 .           # 复制目录 '/tmp/dir1' 及其所有内容到当前目录
cp -a dir1 dir2             # 复制目录 'dir1' 及其所有内容到目录 'dir2'
ln -s file1 lnk1            # 创建一个指向文件 'file1' 的软链接 'lnk1'
ln file1 lnk1               # 创建一个指向文件 'file1' 的硬链接 'lnk1'
touch -t 0712250000 file1   # 修改文件 'file1' 的时间戳为 2007年12月25日 00:00 (YYMMDDhhmm)
file file1                  # 显示文件 'file1' 的 MIME 类型
iconv -l                    # 列出系统已知的字符编码格式
iconv -f fromEncoding -t toEncoding inputFile > outputFile  # 将输入文件从 'fromEncoding' 编码转换为 'toEncoding' 编码并保存为输出文件
find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \;  # 批量调整当前目录下所有 '.jpg' 文件大小,并将它们保存到 'thumbs' 目录 (需要安装 ImageMagick 的 convert 命令)

4、文件搜索

find / -name file1                      # 从根目录 '/' 开始搜索名为 'file1' 的文件和目录
find / -user user1                      # 搜索属于用户 'user1' 的文件和目录
find /home/user1 -name \*.bin           # 在 '/home/user1' 目录中搜索以 '.bin' 结尾的文件
find /usr/bin -type f -atime +100       # 搜索在过去 100 天内未被使用过的执行文件
find /usr/bin -type f -mtime -10        # 搜索在过去 10 天内被创建或修改过的文件
find / -name \*.rpm -exec chmod 755 '{}' \;  # 搜索以 '.rpm' 结尾的文件并将其权限修改为 755
find / -xdev -name \*.rpm               # 搜索以 '.rpm' 结尾的文件,忽略可移动设备(如光驱、U盘等)
locate \*.ps                            # 寻找以 '.ps' 结尾的文件 (需要先运行 'updatedb' 命令更新数据库)
whereis halt                            # 显示二进制文件、源代码或 man 页的位置
which halt                              # 显示 'halt' 命令的可执行文件的完整路径

5、挂载一个文件系统

mount /dev/hda2 /mnt/hda2                          # 挂载一个叫做 'hda2' 的磁盘到 '/mnt/hda2' 目录 - 确保目录 '/mnt/hda2' 已经存在
umount /dev/hda2                                    # 卸载一个叫做 'hda2' 的磁盘 - 先从挂载点 '/mnt/hda2' 退出
fuser -km /mnt/hda2                                 # 当设备繁忙时,强制卸载 '/mnt/hda2'
umount -n /mnt/hda2                                 # 卸载操作,但不更新 '/etc/mtab' 文件 - 当文件系统为只读或磁盘已满时非常有用
mount /dev/fd0 /mnt/floppy                         # 挂载软盘设备到 '/mnt/floppy'
mount /dev/cdrom /mnt/cdrom                         # 挂载 CD-ROM 或 DVD-ROM 到 '/mnt/cdrom'
mount /dev/hdc /mnt/cdrecorder                      # 挂载 CDRW 或 DVD-ROM 到 '/mnt/cdrecorder'
mount /dev/hdb /mnt/cdrecorder                      # 挂载 CDRW 或 DVD-ROM 到 '/mnt/cdrecorder'(另一设备)
mount -o loop file.iso /mnt/cdrom                   # 挂载一个 ISO 镜像文件到 '/mnt/cdrom'(通过 loop 设备)
mount -t vfat /dev/hda5 /mnt/hda5                   # 挂载一个 Windows FAT32 文件系统到 '/mnt/hda5
mount /dev/sda1 /mnt/usbdisk                       # 挂载 USB 闪存设备到 '/mnt/usbdisk'
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share  # 挂载 Windows 网络共享到 '/mnt/share',并提供用户名和密码

6、磁盘空间

df -h                             # 显示已挂载的分区列表及其磁盘使用情况(以人类可读的格式,如 KB, MB, GB)
ls -lSr | more                    # 以文件大小排序并分页显示当前目录中的文件和目录
du -sh dir1                        # 估算目录 'dir1' 所使用的磁盘空间(以人类可读格式)
du -sk * | sort -rn                # 按文件/目录大小倒序显示当前目录下所有文件和目录的大小
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n  # 按大小排序显示已安装的 RPM 包所占空间(适用于 Fedora, RedHat 系列)
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n  # 按大小排序显示已安装的 Debian 包所占空间(适用于 Ubuntu, Debian 系列)

7、用户和群组

groupadd group_name                        # 创建一个新用户组 'group_name'
groupdel group_name                        # 删除用户组 'group_name'
groupmod -n new_group_name old_group_name   # 重命名用户组,将 'old_group_name' 改为 'new_group_name'
useradd -c "Name Surname" -g admin -d /home/user1 -s /bin/bash user1  # 创建一个新用户 'user1',并将其添加到 'admin' 组,指定主目录和登录 shell
useradd user1                              # 创建一个新用户 'user1'(默认配置)
userdel -r user1                           # 删除用户 'user1' 及其主目录
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1  # 修改用户 'user1' 的属性:更改用户名注释、加入 'system' 组、修改主目录和登录 shell
passwd                                     # 修改当前用户的口令
passwd user1                               # 修改用户 'user1' 的口令(此命令需要 root 权限)
chage -E 2005-12-31 user1                 # 设置用户 'user1' 口令的失效日期为 2005年12月31日
pwck                                       # 检查 '/etc/passwd' 文件的格式和语法,并修复存在的错误
grpck                                      # 检查 '/etc/group' 文件的格式和语法,并修复存在的错误
newgrp group_name                          # 进入一个新的用户组 'group_name',以改变新创建文件的预设组

8、文件的权限

ls -lh                                  # 显示文件和目录的详细信息,包括权限(以人类可读的格式)
ls /tmp | pr -T5 -W$COLUMNS              # 将 '/tmp' 目录中的文件以 5 列格式显示,并根据终端宽度调整显示
chmod ugo+rwx directory1                # 为目录 'directory1' 设置所有人(u)、群组(g)和其他人(o)的读(r)、写(w)和执行(x)权限
chmod go-rwx directory1                 # 删除群组(g)和其他人(o)对目录 'directory1' 的读、写、执行权限
chown user1 file1                       # 将文件 'file1' 的所有者改为 'user1'
chown -R user1 directory1               # 递归地将目录 'directory1' 及其所有子文件的所有者改为 'user1'
chgrp group1 file1                      # 将文件 'file1' 的群组改为 'group1'
chown user1:group1 file1                # 将文件 'file1' 的所有者改为 'user1',群组改为 'group1'
find / -perm -u+s                       # 罗列系统中所有使用了 SUID 控制的文件
chmod u+s /bin/file1                    # 为二进制文件 '/bin/file1' 设置 SUID 位 - 运行该文件的用户将具有文件所有者的权限
chmod u-s /bin/file1                    # 禁用二进制文件 '/bin/file1' 的 SUID 位
chmod g+s /home/public                  # 为目录 '/home/public' 设置 SGID 位 - 使得该目录下新创建的文件继承该目录的群组
chmod g-s /home/public                  # 禁用目录 '/home/public' 的 SGID 位
chmod o+t /home/public                  # 为目录 '/home/public' 设置 STIKY 位 - 只有文件所有者可以删除文件
chmod o-t /home/public                  # 禁用目录 '/home/public' 的 STIKY 位
chmod +x 文件路径                       # 为文件路径指定的文件添加执行权限给所有者、所属组和其他用户
chmod -x 文件路径                       # 从文件路径指定的文件中删除所有者、所属组和其他用户的执行权限
chmod u+x 文件路径                      # 为文件的所有者添加执行权限
chmod g+x 文件路径                      # 为文件的所属组添加执行权限
chmod o+x 文件路径                      # 为文件的其他用户添加执行权限
chmod ug+x 文件路径                     # 为文件的所有者和所属组添加执行权限
chmod =wx 文件路径                      # 为文件的所有者、所属组和其他用户添加写、执行权限,并删除读权限
chmod ug=wx 文件路径                    # 为文件的所有者和所属组添加写、执行权限,并删除读权限

9、文件的特殊属性

使用 “+” 设置权限,使用 “-” 用于取消

chattr +a file1                        # 只允许以追加方式读写文件 'file1'(不能删除或修改现有内容)
chattr +c file1                        # 允许文件 'file1' 被内核自动压缩和解压(适用于支持的文件系统)
chattr +d file1                        # 在进行文件系统备份时,'dump' 程序将忽略文件 'file1'
chattr +i file1                        # 设置文件 'file1' 为不可变文件,不能被删除、修改、重命名或链接
chattr +s file1                        # 允许文件 'file1' 被安全删除(数据会被覆盖后删除)
chattr +S file1                        # 一旦文件 'file1' 被修改,系统会立即将修改写入磁盘
chattr +u file1                        # 如果文件 'file1' 被删除,允许以后恢复该文件
lsattr                                 # 显示当前目录中文件的特殊属性(如 +a, +i 等)

10、打包和压缩文件

bunzip2 file1.bz2                        # 解压一个名为 'file1.bz2' 的 bzip2 压缩文件
bzip2 file1                              # 压缩一个名为 'file1' 的文件为 '.bz2' 格式
gunzip file1.gz                          # 解压一个名为 'file1.gz' 的 gzip 压缩文件
gzip file1                                # 压缩一个名为 'file1' 的文件为 '.gz' 格式
gzip -9 file1                             # 使用最大压缩率压缩文件 'file1'
rar a file1.rar test_file                 # 创建一个名为 'file1.rar' 的 rar 包,包含文件 'test_file'
rar a file1.rar file1 file2 dir1          # 创建一个名为 'file1.rar' 的 rar 包,包含文件 'file1', 'file2' 和目录 'dir1'
rar x file1.rar                           # 解压一个名为 'file1.rar' 的 rar 压缩包
unrar x file1.rar                         # 解压一个名为 'file1.rar' 的 rar 压缩包(unrar 提供了更灵活的解压功能)
tar -cvf archive.tar file1                # 创建一个不压缩的 tar 包 'archive.tar',包含文件 'file1'
tar -cvf archive.tar file1 file2 dir1     # 创建一个不压缩的 tar 包 'archive.tar',包含文件 'file1', 'file2' 和目录 'dir1'
tar -tf archive.tar                       # 显示 tar 包 'archive.tar' 中的内容
tar -xvf archive.tar                      # 解压一个 tar 包 'archive.tar'
tar -xvf archive.tar -C /tmp              # 解压 tar 包 'archive.tar' 并将文件释放到 '/tmp' 目录
tar -cvfj archive.tar.bz2 dir1            # 创建一个 bzip2 格式的 tar 包 'archive.tar.bz2',包含目录 'dir1'
tar -xvfj archive.tar.bz2                 # 解压一个 bzip2 格式的 tar 包 'archive.tar.bz2'
tar -cvfz archive.tar.gz dir1             # 创建一个 gzip 格式的 tar 包 'archive.tar.gz',包含目录 'dir1'
tar -xvfz archive.tar.gz                  # 解压一个 gzip 格式的 tar 包 'archive.tar.gz'
zip file1.zip file1                       # 创建一个名为 'file1.zip' 的 zip 压缩包,包含文件 'file1'
zip -r file1.zip file1 file2 dir1         # 创建一个 zip 格式的压缩包 'file1.zip',包含文件 'file1', 'file2' 和目录 'dir1'
unzip file1.zip                           # 解压一个名为 'file1.zip' 的 zip 压缩包

11、RPM 包

  • (Fedora, Redhat及类似系统)
rpm -ivh package.rpm                         # 安装一个 rpm 包,`-i` 安装,`-v` 显示详细信息,`-h` 显示进度条
rpm -ivh --nodeeps package.rpm               # 安装 rpm 包,忽略依赖关系警告(仅在确定无依赖时使用)
rpm -U package.rpm                           # 更新一个已安装的 rpm 包,但不改变其配置文件
rpm -F package.rpm                           # 更新一个已安装的 rpm 包,仅在包已安装时有效
rpm -e package_name.rpm                      # 删除一个已安装的 rpm 包
rpm -qa                                      # 显示系统中所有已安装的 rpm 包
rpm -qa | grep httpd                         # 显示所有名称中包含 "httpd" 字样的 rpm 包
rpm -qi package_name                         # 获取已安装包的详细信息
rpm -qg "System Environment/Daemons"         # 显示属于指定组(如 "System Environment/Daemons")的 rpm 包
rpm -ql package_name                         # 显示已安装的 rpm 包提供的文件列表
rpm -qc package_name                         # 显示已安装的 rpm 包提供的配置文件列表
rpm -q package_name --whatrequires           # 显示与指定 rpm 包存在依赖关系的包列表
rpm -q package_name --whatprovides           # 显示一个 rpm 包所提供的功能或文件
rpm -q package_name --scripts                # 显示在安装/删除过程中执行的脚本(如 pre/post install/remove)
rpm -q package_name --changelog              # 显示 rpm 包的修改历史
rpm -qf /etc/httpd/conf/httpd.conf          # 确认指定文件(如 '/etc/httpd/conf/httpd.conf')由哪个 rpm 包提供
rpm -qp package.rpm -l                      # 显示尚未安装的 rpm 包提供的文件列表
rpm --import /media/cdrom/RPM-GPG-KEY       # 导入 rpm 公钥数字证书,用于验证包的签名
rpm --checksig package.rpm                  # 检查 rpm 包的完整性,确认包的签名
rpm -qa gpg-pubkey                          # 列出所有已安装的 GPG 公钥,用于验证包签名的完整性
rpm -V package_name                         # 验证一个已安装的 rpm 包,检查文件尺寸、许可、类型、所有者、MD5校验、最后修改时间等
rpm -Va                                     # 检查系统中所有已安装的 rpm 包的完整性(会逐个检查所有文件,慎用)
rpm -Vp package.rpm                         # 验证一个尚未安装的 rpm 包,检查包中的文件完整性
rpm2cpio package.rpm | cpio --extract --make-directories *bin*  # 从 rpm 包中提取可执行文件并解压到当前目录
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm  # 从源码目录安装已构建的 rpm 包(通过 `arch` 确定系统架构)
rpmbuild --rebuild package_name.src.rpm     # 从 rpm 源码包(`.src.rpm`)构建一个新的 rpm 包

12、YUM 软件包升级器

  • (Fedora, RedHat及类似系统)
yum install package_name                  # 下载并安装一个 rpm 包,自动解决依赖关系
yum localinstall package_name.rpm          # 从本地 rpm 包安装,自动处理依赖关系
yum update package_name.rpm               # 更新已安装的 rpm 包
yum update package_name                   # 更新指定的 rpm 包及其依赖
yum remove package_name                   # 删除一个已安装的 rpm 包
yum list                                  # 列出当前系统中安装的所有 rpm 包
yum search package_name                   # 在 rpm 仓库中搜索指定的软件包
yum clean packages                        # 清理 rpm 缓存,删除已下载的包
yum clean headers                         # 删除所有已下载的 rpm 包头文件
yum clean all                             # 删除所有缓存的包和头文件,清理所有缓存

13、DEB 包

(Debian, Ubuntu 以及类似系统)

# dpkg 命令 (Debian 和 Ubuntu 系统中的软件包管理工具)
dpkg -i package.deb                       # 安装或更新一个 .deb 包
dpkg -r package_name                       # 从系统中删除一个已安装的 .deb 包
dpkg -l                                    # 列出系统中已安装的所有 .deb 包
dpkg -l | grep httpd                       # 显示所有名称中包含 "httpd" 字样的 .deb 包
dpkg -s package_name                       # 获取已安装的某个包的详细信息
dpkg -L package_name                       # 显示已安装的 .deb 包提供的文件列表
dpkg --contents package.deb               # 显示尚未安装的 .deb 包提供的文件列表
dpkg -S /bin/ping                          # 查找指定文件(如 '/bin/ping')由哪个 .deb 包提供

# APT 命令 (Debian, Ubuntu 及其衍生系统的包管理工具)
apt-get install package_name               # 安装或更新一个 .deb 包
apt-cdrom install package_name             # 从光盘安装或更新一个 .deb 包
apt-get update                             # 更新本地软件包索引,获取最新的软件包信息
apt-get upgrade                            # 升级系统中所有已安装的软件包
apt-get remove package_name                # 从系统中删除一个已安装的 .deb 包
apt-get check                              # 检查系统的依赖关系,确保仓库的配置正确
apt-get clean                              # 清理下载的安装包缓存,释放磁盘空间
apt-cache search searched-package         # 搜索指定关键字的软件包,并返回包名

14、查看文件内容

cat file1                              # 从第一个字节开始正向查看文件的内容
tac file1                              # 从最后一行开始反向查看一个文件的内容
more file1                             # 分页查看一个长文件的内容
less file1                             # 类似 'more',但允许在文件中正向和反向操作
head -2 file1                          # 查看文件的前两行
tail -2 file1                          # 查看文件的最后两行
tail -f /var/log/messages              # 实时查看并跟踪文件内容的变化(如日志文件)

15、文本处理

# 使用管道 (PIPE),标准输入 (STDIN) 和标准输出 (STDOUT) 的通用语法
cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt       # 将多个文件的内容通过管道传递给命令进行处理,输入输出操作
cat file1 | command (sed, grep, awk, etc...) > result.txt            # 使用管道将文件内容传递给命令,并将结果输出到新文件
cat file1 | command (sed, grep, awk, etc...) >> result.txt           # 将命令处理后的输出追加到已有文件中

# 查找文件中的文本
grep Aug /var/log/messages                                            # 在 /var/log/messages 文件中查找包含 "Aug" 的行
grep ^Aug /var/log/messages                                           # 在 /var/log/messages 文件中查找以 "Aug" 开头的行
grep [0-9] /var/log/messages                                          # 在 /var/log/messages 文件中查找包含数字的行
grep Aug -R /var/log/*                                                # 在 /var/log 目录及其子目录中递归查找包含 "Aug" 的行

# 使用 sed 进行文本替换和删除
sed 's/stringa1/stringa2/g' example.txt                              # 替换 example.txt 文件中的所有 "string1" 为 "string2"
sed '/^$/d' example.txt                                              # 删除 example.txt 文件中的所有空行
sed '/ *#/d; /^$/d' example.txt                                      # 删除 example.txt 文件中的所有注释行和空行
echo 'esempio' | tr '[:lower:]' '[:upper:]'                         # 将小写字母转换为大写
sed -e '1d' result.txt                                               # 删除 result.txt 文件中的第一行
sed -n '/stringa1/p' example.txt                                     # 只打印包含 "string1" 的行
sed -e 's/ *$//' example.txt                                         # 删除每行末尾的空白字符
sed -e 's/stringa1//g' example.txt                                   # 删除 example.txt 文件中所有的 "string1" 并保留其他内容
sed -n '1,5p;5q' example.txt                                         # 打印从第 1 行到第 5 行的内容
sed -n '5p;5q' example.txt                                           # 打印第 5 行并退出
sed -e 's/00*/0/g' example.txt                                       # 用一个零替换所有连续的零

# 使用 awk 进行文本处理
cat -n file1                                                        # 显示 file1 文件的内容并显示行号
cat example.txt | awk 'NR%2==1'                                       # 显示 example.txt 文件中所有奇数行
echo a b c | awk '{print $1}'                                         # 输出一行中的第一列
echo a b c | awk '{print $1,$3}'                                      # 输出一行中的第一列和第三列

# 使用 paste 命令合并文件
paste file1 file2                                                    # 将 file1 和 file2 文件逐行合并
paste -d '+' file1 file2                                              # 用 "+" 连接 file1 和 file2 的内容

# 使用 sort 和 uniq 进行排序和去重
sort file1 file2                                                     # 排序两个文件的内容
sort file1 file2 | uniq                                              # 去重,保留不重复的行
sort file1 file2 | uniq -u                                           # 显示两个文件的差异,删除交集,保留唯一的行
sort file1 file2 | uniq -d                                           # 显示两个文件的交集,只保留重复的行

# 使用 comm 命令比较文件
comm -1 file1 file2                                                  # 比较两个文件并删除 file1 中的内容
comm -2 file1 file2                                                  # 比较两个文件并删除 file2 中的内容
comm -3 file1 file2                                                  # 比较两个文件并删除两个文件中共有的部分

16、字符设置和文件格式转换

dos2unix filedos.txt fileunix.txt             # 将文件 'filedos.txt' 从 MSDOS 格式转换为 UNIX 格式并保存为 'fileunix.txt'
unix2dos fileunix.txt filedos.txt             # 将文件 'fileunix.txt' 从 UNIX 格式转换为 MSDOS 格式并保存为 'filedos.txt'
recode ..HTML < page.txt > page.html          # 将 'page.txt' 文件的内容转换为 HTML 格式并保存为 'page.html'
recode -l | more                             # 显示所有支持的转换格式,可以通过 'more' 分页显示

17、文件系统分析

badblocks -v /dev/hda1                        # 检查磁盘 '/dev/hda1' 上的坏块,'v' 表示显示详细输出
fsck /dev/hda1                                # 检查并修复文件系统的完整性,适用于 Linux 文件系统
fsck.ext2 /dev/hda1                           # 检查并修复 '/dev/hda1' 上的 ext2 文件系统
e2fsck /dev/hda1                              # 检查并修复 '/dev/hda1' 上的 ext2 文件系统
e2fsck -j /dev/hda1                          # 检查并修复 '/dev/hda1' 上的 ext3 文件系统,'j' 参数表示 ext3
fsck.ext3 /dev/hda1                          # 检查并修复 '/dev/hda1' 上的 ext3 文件系统
fsck.vfat /dev/hda1                          # 检查并修复 '/dev/hda1' 上的 FAT 文件系统(常用于闪存、U盘等)
fsck.msdos /dev/hda1                         # 检查并修复 '/dev/hda1' 上的 MSDOS 文件系统(较老的 DOS 系统格式)
dosfsck /dev/hda1                            # 检查并修复 '/dev/hda1' 上的 DOS 文件系统(通常用于 FAT 文件系统)

18、初始化一个文件系统

mkfs /dev/hda1                                 # 在 '/dev/hda1' 分区创建一个文件系统
mke2fs /dev/hda1                               # 在 '/dev/hda1' 分区创建一个 Linux ext2 文件系统
mke2fs -j /dev/hda1                            # 在 '/dev/hda1' 分区创建一个 Linux ext3(日志型)文件系统
mkfs -t vfat 32 -F /dev/hda1                   # 创建一个 FAT32 文件系统在 '/dev/hda1' 分区
fdformat -n /dev/fd0                          # 格式化一个软盘('/dev/fd0'),'-n' 参数表示无交互模式
mkswap /dev/hda3                              # 在 '/dev/hda3' 分区创建一个 swap 文件系统

19、SWAP文件系统

mkswap /dev/hda3                             # 在 '/dev/hda3' 分区创建一个 swap 文件系统
swapon /dev/hda3                             # 启用 '/dev/hda3' 分区作为 swap 文件系统
swapon /dev/hda2 /dev/hdb3                   # 启用 '/dev/hda2' 和 '/dev/hdb3' 分区作为 swap 文件系统

20、备份

dump -0aj -f /tmp/home0.bak /home                   # 完整备份 '/home' 目录并保存到 '/tmp/home0.bak' 文件
dump -1aj -f /tmp/home0.bak /home                   # 增量备份 '/home' 目录并保存到 '/tmp/home0.bak' 文件
restore -if /tmp/home0.bak                          # 从备份文件 '/tmp/home0.bak' 还原数据
rsync -rogpav --delete /home /tmp                    # 同步 '/home' 目录到 '/tmp' 目录,并删除目标中不再存在的文件
rsync -rogpav -e ssh --delete /home ip_address:/tmp  # 通过 SSH 将本地 '/home' 目录同步到远程主机 '/tmp' 目录,删除目标中不再存在的文件
rsync -az -e ssh --delete ip_addr:/home/public /home/local  # 通过 SSH 和压缩将远程目录 '/home/public' 同步到本地 '/home/local' 目录
rsync -az -e ssh --delete /home/local ip_addr:/home/public  # 通过 SSH 和压缩将本地目录 '/home/local' 同步到远程主机 '/home/public' 目录
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz'  # 通过 SSH 将本地磁盘内容备份并压缩传输到远程主机
dd if=/dev/sda of=/tmp/file1                       # 将磁盘 '/dev/sda' 的内容备份到 '/tmp/file1' 文件
tar -Puf backup.tar /home/user                     # 对 '/home/user' 目录进行增量备份,保存为 'backup.tar' 文件
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p'  # 通过 SSH 在远程主机 '/home/share' 目录复制本地 '/tmp/local' 目录内容
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p'  # 通过 SSH 将本地 '/home' 目录复制到远程主机 '/home/backup-home' 目录
tar cf - . | (cd /tmp/backup ; tar xf - )            # 将当前目录复制到 '/tmp/backup' 目录,保留原有权限和链接
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents  # 查找并复制所有以 '.txt' 结尾的文件到 '/home/backup',保留目录结构
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2  # 查找所有以 '.log' 结尾的文件并压缩为 '.tar.bz2' 格式
dd if=/dev/hda of=/dev/fd0 bs=512 count=1          # 将磁盘的 MBR (Master Boot Record) 备份到软盘
dd if=/dev/fd0 of=/dev/hda bs=512 count=1          # 从软盘恢复备份的 MBR 内容到磁盘

21、光盘

cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force   # 清空一个可复写的光盘内容,并强制快速擦除后弹出
mkisofs /dev/cdrom > cd.iso                                       # 在磁盘上创建一个光盘的 ISO 镜像文件
mkisofs /dev/cdrom | gzip > cd_iso.gz                              # 在磁盘上创建一个压缩的光盘 ISO 镜像文件
mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd  # 创建目录 'data_cd' 的 ISO 镜像文件,并设置标签、ISO 级别等选项
cdrecord -v dev=/dev/cdrom cd.iso                                 # 刻录一个 ISO 镜像文件到光盘
gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom -                    # 刻录一个压缩的 ISO 镜像文件到光盘
mount -o loop cd.iso /mnt/iso                                     # 挂载一个 ISO 镜像文件到 '/mnt/iso' 目录
cd-paranoia -B                                                   # 从 CD 光盘转录所有音轨到 WAV 文件中
cd-paranoia -- "-3"                                              # 从 CD 光盘转录第 3 音轨到 WAV 文件中
cdrecord --scanbus                                               # 扫描总线以识别 SCSI 通道上的光盘设备
dd if=/dev/hdc | md5sum                                           # 校验一个设备(如 CD)内容的 MD5 校验和

22、网络

  • (以太网和WIFI无线)
ifconfig eth0                                                 # 显示一个以太网卡 'eth0' 的配置
ifup eth0                                                     # 启用 'eth0' 网络设备
ifdown eth0                                                   # 禁用 'eth0' 网络设备
ifconfig eth0 192.168.1.1 netmask 255.255.255.0               # 配置 'eth0' 的 IP 地址和子网掩码
ifconfig eth0 promisc                                         # 设置 'eth0' 为混杂模式以嗅探数据包 (sniffing)
dhclient eth0                                                 # 以 DHCP 模式启用 'eth0' 网络接口
route -n                                                      # 显示路由表
route add -net 0/0 gw IP_Gateway                              # 配置默认网关
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 # 配置静态路由到网络 '192.168.0.0/16'
route del 0/0 gw IP_gateway                                   # 删除默认网关的静态路由
echo "1" > /proc/sys/net/ipv4/ip_forward                      # 启用 IP 路由转发
hostname                                                     # 显示系统的主机名
host www.example.com                                          # 查找主机名解析,反向解析 IP 地址
nslookup www.example.com                                      # 查找主机名解析,反向解析 IP 地址
ip link show                                                 # 显示所有网络接口的链接状态
mii-tool eth0                                                # 显示 'eth0' 网络接口的链接状态
ethtool eth0                                                 # 显示 'eth0' 网络卡的统计信息
netstat -tup                                                 # 显示所有活动的网络连接及其 PID
netstat -tupl                                                # 显示系统上所有监听的网络服务及其 PID
tcpdump tcp port 80                                          # 显示所有 HTTP 流量
iwlist scan                                                  # 扫描并显示无线网络
iwconfig eth1                                                # 显示 'eth1' 无线网卡的配置信息
hostname                                                     # 显示主机名
host www.example.com                                          # 查找主机名解析,反向解析 IP 地址
nslookup www.example.com                                      # 查找主机名解析,反向解析 IP 地址
whois www.example.com                                         # 查找 Whois 数据库中的信息

23、列出目录内容

ls -a                      # 显示所有文件(包括隐藏文件)
ls -l                      # 显示详细信息(权限、大小、时间等)
ls -R                      # 递归显示子目录结构
ls -ld                     # 显示目录和链接的详细信息(而不是其中的文件)
ctrl+r                     # 在历史记录中搜索命令(输入命令中的任意一个字符)
# Linux中以 . 开头的文件是隐藏文件,Windows同理
pwd                        # 显示当前工作目录(打印工作目录)

24、查看文件的类型

file filename            # 查看文件的类型
file example.txt         # 输出可能是:ASCII text
file image.jpg           # 输出可能是:JPEG image data
file /bin/bash           # 输出可能是:ELF 64-bit LSB executable, x86-64

25、复制文件目录等操作

# 1. cp:复制文件和目录
cp source_file target_file           # 将源文件复制到目标文件(或文件夹)
cp -r source_directory target_directory  # 递归复制整个目录树
cp -v source_file target_file        # 复制文件时,显示详细信息

# 2. touch:创建文件或修改文件的时间戳
touch file_name                      # 创建空文件,若文件存在,则修改文件时间
touch -d "2004-02-10" test           # 将test文件的时间修改为指定日期(2004年2月10日)
touch abc                            # 如果abc文件存在,更新其时间戳;若不存在,则创建该文件

# 3. mv:移动或重命名文件/目录
mv a.txt ../                         # 将a.txt文件移动到上层目录
mv a.txt b.txt                       # 将a.txt重命名为b.txt
mv dir2 ../                           # 将dir2目录上移一层(移动到上级目录)

# 4. rm:删除文件
rm file_name                          # 删除指定文件
rm -i file_name                       # 删除文件时询问是否确认删除
rm -r directory_name                  # 递归删除目录及其内容

# 5. mkdir:创建文件夹
mkdir folder_name                     # 创建一个新的文件夹

# 6. rm -r:递归删除文件夹(可删除非空文件夹)
rm -r folder_name                     # 删除目录及其所有内容(包括子目录和文件)

# 7. rmdir:删除空文件夹
rmdir folder_name                     # 删除空目录

# 8. mkdir -p:同时创建多层目录
mkdir -p dir1/dir2                    # 创建dir1和dir1/dir2目录(若dir1不存在,则创建)

# 9. rmdir -p:删除目录及其父目录(当父目录为空时)
rmdir -p dir1/dir2                    # 删除dir2及其父目录dir1(如果它们为空)

# 10. rm *:删除当前目录下的所有文件
rm *                                  # 删除当前目录下的所有文件(不删除目录)

# 11. rm -f:强制删除文件,不询问
rm -f *.txt                           # 强制删除所有以.txt结尾的文件

# 12. rm -i:删除文件时询问是否确认
rm -i *                               # 删除当前目录下所有文件时进行确认(逐一询问)

# 13. rm -r:递归删除文件和目录
rm -r test                            # 删除test目录及其包含的文件和子目录
rm -r *                               # 删除当前目录下所有文件和子目录

# 14. rm -rf:强制递归删除文件和目录
rm -rf test                           # 强制删除test目录及其所有内容,不询问确认

# 15. grep:在文件中搜索匹配的字符
grep "linux" test.txt                 # 搜索test.txt文件中所有包含"linux"的行并输出

# 16. ln:创建文件的硬链接或软链接
# 软链接(符号链接):创建一个指向源文件的链接文件
ln -s /usr/share/do doc               # 创建一个软链接doc,指向目录/usr/share/do

# 硬链接:创建一个硬链接,多个文件指向同一数据块
ln /usr/share/test hard               # 创建硬链接hard,指向文件test

26、系统常用命令

1、显示命令

date                                  # 显示当前系统时间
date "+%Y--%m--%d"                    # 格式化显示当前日期:年--月--日
date -s "2024-12-23 14:30:00"         # 设置系统时间为指定日期和时间
hwclock                                # 显示硬件时钟时间
cal                                    # 显示当前月的日历
cal 4 2004                              # 显示2004年4月的日历
cal -y 2003                             # 显示2003年的日历
uptime                                  # 显示系统的当前运行时间

2、输出查看命令

# 1. echo:显示输入的内容并将内容追加到文件
echo "liuyazhuang" >> liuyazhuang.txt    # 将字符串"liuyazhuang"追加到liuyazhuang.txt文件

# 2. cat:显示文件内容,并可将多个文件合并为一个文件
cat test.txt                             # 显示test.txt文件的内容
cat test.txt | more                      # 逐页显示test.txt文件中的内容
cat test.txt >> test1.txt                # 将test.txt文件内容追加到test1.txt文件之后
cat test.txt test2.txt > readme.txt      # 将test.txt和test2.txt文件合并成readme.txt文件

# 3. head:显示文件的头几行(默认10行),-n指定显示的行数
head -n 5 test.txt                       # 显示test.txt文件的前5行

# 4. tail:显示文件的末尾几行(默认10行),-n指定显示的行数,-f用于实时跟踪文件内容更新(一般用于查看日志)
tail -n 10 /etc/passwd                   # 显示/etc/passwd文件的倒数10行内容
tail +10 /etc/passwd                     # 显示/etc/passwd文件从第10行开始到文件末尾的内容
tail -f /var/log/syslog                   # 实时显示syslog日志文件的新内容

# 5. more:逐页显示文件内容(只能向下翻页)
more test.txt                            # 逐页显示test.txt文件内容,按空格键翻页,按Q退出

# 6. less:翻页显示文件内容(支持上下翻页)
less test.txt                            # 翻页显示test.txt文件内容,按上下箭头滚动,按Q退出

3、查看硬件信息

# 1. lspci:查看PCI设备的基本信息
lspci                                   # 显示系统中所有PCI设备的基本信息
lspci -v                                # 显示系统中所有PCI设备的详细信息(包括设备描述和驱动等)

# 2. lsusb:查看USB设备的基本信息
lsusb                                   # 显示系统中所有连接的USB设备
lsusb -v                                # 显示系统中所有USB设备的详细信息(包括设备描述、厂商、ID等)

# 3. lsmod:查看已加载的内核模块(驱动)
lsmod                                   # 显示当前系统中已加载的所有内核模块(驱动)

4、归档、压缩

# 1. zip:压缩文件
zip liuyazhuang.zip myfile                  # 将myfile文件压缩为liuyazhuang.zip压缩包

# 2. unzip:解压文件
unzip liuyazhuang.zip                       # 解压liuyazhuang.zip文件

# 3. gzip:压缩文件
gzip 文件名                                 # 压缩指定的文件,生成.gz压缩文件

# 4. tar:归档文件
tar -cvf out.tar liuyazhuang                # 创建一个名为out.tar的归档文件,包含liuyazhuang文件
tar -xvf liuyazhuang.tar                    # 解压liuyazhuang.tar归档文件

# 5. tar带gzip压缩:打包并压缩
tar -cvzf backup.tar.gz /etc                # 将/etc目录打包并使用gzip压缩为backup.tar.gz

# 6. tar参数详解:
# -c:创建一个新tar文件
# -v:显示详细的过程信息
# -f:指定压缩文件的名称
# -z:调用gzip进行压缩
# -t:查看压缩文件的内容
# -x:解开tar文件
tar -cvf test.tar *                         # 将当前目录下的所有文件打包成test.tar
tar -zcvf test.tar.gz *                     # 将当前目录下的所有文件打包成test.tar,并使用gzip压缩
tar -tf test.tar                           # 查看test.tar文件中包括的内容
tar -xvf test.tar                          # 解压test.tar文件
tar -zxvf foo.tar.gz                       # 解压foo.tar.gz压缩包

# 7. gzip及gunzip命令:
gzip test.txt                              # 压缩test.txt文件,生成test.txt.gz
gzip -l test.txt.gz                        # 显示test.txt.gz文件的压缩信息,包括压缩率
gunzip test.txt.gz                        # 解压test.txt.gz文件,恢复为test.txt

6、查找

# 1. locate:快速查找文件、文件夹
locate keyword                               # 查找文件名中包含关键字"keyword"的文件或目录
# 需要预先建立数据库,默认每天更新一次,也可以手动更新数据库
updatedb                                      # 手动更新数据库以便locate命令能找到最新的文件

# 2. find:查找文件或目录
find . -name '*liuyazhuang*'                 # 查找当前目录下文件名中包含"liuyazhuang"的文件
find / -name '*.conf'                        # 查找根目录下(整个文件系统)后缀为.conf的文件
find / -perm 777                             # 查找权限为777的文件
find / -type d                               # 查找根目录下的所有目录
find . -name "a*" -exec ls -l {} \;          # 查找当前目录下以"a"开头的文件,并列出详细信息

# 3. ctrl+c:终止当前的命令
# 用于停止当前正在执行的命令或进程

# 4. who 或 w 命令:查看当前系统中有哪些用户登录
who                                          # 查看当前系统中登录的用户
w                                            # 查看当前登录用户的信息,包括活动时间、登录来源等

# 5. dmesg命令:显示系统诊断信息
dmesg                                        # 查看系统的诊断信息,包括操作系统版本、硬件信息等

# 6. df命令:查看文件系统的各个分区的占用情况
df                                           # 查看所有挂载的分区的使用情况
df -h                                        # 以人类可读的格式显示(例如KB、MB、GB)

# 7. du命令:查看某个目录中各级子目录所使用的硬盘空间数
du                                           # 查看当前目录及其子目录所占用的磁盘空间
du -sh /path/to/directory                    # 查看指定目录的总空间使用情况(-s表示总结,-h以人类可读的格式显示)

# 8. free命令:查看系统内存和虚拟内存的使用情况
free                                          # 查看内存的使用情况,包括物理内存和交换空间
free -h                                       # 以人类可读的格式显示内存使用情况(例如GB、MB)