本文旨在为在校大学生和初级开发者提供一份详尽的 Linux 常用命令指南,涵盖文件处理、网络请求、时间管理、进程控制、系统监控、数据库操作、Docker 使用及环境迁移等关键领域,帮助读者提升 Linux 系统管理与开发效率。
文件与文件夹处理
Linux 系统中,文件与文件夹的管理是日常工作的核心之一。掌握高效的文件操作命令,可以显著提升开发与运维效率。
文件拆分与合并
当需要处理大文件时,split 命令是一个实用工具。它可以按大小将文件拆分成多个小文件:
split -b 1G filename
split -b 900m filename
上述命令分别将文件拆分为每份 1GB 和 900MB 的大小。拆分后的文件通常以 xaa、xab 等命名。合并文件时,可以使用 cat 命令:
cat ./* > filename
这种方法适用于多个拆分文件的合并,尤其在处理日志文件时非常常见。
文件行数统计
统计文件中的行数是日常开发中常见的任务,wc 命令提供简洁高效的解决方案:
wc -l filename
此命令会输出文件的总行数,适用于快速查看日志文件或数据文件的大小。
压缩与解压
在 Linux 中,文件压缩和解压是节省存储空间和传输效率的重要手段。tar 命令用于打包和解压文件,支持多种压缩格式,其中 bz2 是一个常见且高效的选择:
tar -jcvf name.tar.bz2 filename # 打包压缩
tar -jxvf name.tar.bz2 # 解压
对于 zip 格式的压缩与解压,可以使用 zip 和 unzip 工具:
zip -r archive.zip file # zip 压缩
unzip archive.zip # zip 解压
文件传输
跨机器传输文件是远程开发和运维的重要环节,scp 命令提供了安全的文件传输方式:
scp -P 22022 user@10.19.92.14:~/download ./
scp -P 22022 local_path user@10.19.28.107:/data
这些命令允许通过指定端口进行文件的复制,适用于不同的网络环境。
批量查找文件内容
在处理大量文件时,find 和 grep 命令的结合非常强大。它可以帮助快速查找满足特定条件的文件内容:
find . -name "main.log.2023-02-02_*" | xargs grep "162108967569326080"
此命令会查找所有以 main.log.2023-02-02_ 开头的文件,并在其中搜索特定的字符串。
文件内容替换
文件内容替换是文本编辑中的基本操作,sed 和 vim 都提供了便捷的方式。sed 可以进行批量替换:
sed -i "s/pre/edit/g" file
而 vim 则支持更灵活的替换操作,如:
:s/foo/bar:替换当前行的第一个匹配项。:%s/foo/bar/g:全局替换所有匹配项。:10,20s/foo/bar/g:在指定行范围内进行替换。
排除文件类型复制
在进行文件复制时,排除某些文件类型可以提高效率并减少不必要的数据传输。rsync 命令提供了 --exclude 参数:
rsync -av --exclude='*.csv' --exclude='*.txt' /src/ /dst/
该命令会复制 /src/ 中的所有文件,但排除 .csv 和 .txt 文件。此外,使用 find 命令结合 while 循环可以实现更复杂的排除逻辑,尤其处理特殊字符文件名时更为安全。
find "$SOURCE_DIR" \( -name "*.csv" -o -name "*.txt" \) -prune -o -type f -print0 |
while IFS= read -r -d '' file; do
rel_path="${file#$SOURCE_DIR/}"
mkdir -p "$DEST_DIR/$(dirname "$rel_path")"
cp "$file" "$DEST_DIR/$rel_path"
done
print0 和 -d '' 参数确保在处理特殊字符时也能正确工作,prune 用于排除特定类型的文件。
VIM 操作速查
VIM 是 Linux 系统中广泛使用的文本编辑器,掌握其操作对于提高工作效率至关重要。
替换操作
在 VIM 中,替换是常见的编辑需求之一。使用 :%s/old/new/gc 可以进行全局替换,并在每次替换前询问用户确认:
:%s/old/new/gc
如果只想替换某一行,可以使用 :s/foo/bar。对于指定行范围的替换,可以使用 :10,20s/foo/bar/g。
复制与粘贴
复制和粘贴是基本的编辑操作,VIM 提供了多种方式实现这一功能:
yy:复制当前行。p或P:在当前行之后或之前粘贴。nyy:复制当前行及其下方的 n 行。
撤销操作
在编辑过程中,u 命令可以撤销上一次的操作:
u
此命令非常方便,特别是在误操作时能快速恢复。
可视模式
可视模式允许用户通过鼠标或键盘选择文本块进行编辑,提高批量操作的效率。进入可视模式的快捷键是 Ctrl + v。
分屏操作
分屏是 VIM 中处理多个文件或任务的常用方式,有左右分屏和水平分屏两种:
:vsplit:左右分屏。:sp file:水平打开文件。:vsp file:垂直打开文件。
窗口切换可以通过 Ctrl + w 加上方向键完成,如 Ctrl + w + h 切换到左侧窗口,Ctrl + w + l 切换到右侧窗口。调整窗口大小使用 :vertical resize +10 和 :vertical resize -10。
输入 / 输出增强工具
xargs 是处理输入输出的增强工具,尤其适用于与 find 等命令结合使用。
删除文件
使用 find 和 xargs 可以高效地删除多个文件:
find . -name "*.txt" | xargs rm
此命令会查找当前目录及其子目录中的所有 .txt 文件并删除。
自定义分隔符
xargs 支持自定义输入分隔符,这对于处理非空白分隔的数据非常有用:
echo "a,b,c" | xargs -d , echo
上述命令以逗号为分隔符,将字符串拆分成多个参数并输出。
并行处理
在处理大量文件时,xargs 可以并行执行命令,减少处理时间:
echo "a b c" | xargs -n 1 -P 3 gzip
该命令会以每批 1 个参数的方式并行运行 gzip,最多使用 3 个进程。
时间相关
时间管理在系统运维和开发中同样重要。掌握相关命令有助于系统调试和任务调度。
获取当前时间
使用 date 命令可以获取当前时间:
date +"%Y-%m-%d %H:%M:%S"
此命令输出格式为 YYYY-MM-DD HH:MM:SS。
日期计算
date 命令还支持计算特定时间点的日期,例如:
date --date="2 months ago" +"%Y-%m-%d"
date --date="2 days ago" +"%Y-%m-%d"
date --date="2 days" +"%Y-%m-%d"
这些命令可以帮助开发人员和系统管理员快速计算过去或未来的时间点,适用于日志分析和定时任务配置。
定时任务
定时任务是自动化管理的重要组成部分。crontab 是 Linux 中常用的定时任务工具:
crontab -e
crontab -l
通过编辑 crontab 文件,可以设置定时任务。例如,每天凌晨 2 点执行某个脚本:
0 2 * * * /path/to/script.sh
设置系统时区
系统时区的设置对于跨时区协作非常重要。使用 cp 和 ls 命令可以实现快速切换:
cp /etc/localtime /etc/localtime.bak
ls /usr/share/zoneinfo
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date
这些命令可以帮助用户快速配置系统时区,确保时间显示符合实际需求。
网络相关
在网络管理中,curl 是一个非常有用的工具,用于发送 HTTP 请求和处理数据。
curl 与 REST 请求
curl 用于发送 REST 请求,支持多种数据格式,如 JSON:
curl -d '{"batchId": "xxx"}' \
-H "Content-Type: application/json" \
-X POST http://host:port/api
此命令以 JSON 格式发送 POST 请求,适用于与 API 的交互。
配合管道发送
curl 可以与 echo 和管道结合,处理更复杂的请求:
echo '{"key":"value"}' | curl -X POST -H "Content-Type:application/json" --data @- http://host/api
这种方法可以避免手动输入数据,适用于自动化脚本。
防火墙检查
防火墙的配置和检查是保障系统安全的重要环节。iptables、firewalld 和 ufw 都是常用的防火墙工具。检查 iptables 的规则可以使用:
sudo iptables -L
iptables -L -n -v | grep 8080
这些命令可以列出所有规则并筛选特定端口的信息。对于 firewalld 和 ufw,检查其状态的命令分别为:
sudo systemctl status firewalld
sudo ufw status
防火墙端口设置
设置防火墙端口的命令如下:
sudo iptables -F
sudo iptables -X
sudo iptables -P INPUT ACCEPT
这些命令会清空现有规则、删除链,并设置输入规则为接受,以确保端口开放。
进程相关
进程管理是系统监控和调试的关键技能之一。掌握相关命令有助于快速定位和解决问题。
查询端口使用情况
要查看某个端口的使用情况,可以使用 lsof 或 ss 命令:
lsof -i:port
ss -nlp | grep port
这些命令会列出使用指定端口的进程,帮助用户识别可能的冲突或异常。
查询进程工作目录
查询进程的工作目录适用于调试和分析进程行为。进入 /proc/pid 目录并查看 cwd 文件:
cd /proc/pid
ls -l cwd
此命令显示进程的当前工作目录,有助于定位问题。
强制杀死进程及子进程
在某些情况下,需要强制终止进程及其子进程。可以使用 kill 命令结合 ps:
kill -9 $(ps -o pid= --ppid=29240)
kill -9 $(ps -o pid= --ppid=$1)
这些命令会杀死特定父进程的所有子进程,适用于异常进程处理。
排查磁盘满或 inode 满
磁盘满或 inode 满会导致系统无法正常运行,需及时排查。使用 df 命令检查磁盘使用情况:
df -ih
df -vh
这些命令分别显示 inode 和磁盘的使用情况,帮助识别问题。
系统资源查看
系统资源的监控对于优化性能和排查问题至关重要。掌握相关命令有助于更好地管理 Linux 系统。
CPU 信息
使用 lscpu 可以查看 CPU 的详细信息:
lscpu
此命令提供关于 CPU 架构、核心数等信息,适用于性能调优和系统配置。
内存信息
查看内存使用情况可以使用 free 命令:
free -m
该命令以 MB 为单位显示内存的使用情况,有助于识别内存瓶颈。
磁盘信息
lsblk 命令用于查看磁盘和分区信息:
lsblk
此命令提供磁盘大小、分区情况等信息,适用于磁盘管理和故障排查。
数据库 / Hive / beeline
数据库操作是数据处理和分析中的重要环节,beeline 是 Hive 的客户端工具,支持多种数据格式和操作。
Hive 导出 CSV
使用 beeline 导出 CSV 格式的数据,可以方便地进行数据分析:
beeline -u "jdbc:hive2://host:10000/db" -n hive
beeline ... --outputformat=csv2 -e "select * from tab"
这些命令允许用户从 Hive 表中导出数据,并以 CSV 格式保存,便于后续处理。
数据库连接
beeline 提供了连接 Hive 数据库的接口,使用 jdbc 协议:
beeline -u "jdbc:hive2://host:10000/db" -n hive
此命令建立与 Hive 数据库的连接,便于执行 SQL 查询。
Docker 常用命令
Docker 是现代软件开发和部署的重要工具,掌握其常用命令有助于快速构建和管理容器。
保存和加载镜像
使用 docker save 和 docker load 可以实现镜像的保存和加载:
docker save -o image.tar image_id
docker load < image.tar
这些命令允许用户将镜像保存为文件,再在其他环境中加载。
运行容器
运行容器时,可以指定端口映射、挂载卷和运行时参数:
docker run -itd -p 8005:8005 -v /local:/container \
--name EasyRec --runtime=nvidia image /bin/bash
此命令以交互式方式运行容器,并映射端口、挂载卷,适用于需要 GPU 支持的应用。
Anaconda 卸载与环境迁移
在进行环境迁移或系统清理时,Anaconda 的卸载和环境迁移是常见任务。
卸载 Anaconda
卸载 Anaconda 可以使用 conda 工具:
conda install anaconda-clean
anaconda-clean
rm -rf ~/Apps/anaconda3
这些命令会清理环境并删除 Anaconda 目录,适用于系统清理。
环境迁移
环境迁移可以通过 tar 命令实现:
mkdir unpacked_env
tar -xzf deploy.tar.gz -C unpacked_env
source unpacked_env/bin/activate
此命令解压环境文件并激活,适用于在不同系统间迁移环境。
多进程 shell 模板
处理多任务时,使用多进程脚本可以显著提高效率。一个常见的模板如下:
for product in "${products[@]}"; do
if [[ "$product" == "plan_id" || "$product" == *"|"* || "$product" == *"+"* ]]; then
continue
fi
echo "Query: ${product}"
kinit -kt keytab user
hdfs dfs -test -e hdfs://path/${product}
test $? -ne 0 && hdfs dfs -mkdir hdfs://path/${product}
for ((i=1;i<=3;i++)); do
beeline -u ...
hdfs dfs -getmerge hdfs://path/${product}/* ${product}.csv
test $? -eq 0 && break
sleep 5
done
done
此脚本遍历产品列表,跳过特定产品后,执行一系列操作,包括 HDFS 命令和 beeline 查询,适用于批量处理任务。
结论
掌握 Linux 常用命令是提升系统管理和开发效率的关键。从文件处理、文本编辑到网络请求、进程管理,每一条命令都有其独特用途和最佳实践。此外,Docker 和 Anaconda 等工具的使用,也能帮助开发人员和运维人员更高效地进行部署和环境迁移。通过不断学习和实践,读者可以更好地应对各种 Linux 环境下的挑战。
关键字列表:split, wc, tar, scp, find, sed, rsync, xargs, date, crontab, curl, iptables, lsof, df, free, lsblk, beeline, Docker, Anaconda, shell scripting, process management, system monitoring