Linux中40个有用的命令


📘 基础命令


📄 ls 列出目录内容

ls                    # 列出当前目录中的文件和目录
ls /path/to/directory # 列出指定目录中的文件和目录
ls -l                 # 以长列表格式显示详细信息
ls -a                 # 显示所有文件,包括隐藏文件
ls -t                 # 按文件修改时间排序
ls -lt                # 以长列表格式显示,并按修改时间排序
ls -S                 # 按文件大小排序
ls -R                 # 递归地列出所有子目录的内容
ls -lh                # 以易读的格式显示文件大小
ls -s                 # 显示每个文件分配的块大小
ls --color            # 以颜色化方式区分不同类型的文件
ls -i                 # 显示每个文件的 inode 号
ls -d */              # 只显示目录,不显示目录内容
ls -X                 # 按文件扩展名排序
ls --time=atime       # 显示最近访问时间
ls --time=ctime       # 显示最近更改状态的时间
ls --author           # 显示文件作者信息
ls -r                 # 逆序排列

📂 cd 改变当前目录

# 切换到当前用户的家目录
cd
# 同样切换到家目录,~ 是家目录的快捷方式
cd ~
# 切换到根目录
cd /
# 切换到上一级目录
cd ..
# 切换到之前的工作目录
cd -
# 切换到指定的目录
cd /path/to/directory
# 连续返回上两级目录
cd ../..
# 切换到家目录下的 Documents 文件夹
cd ~/Documents
# 切换到上一个命令的最后一个参数指定的目录
cd !$

📍 pwd 打印当前工作目录

# 打印当前工作目录的绝对路径
pwd

📋 cp 复制文件或目录

# 基本命令,复制文件
cp source.txt destination.txt

# 复制目录,使用 -r (递归) 选项
cp -r source_directory destination_directory

# 使用 -v (verbose) 选项来显示详细的复制过程
cp -v source.txt destination.txt

# 使用 -i (interactive) 选项,在覆盖文件之前进行提示
cp -i source.txt destination.txt

# 使用 -u (update) 选项,只在源文件比目标文件新,或者目标文件不存在时,才复制文件
cp -u source.txt destination.txt

# 复制文件并保留原始文件的属性,如时间戳和权限,使用 -p (preserve) 选项
cp -p source.txt destination.txt

# 复制一个文件到当前目录下的另一个名字
cp source.txt newname.txt

# 复制多个文件到一个目标目录中
cp file1.txt file2.txt destination_directory

# 复制文件并跟踪链接,使用 -L (follow symbolic links) 选项
cp -L symbolic_link.txt destination.txt

# 使用 -a (archive) 选项,递归复制并保留链接、文件属性等
cp -a source_directory destination_directory

🚚 mv 移动或重命名文件和目录

# 基本命令,移动或重命名文件
mv source.txt destination.txt

# 移动文件到另一个目录下
mv file.txt /path/to/directory/

# 重命名目录
mv old_directory_name new_directory_name

# 使用 -v (verbose) 选项来显示详细的移动过程
mv -v file.txt /path/to/directory/

# 使用 -i (interactive) 选项,在覆盖文件之前进行提示
mv -i source.txt destination.txt

# 移动多个文件到一个目标目录中
mv file1.txt file2.txt /path/to/directory/

# 当目标目录已存在同名文件时,不进行覆盖
mv -n file.txt /path/to/directory/

# 在不同的文件系统之间移动文件,强制使用复制和删除方式
mv -f source.txt /path/to/directory/

🗑️ rm 删除文件或目录

# 基本命令,删除文件
rm file.txt

# 使用 -f (force) 选项强制删除文件,忽略不存在的文件,无提示
rm -f file.txt

# 使用 -i (interactive) 选项,在删除前提示用户确认
rm -i file.txt

# 删除目录及其内容,使用 -r (recursive) 选项
rm -r directory_name

# 删除目录及其内容,同时使用 -f 选项不进行提示
rm -rf directory_name

# 删除多个文件
rm file1.txt file2.txt file3.txt

# 使用通配符删除特定模式的文件
rm *.txt

# 删除除了特定模式外的所有文件(此处删除非.txt文件)
rm !(*.txt)

# 删除隐藏文件和目录
rm -r .*

# 删除当前目录下所有文件和目录,除了隐藏文件
rm -r *

📁 mkdir 创建目录

# 创建一个新目录
mkdir new_directory

# 创建多个新目录
mkdir dir1 dir2 dir3

# 使用 -p (parents) 选项创建多级目录
mkdir -p nested/dir/structure

# 使用 -v (verbose) 选项显示创建过程
mkdir -v new_directory

# 创建目录并设置权限(此处设置为 755)
mkdir -m 755 secure_directory

# 使用 -p 选项时,不会报错如果目录已存在
mkdir -p existing_directory

# 创建目录并设置指定用户和用户组(使用 chown 需要管理员权限)
# sudo mkdir new_directory && sudo chown user:group new_directory

