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)