🗃️ rmdir 删除空目录

# 删除一个空目录
rmdir empty_directory

# 使用 -p (parents) 选项删除目录,并尝试删除其父目录
rmdir -p nested/dir/structure

# 如果目录不为空,使用 -p 选项会导致错误
# rmdir -p non_empty_directory/structure

# 使用 -v (verbose) 选项显示删除过程
rmdir -v empty_directory

# 删除多个空目录
rmdir dir1 dir2 dir3

# 尝试删除多个目录,如果遇到非空目录将停止并报错
# rmdir dir1 non_empty_dir2 dir3

🗃️ touch 创建新的空文件

# 创建一个新的空文件
touch 新文件.txt

# 同时创建多个新文件
touch 新文件1.txt 新文件2.txt 新文件3.txt

# 更新文件的访问和修改时间为当前时间
touch 已存在的文件.txt

# 创建一个新文件并指定访问时间和修改时间
# 时间的格式为 [[CC]YY]MMDDhhmm[.ss]
touch -t 202301011230 新文件.txt

# 结合文件通配符使用 touch 命令
touch /路径/到/目录/*.txt

# 使用 `-d` 选项创建一个具有特定时间戳的新文件
touch -d '2023年1月1日 12:30' 新文件.txt

# 如果文件已存在,不更改时间,也不创建文件
touch -c 文件.txt

# 使用 touch 创建一系列具有前缀的文件
touch 文件-{01..10}.txt

# 使用 touch 创建一系列具有后缀的文件
touch {01..10}-报告.txt

📖 cat 显示或连接文件内容

# 显示单个文件的内容
cat 文件.txt

# 显示多个文件的内容
cat 文件1.txt 文件2.txt

# 创建一个新文件并写入内容
cat > 新文件.txt
# 输入文件内容,完成后按 Ctrl+D 结束

# 将多个文件的内容合并到一个新文件中
cat 文件1.txt 文件2.txt > 合并后的文件.txt

# 在现有文件内容之后追加新内容
cat >> 现有文件.txt
# 输入要追加的内容,完成后按 Ctrl+D 结束

# 使用 -n 选项显示行号
cat -n 文件.txt

# 使用 -b 选项只为非空输出行显示行号
cat -b 文件.txt

# 查看多个文件并在每个文件间显示标题
cat -v 文件.txt

# 使用 -s 选项压缩连续的空行为单行
cat -s 文件.txt

# 反向连接文件内容,即从最后一行到第一行显示
tac 文件.txt

📢 echo 显示传递的参数

# 显示简单的字符串
echo "这是一条消息"

# 显示变量的值
echo $变量名

# 显示命令的输出
echo $(命令)

# 显示带有转义字符的字符串
echo -e "第一行\n第二行"

# 不换行地显示字符串
echo -n "这条消息不会换行"

# 显示环境变量的值
echo $PATH

# 将字符串写入文件
echo "写入这行文字到文件" > 文件.txt

# 将新内容追加到文件
echo "追加这行文字到文件" >> 文件.txt

# 显示彩色文本
echo -e "\033[31m 红色文本 \033[0m"
echo -e "\033[32m 绿色文本 \033[0m"

# 打印显示结果到标准错误输出
echo "这是一条错误消息" >&2

# 使用变量和命令替换构建复杂的字符串
echo "当前用户为 $USER,当前目录为 $(pwd)"

🏃 tail 用于输出文件的末尾部分

# 输出文件的最后 10 行
tail [文件名]

# 实时追踪文件新添加的内容
tail -f [文件名]

# 输出文件的最后 N 行
tail -n [行数] [文件名]

# 实时追踪多个文件的新添加内容
tail -f [文件名1] [文件名2]

# 从文件的第 N 行到文件末尾输出内容
tail -n +[行数] [文件名]

# 实时追踪并高亮显示变化
tail -F --color [文件名]

# 实时监视日志文件,并使用 grep 搜索特定模式
tail -f [文件名] | grep "搜索模式"

# 显示文件的最后 N 个字节的内容
tail -c [字节数] [文件名]

🏃 nohup 退出命令框不暂停任务

# 基本用法,将命令的输出重定向到指定的文件中
nohup command > output.log &

# 如果你不想在 output.log 文件中留下任何信息,可以这样做
nohup command > /dev/null 2>&1 &

# 在这里:
# `>` 是重定向标准输出(STDOUT)到文件
# `/dev/null` 是一个特殊的设备,用于丢弃所有写入它的数据
# `2>&1` 是将标准错误(STDERR)也重定向到标准输出(STDOUT),在这个例子中,也就是 `/dev/null`
# `&` 是将命令放到后台执行

# 如果你想同时保留 STDOUT 和 STDERR 的输出,可以这样写:
nohup command > output.log 2>&1 &

# 如果想在当前目录下自动创建 nohup.out 文件,并把输出重定向到这个文件,只需:
nohup command &

# 当命令需要输入参数时,可以这样使用:
nohup command arg1 arg2 > output.log &

# 如果命令是一个脚本,并且你希望从一个特定的目录运行它,可以先 cd 到那个目录,然后执行 nohup:
(cd /path/to/directory && nohup ./script.sh > script.log &)

# 使用 nohup 运行一个需要用户输入的命令时,可以将输入通过 echo 命令传递给 nohup:
echo "input" | nohup command > output.log &

# 如果你想知道 nohup 命令的进程ID,可以这样获取:
nohup command > output.log &
echo $!

# 在这里 `$!` 将返回你刚刚执行的后台命令的进程ID

⏹️ man 显示命令手册页

# 查看某个命令的手册页
man 命令名

# 查看某个系统调用的手册页,如 read 系统调用
man 2 read

# 查看某个库函数的手册页,如 printf 库函数
man 3 printf

# 查看配置文件的手册页,如 fstab
man 5 fstab

# 查看某个游戏的手册页
man 6 游戏名

# 查看某个命令的所有手册页
man -a 命令名

# 在手册页中搜索特定的关键字
man -k 关键字

# 查看手册页的特定部分
man 命令名 | grep -A3 -B2 "搜索的字符串"

# 以递归方式显示命令的手册页
man -M 路径 命令名

# 更新手册数据库
man -k ''

# 查看手册页的简洁版本
whatis 命令名

🔍 搜索与处理


🔎 grep 文本搜索

# 在文件中搜索特定的字符串
grep "查找的字符串" 文件.txt

# 使用正则表达式搜索
grep "正则表达式" 文件.txt

# 忽略大小写地搜索字符串
grep -i "查找的字符串" 文件.txt

# 只打印出包含匹配字符串的文件名
grep -l "查找的字符串" *

# 统计文件中包含匹配字符串的行数
grep -c "查找的字符串" 文件.txt

# 显示匹配行及其前后各两行
grep -C 2 "查找的字符串" 文件.txt

# 显示匹配行的前两行
grep -B 2 "查找的字符串" 文件.txt

# 显示匹配行的后两行
grep -A 2 "查找的字符串" 文件.txt

# 只显示匹配部分
grep -o "查找的字符串" 文件.txt

# 使用 -v 选项反转匹配,选择不包含指定字符串的行
grep -v "查找的字符串" 文件.txt

# 在多个文件中搜索
grep "查找的字符串" 文件1.txt 文件2.txt

# 使用 -r (或 -R) 递归地搜索目录中的所有文件
grep -r "查找的字符串" /路径/到/目录

# 搜索所有文件,但排除某些文件
grep --exclude=*.log -r "查找的字符串" .

# 搜索所有文件,但排除某些目录
grep --exclude-dir={目录1,目录2} -r "查找的字符串" .

# 使用 -n 选项显示匹配行的行号
grep -n "查找的字符串" 文件.txt

# 使用 -E 选项进行扩展正则表达式匹配
grep -E "正则表达式" 文件.txt

# 使用 -F 选项进行固定字符串搜索,而不是正则表达式
grep -F "固定字符串" 文件.txt

# 使用 -w 选项搜索整个单词
grep -w "完整单词" 文件.txt

# 使用 -x 选项匹配整行
grep -x "完整的行内容" 文件.txt

🔍 find 搜索文件

# 在当前目录及子目录下查找所有文件和目录
find .

# 在指定路径下查找名为 "filename.txt" 的文件
find /path/to/search -name "filename.txt"

# 忽略大小写进行查找
find /path/to/search -iname "filename.txt"

# 查找所有 .txt 文件
find /path/to/search -name "*.txt"

# 查找特定类型的文件,例如普通文件(f)、目录(d)
find /path/to/search -type f
find /path/to/search -type d

# 使用逻辑运算符
# 查找 .txt 或 .png 文件
find /path/to/search \( -name "*.txt" -o -name "*.png" \)

# 查找比指定文件更新的文件
find /path/to/search -newer reference.txt

# 查找最近7天内被访问过的文件
find /path/to/search -atime -7

# 查找最近7天内被修改过的文件
find /path/to/search -mtime -7

# 查找空文件或目录
find /path/to/search -empty

# 查找并删除匹配的文件
find /path/to/search -name "*.tmp" -delete

# 查找特定大小的文件
find /path/to/search -size +2M
find /path/to/search -size -2M

# 查找并执行命令
# 查找 .txt 文件并对每个文件执行 cat 命令
find /path/to/search -name "*.txt" -exec cat {} \;

# 查找并修改权限
find /path/to/search -type f -exec chmod 644 {} \;

# 查找文件并排除特定目录
find /path/to/search -path "/path/to/search/skip" -prune -o -name "*.txt" -print

# 使用 -maxdepth 和 -mindepth 限制查找深度
find /path/to/search -maxdepth 2 -name "*.txt"
find /path/to/search -mindepth 2 -name "*.txt"

🔐 文件权限与所有权


🔑 chmod 改变文件权限

# 更改文件权限,为所有用户赋予读写执行权限
chmod 777 文件名

# 更改文件权限,为所有者赋予读写执行权限,为组赋予读执行权限,为其他用户赋予执行权限
chmod 751 文件名

# 使用符号模式更改文件权限,为所有者添加写权限
chmod u+w 文件名

# 为组和其他用户移除执行权限
chmod go-x 文件名

# 为所有者、组和其他用户设置确切的权限,不考虑当前权限
chmod u=rwx,g=rx,o=x 文件名

# 递归地更改目录及其所有内容的权限
chmod -R 755 目录名

# 更改文件权限,使用八进制表示法设置 SUID, SGID 和 Sticky 位
chmod 1755 文件名
chmod 2755 文件名
chmod 4755 文件名

# 只为目录设置权限
find 目录名 -type d -exec chmod 755 {} \;

# 只为文件设置权限
find 目录名 -type f -exec chmod 644 {} \;

👤 chown 改变文件所有者和组

# 更改文件所有者
chown 新所有者 用户名 文件名

# 更改文件所属组
chown :新组名 文件名

# 同时更改文件的所有者和所属组
chown 新所有者:新组名 文件名

# 更改目录及其子目录和文件的所有者
chown -R 新所有者 目录名

# 使用引用文件的所有者和组来更改另一个文件的所有者和组
chown --reference=参考文件 文件名

# 更改所有者时,如果新所有者是一个用户的名字,不是数字ID
chown --from=当前所有者 新所有者 文件名

# 更改所属组时,如果新组是一个组的名字,不是数字ID
chown --from=:当前组 新组 文件名

# 只更改文件所属组,所有者保持不变
chown :新组名 文件名

# 更改一个用户所有文件的所有者
find / -user 旧所有者 -exec chown 新所有者 {} \;

# 更改一个组所有文件的所属组
find / -group 旧组名 -exec chown :新组名 {} \;

📊 进程管理


📝 ps 显示进程状态

# 显示当前终端的进程
ps

# 显示所有运行的进程
ps -e
ps -A

# 显示与当前用户相关的所有进程
ps -u 用户名

# 显示扩展信息
ps -f
ps -ef
ps -aux

# 显示进程树
ps -ejH
ps axjf

# 显示线程
ps -eLf
ps axms

# 根据进程ID显示进程
ps -p 进程ID

# 使用用户定义的格式显示进程
ps -eo pid,tt,user,fname,pmem

# 结合 grep 显示特定进程
ps aux | grep '进程名'

# 显示无控制终端的进程
ps -x

# 使用特定的输出格式
ps -o pid,user,%cpu,%mem,command

# 实时更新进程列表
watch ps -e

kill 终止进程

# 终止指定PID的进程
kill 进程ID

# 强制终止进程
kill -9 进程ID

# 使用进程名称终止进程
killall 进程名称

# 终止属于特定用户的所有进程
pkill -u 用户名

# 发送指定信号到进程
kill -信号 进程ID

# 列出所有可用信号
kill -l

# 使用SIGTERM终止进程,允许进程正常清理和关闭
kill -SIGTERM 进程ID

# 使用SIGHUP重新读取配置文件
kill -SIGHUP 进程ID

# 终止当前用户的所有进程
kill -u $(id -u)

# 结合ps和grep来终止特定的进程
ps aux | grep '进程名称' | awk '{print $2}' | xargs kill

💽 磁盘与文件系统


📊 df 显示磁盘使用情况

# 显示挂载的文件系统的磁盘使用情况
df

# 显示所有文件系统,包括虚拟的,以1K块为单位
df -a

# 以易读的格式显示大小(例如,自动选择 KB、MB、GB)
df -h

# 显示 inode 信息
df -i

# 显示所有文件系统的类型
df -T

# 使用指定块大小显示磁盘使用情况
df -B M

# 显示指定文件所在的文件系统的磁盘使用情况
df 文件路径

# 排除特定类型的文件系统
df -x tmpfs
df -x devtmpfs

# 列出特定类型的文件系统
df --type=ext4

# 显示文件系统的总容量、已用空间、可用空间、已用百分比和挂载点
df -h | awk '{print $2, $3, $4, $5, $6}'

🗄️ du 估算文件和目录空间使用情况

# 估算当前目录的磁盘使用量
du

# 显示目录和子目录的磁盘使用量
du /path/to/directory

# 显示指定文件的磁盘使用量
du /path/to/file

# 以易读的格式(KB、MB、GB)显示磁盘使用量
du -h

# 显示每个子目录的磁盘使用量
du -h --max-depth=1

# 仅显示总计
du -sh

# 估算多个文件和目录的磁盘使用量
du -ch file1 directory1

# 排除特定文件模式的磁盘使用量
du --exclude="*.log" -h /path/to/directory

# 列出指定大小以上的文件或目录
du -h /path/to/directory | grep '[0-9]G\t'

# 显示文件数量和总大小
du --inodes -h /path/to/directory

# 估算所有.png文件的磁盘使用量
du -ch *.png

# 按大小排序并显示磁盘使用量最大的文件和目录
du -h /path/to/directory | sort -hr

🗄️ free 显示系统中空闲

# 基础用法,显示内存使用情况
free

# 使用人类可读的格式显示信息,例如自动选择合适的单位(KB,MB,GB)
free -h

# 每隔指定秒数更新显示信息,这里的 [seconds] 是更新的间隔时间
free -s [seconds]

# 显示总的列,包括物理内存,交换空间等
free -t

# 以兆字节为单位显示内存信息
free -m

# 以千字节为单位显示内存信息
free -k

# 以吉字节为单位显示内存信息
free -g

# 使用详细模式显示内存信息,包括缓冲和缓存的内存
free -v

# 显示内存的宽输出模式,使得阅读更加容易
free -w

# 显示关于 free 命令的版本信息
free -V

# 结合 watch 命令定时刷新内存使用信息,这里的 1 表示每秒刷新一次
watch -n 1 free -h

📦 文件打包与传输


📦 tar 打包或解包文件

# 创建新的 tar 归档文件
tar -cvf archive_name.tar directory_to_compress

# 创建一个 tar.gz 归档文件,使用 gzip 压缩
tar -czvf archive_name.tar.gz directory_to_compress

# 创建一个 tar.bz2 归档文件,使用 bzip2 压缩
tar -cjvf archive_name.tar.bz2 directory_to_compress

# 列出 tar 归档文件的内容,不解压
tar -tvf archive_name.tar

# 从 tar 归档文件中提取(解压)所有文件
tar -xvf archive_name.tar

# 从 tar.gz 归档文件中提取文件
tar -xzvf archive_name.tar.gz

# 从 tar.bz2 归档文件中提取文件
tar -xjvf archive_name.tar.bz2

# 从归档中提取特定文件
tar -xvf archive_name.tar specific_file_or_directory

# 从归档中排除特定文件
tar -cvf archive_name.tar --exclude='specific_file_or_directory' directory_to_compress

# 添加文件到已存在的 tar 归档
tar -rvf archive_name.tar new_file_or_directory

# 创建归档文件,并分割成多个卷
tar -cvf archive_name.tar -L 10240 directory_to_compress

# 解压分卷的 tar 归档
cat archive_name.tar.part* | tar -xvf -

# 通过 ssh 在远程主机上创建 tar 归档
ssh user@host "tar -cvf - remote_directory" | tar -xvf -

# 创建归档并写入到标准输出
tar -cvf - directory_to_compress > archive_name.tar

# 从标准输入读取归档内容
cat archive_name.tar | tar -xvf -

📥 wget 从网络下载文件

# 下载文件
wget [URL]

# 下载文件并保存为指定的文件名
wget -O [文件名] [URL]

# 下载完整的网站
wget --mirror -p --convert-links -P ./本地目录 [网站URL]

# 限制下载速度
wget --limit-rate=200k [URL]

# 尝试下载文件但不保存
wget --spider [URL]

# 下载文件并尝试断点续传
wget -c [URL]

# 下载列表中的文件
wget -i [文件列表.txt]

# 保存下载日志到文件
wget -o [日志文件.txt] [URL]

# 使用代理服务器下载
wget -e use_proxy=yes -e http_proxy=[代理地址] [URL]

# 下载HTTP认证所需的文件
wget --http-user=用户 --http-password=密码 [URL]

# 下载FTP认证所需的文件
wget --ftp-user=用户 --ftp-password=密码 [URL]

# 递归下载FTP目录中的所有文件
wget --ftp-user=用户 --ftp-password=密码 -r ftp://[FTP站点]/[目录]

# 下载并接受自签名的SSL证书
wget --no-check-certificate [URL]

📤 curl 传输数据

# 基本的URL请求
curl [URL]

# 将输出保存到文件
curl -o [文件名] [URL]

# 包含请求头信息的完整数据下载
curl -i [URL]

# 发送POST请求
curl -X POST -d '数据' [URL]

# 发送带有文件上传的POST请求
curl -X POST -F 'file=@本地文件路径' [URL]

# 使用用户认证下载文件
curl -u 用户名:密码 [URL]

# 从FTP服务器下载文件
curl -u ftp用户:ftp密码 -O ftp://[FTP地址]/[文件路径]

# 继续中断的下载
curl -C - -o [文件名] [URL]

# 使用HTTP代理进行请求
curl -x [代理地址:端口] [URL]

# 指定请求的User-Agent
curl -A 'User-Agent名称' [URL]

# 从指定的HTTP头下载
curl -H 'X-My-Header: 123' [URL]

# 使用cookie进行请求
curl -b 'cookie名=值' [URL]

# 将cookie保存到文件
curl -c [cookie文件] [URL]

# 发送JSON数据
curl -H "Content-Type: application/json" -X POST -d '{"key1":"value1", "key2":"value2"}' [URL]

# 请求HTTPS,但不验证证书
curl -k [URL]

# 显示请求详情,用于调试
curl -v [URL]

📡 telnet 连接到远程主机

# 通过默认端口(23)使用 Telnet 连接到远程主机
telnet [主机名]

# 通过特定端口使用 Telnet 连接到远程主机
telnet [主机名] [端口]

# 启用调试模式以显示更多信息
telnet -d [主机名]

# 设置转义字符(默认是 '^]')
telnet -e [转义字符] [主机名]

# 记录 Telnet 会话中的所有数据到文件
telnet -l [日志文件] [主机名]

# 在建立连接时指定源接口
telnet -b [绑定地址] [主机名]

🌐 网络管理


🔧 ifconfig 显示或配置网络接口

# 显示所有活动接口的网络配置
ifconfig

# 显示指定接口的网络配置
ifconfig [接口名]

# 启用或禁用指定的网络接口
ifconfig [接口名] up
ifconfig [接口名] down

# 配置接口的 IP 地址和子网掩码
ifconfig [接口名] [IP地址] netmask [子网掩码]

# 修改接口的 MAC 地址(硬件地址)
ifconfig [接口名] hw ether [新的MAC地址]

# 添加一个新的 IP 地址到接口
ifconfig [接口名] add [新的IP地址]

# 删除接口上的指定 IP 地址
ifconfig [接口名] del [IP地址]

# 设置接口的广播地址
ifconfig [接口名] broadcast [广播地址]

# 查看接口的多播信息
ifconfig [接口名] multicast

🌐 netstat 显示网络状态

# 显示所有端口的网络统计信息
netstat -a

# 显示所有监听端口
netstat -l

# 显示每个协议的统计信息
netstat -s

# 显示 TCP 连接
netstat -t

# 显示 UDP 连接
netstat -u

# 显示监听端口
netstat -lt

# 显示正在使用中的端口和进程
netstat -tulnp

# 显示TCP连接,包含外部状态
netstat -tn

# 显示网络接口列表
netstat -i

# 显示多播组成员资格
netstat -g

# 显示核心路由信息
netstat -r

# 持续输出网络信息
netstat -c

🔗 ssh 远程登录

# 使用当前用户的用户名远程登录到服务器
ssh [服务器地址]

# 使用指定的用户名远程登录到服务器
ssh [用户名]@[服务器地址]

# 指定要使用的端口连接到远程服务器
ssh -p [端口号] [用户名]@[服务器地址]

# 使用指定的私钥文件进行身份验证
ssh -i [私钥文件路径] [用户名]@[服务器地址]

# 在远程服务器上执行命令而不进入交互式会话
ssh [用户名]@[服务器地址] [命令]

# 启用详细模式以帮助调试连接问题
ssh -v [用户名]@[服务器地址]

# 跳过主机密钥检查(不推荐,不安全)
ssh -o StrictHostKeyChecking=no [用户名]@[服务器地址]

# 设置 SSH 保活选项,防止连接超时
ssh -o ServerAliveInterval=60 [用户名]@[服务器地址]

# 使用 SSH 隧道设置本地端口转发
ssh -L [本地端口]:[目标地址]:[目标端口] [用户名]@[服务器地址]

# 使用 SSH 隧道设置动态端口转发(SOCKS 代理)
ssh -D [本地端口] [用户名]@[服务器地址]

# 使用 SSH 隧道设置远程端口转发
ssh -R [远程端口]:[本地地址]:[本地端口] [用户名]@[服务器地址]

📤 scp 安全复制文件

# 从本地复制文件到远程服务器
scp [本地文件路径] [用户名]@[服务器地址]:[远程路径]

# 从远程服务器复制文件到本地
scp [用户名]@[服务器地址]:[远程文件路径] [本地路径]

# 递归复制整个目录到远程服务器
scp -r [本地目录路径] [用户名]@[服务器地址]:[远程路径]

# 使用指定端口复制文件
scp -P [端口号] [本地文件路径] [用户名]@[服务器地址]:[远程路径]

# 使用私钥文件进行身份验证复制文件
scp -i [私钥文件路径] [本地文件路径] [用户名]@[服务器地址]:[远程路径]

# 复制时保留原始文件的修改时间和访问权限
scp -p [本地文件路径] [用户名]@[服务器地址]:[远程路径]

# 启用详细模式以帮助调试
scp -v [本地文件路径] [用户名]@[服务器地址]:[远程路径]

# 限制传输速度(以 Kbit/s 为单位)
scp -l [速度限制] [本地文件路径] [用户名]@[服务器地址]:[远程路径]

📈 系统监控


📊 top 显示系统概要信息

# 启动 top 并显示系统进程信息
top

# 按 CPU 使用率排序
top -o cpu

# 按内存使用率排序
top -o mem

# 显示指定用户的进程
top -u [用户名]

# 显示所有 CPU 的信息
top -1

# 以批处理模式运行,用于记录
top -b

# 设置刷新间隔时间(以秒为单位)
top -d [秒数]

# 显示或隐藏各种信息的开关
top -[开关]

# 退出时保存当前设置为 top 的默认设置
top -w

✍️ 编辑器


🖋️ nano/vim 文本编辑器

# 打开文件进行编辑
nano [文件名]

# 打开文件并将光标移动到指定行号
nano +[行号],[列号] [文件名]

# 打开 nano 并启用语法高亮
nano -Y [语言] [文件名]

# 打开文件并限制为只读模式
nano -v [文件名]

# 在 nano 中启用自动缩进
nano -i [文件名]

# 显示帮助文档
nano -h

# 打开文件进行编辑
vim [文件名]

# 打开文件并将光标移动到指定行号
vim +[行号] [文件名]

# 打开文件并进入只读模式
vim -R [文件名]

# 打开文件并直接进入插入模式
vim -c 'startinsert' [文件名]

# 显示 vim 的版本信息和额外的帮助信息
vim --version

# 打开 vim 并执行指定的 Ex 命令
vim -c [命令] [文件名]

# 进入 vim 的 Ex 模式(类似于传统的行编辑器)
vim -e [文件名]

🔍 在 vim 命令中查找并定位某个字符串


在 Vim 编辑器中,你可以使用 / 命令来搜索字符串。以下是在 Vim 中查找字符串的步骤:

  1. 打开 Vim 并加载你的文件,或者如果你已经打开了文件,确保你处于普通模式(不是插入模式或命令行模式)。你可以通过按 Esc 键来进入普通模式。

  2. 输入 /,然后紧接着输入你想要搜索的字符串,例如:

    /your_string
    

    your_string 替换为你想要搜索的实际字符串。

  3. 按下 Enter 键,Vim 将会跳转到第一个匹配的字符串。

  4. 如果你想要查找下一个匹配的字符串,可以按 n 键。按 N 键(大写)可以查找前一个匹配。

  5. 如果你想要进行反向搜索,可以使用 ? 代替 / 来开始搜索:

    ?your_string
    
  6. 要取消高亮显示搜索结果,可以输入命令 :noh:nohlsearch

以下是在 Vim 中查找字符串的具体例子,包括注释:

/查找的字符串           " 查找 '查找的字符串' 出现的下一个地方
n                       " 查找下一个匹配
N                       " 查找前一个匹配
:set nohlsearch         " 关闭搜索结果的高亮显示
:set hlsearch           " 开启搜索结果的高亮显示
:set incsearch          " 输入搜索内容时就显示搜索结果的第一个匹配
:set ignorecase         " 开启搜索时忽略大小写
:set smartcase          " 开启智能大小写(如果搜索包含大写字母,则区分大小写)

在搜索时,Vim 默认区分大小写。如果你想进行不区分大小写的搜索,可以在搜索前执行 :set ignorecase。如果你想搜索时智能区分大小写(即,当你输入的搜索词包含大写字母时区分大小写,否则不区分),可以执行 :set smartcase。这两个设置通常结合使用。


🛠️ 系统管理


🧙 sudo 以超级用户身份执行命令

# 以超级用户权限执行命令
sudo [命令]

# 以指定用户的身份执行命令
sudo -u [用户名] [命令]

# 更新 sudo 的凭证,避免在一段时间内再次输入密码
sudo -v

# 显示 sudo 版本和策略
sudo -V

# 编辑 sudoers 文件,这是配置 sudo 权限的文件
sudo visudo

# 切换到 root 用户
sudo -i

# 执行上一条 sudo 命令
sudo !!

# 列出当前用户可执行的所有 sudo 命令
sudo -l

📦 包管理


📦 apt-get/yum 包管理器(根据发行版不同而不同)

# 更新可用包列表
sudo apt-get update

# 安装新的软件包
sudo apt-get install [包名]

# 卸载软件包,但保留配置文件
sudo apt-get remove [包名]

# 卸载软件包并删除配置文件
sudo apt-get purge [包名]

# 升级所有已安装的软件包
sudo apt-get upgrade

# 自动移除所有不再需要的软件包
sudo apt-get autoremove

# 清除本地下载的软件包的存档
sudo apt-get clean

# 搜索软件包
apt-get search [搜索关键词]

# 显示软件包信息
apt-get show [包名]


# 更新所有软件包
sudo yum update

# 安装新的软件包
sudo yum install [包名]

# 删除软件包
sudo yum remove [包名]

# 清除缓存目录(/var/cache/yum)下的软件包
sudo yum clean all

# 列出所有可用的软件包
sudo yum list available

# 搜索软件包
sudo yum search [搜索关键词]

# 显示软件包信息
sudo yum info [包名]

# 列出所有已安装的软件包
sudo yum list installed

⚠️ 注意: 一些命令可能因Linux发行版而异,或需要特定版本的Linux。始终参考特定命令的手册页(使用 man 命令)以获取详细和最新的信息。


⏳ 矫正或同步时间


在 Linux 中,你可以使用多种方法来矫正或同步时间,以下是一些常见的命令:

  1. date 命令:手动设置系统日期和时间。

    sudo date MMDDhhmm[[CC]YY][.ss]
    

    其中,MM 是月份,DD 是日,hh 是小时,mm 是分钟,CC 是世纪,YY 是年份,ss 是秒。

  2. hwclock 命令:用于访问硬件时钟,即你的计算机的 BIOS 时钟。

    • 从硬件时钟设置系统时间:
      sudo hwclock --hctosys
      
    • 将系统时间写入硬件时钟:
      sudo hwclock --systohc
      
  3. ntpdate 命令:使用网络时间协议(NTP)服务器来同步系统时间。

    sudo ntpdate [server]
    

    你需要指定一个 NTP 服务器,例如 pool.ntp.org

  4. timedatectl 命令:这是一个更现代的工具,用于控制系统时间和日期,它与 systemd 集成。

    • 设置时间和日期:
      sudo timedatectl set-time 'YYYY-MM-DD HH:MM:SS'
      
    • 开启 NTP 时间同步:
      sudo timedatectl set-ntp true
      
    • 查看当前时间设置:
      timedatectl status
      
  5. chronyntpd 服务:这些是守护进程,可以配置为在系统启动时自动同步时间。

    • 使用 chrony
      sudo chronyd -q 'server pool.ntp.org iburst'
      
    • 启动 ntpd
      sudo service ntpd start
      

在大多数现代 Linux 系统上,推荐使用 timedatectl 或配置 chrony / ntpd 服务,因为它们可以提供更稳定和持续的时间同步。在使用这些命令之前,请确保你有适当的权限(通常是 root 权限)。


⬅️ 查看历史命令

在 Linux 中查看历史命令的最常见方式是使用 history 命令。这个命令会列出用户执行过的命令历史列表。下面是使用 history 命令的一些基本用法:

  1. 显示命令历史:

    history
    
  2. 显示指定数量的最近命令:

    history [number]
    

    其中 [number] 是你想要显示的命令数量。

  3. 搜索历史命令:
    你可以使用 grep 命令来搜索特定的历史命令:

    history | grep 'search-term'
    

    search-term 替换为你想要搜索的内容。

  4. 直接使用历史命令:

    • 使用 ! 跟上历史命令的编号可以直接执行该命令:
      !number
      
      其中 number 是你在历史列表中看到的命令编号。
    • 使用 !! 可以执行上一条命令:
      !!
      
  5. 删除历史中的特定命令:

    history -d offset
    

    其中 offset 是你想要删除的命令的编号。

  6. 清除所有的命令历史:

    history -c
    
  7. 保存命令历史到文件:

    history > /path/to/history_file.txt
    

    你可以将 /path/to/history_file.txt 替换为你想要保存历史记录的文件路径。

命令历史实际上保存在用户的家目录下的一个隐藏文件 .bash_history 中(对于使用 Bash shell 的用户)。你可以直接查看或编辑这个文件来获取或修改命令历史。


🎓 中文乱码问题


在 Linux 系统中处理中文乱码问题通常涉及字符编码的设置。大多数现代 Linux 系统使用 UTF-8 编码,因为它支持包括中文在内的多种语言字符。如果遇到中文乱码问题,可以尝试以下几种解决方法:

  1. 检查和设置终端编码
    确保你的终端使用的是 UTF-8 编码。你可以通过终端设置或终端配置文件来检查和设置这一点。

  2. 检查和设置系统 locale
    使用 locale 命令检查当前的 locale 设置。

    locale
    

    如果没有设置为中文 UTF-8 编码(比如 zh_CN.UTF-8),则需要设置正确的 locale。可以使用以下命令:

    sudo locale-gen zh_CN.UTF-8
    sudo update-locale LANG=zh_CN.UTF-8
    

    然后重启终端或重新登录以应用更改。

  3. 配置字体
    确保你的终端或显示环境使用的字体支持中文字符。

  4. 在文本编辑器中设置编码
    如果是在文本编辑器中出现乱码,确保编辑器的编码设置为 UTF-8。

  5. 命令行工具的语言设置
    有些命令行工具,如 lessman 等,可能需要设置环境变量来支持 UTF-8 编码。例如,对于 less,可以设置:

    export LESSCHARSET=utf-8
    
  6. 文件转换编码
    如果某个文件不是 UTF-8 编码,可以使用 iconv 工具将其转换为 UTF-8 编码:

    iconv -f original_charset -t utf-8 original_file -o new_file
    

    original_charset 替换为文件的原始编码,original_file 替换为原始文件名,new_file 为转换后的文件名。

  7. 检查数据库编码
    如果乱码问题出现在数据库中,确保数据库和表的编码设置为 utf8utf8mb4

实施上述解决方案后,大多数中文乱码问题应该可以得到解决。如果问题依旧存在,可能需要检查应用程序或服务的特定设置,或者可能是文件本身就是错误编码的。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yueerba126

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值