Linux和Shell命令
Linux 基础与 Shell 编程笔记
环境变量
PATH环境变量:用于指定命令搜索路径,值为冒号分隔的目录列表。配置文件位置:
- 系统级:
/etc/bashrc(或/etc/bash.bashrc)、/etc/profile、/etc/profile.d/*.sh - 用户级:
~/.bashrc、~/.bash_profile(或~/.profile)
- 系统级:
临时生效(仅当前终端):
bash
1
export PATH="/usr/local/bin:$PATH"
永久生效:将
export语句写入上述配置文件后,执行source ~/.bashrc(或重新登录)。查看变量值:
bash
1
echo $PATH
示例:将自定义路径添加到 PATH(以 zsh 为例)
bash
1
2echo 'export PATH="/usr/local/scripts:$PATH"' >> ~/.zshrc
source ~/.zshrc
目录操作
| 命令 | 说明 |
|---|---|
ls |
列出目录内容(常用选项:-l 详细信息,-a 显示隐藏文件,-h 人类可读大小) |
ll |
许多系统别名 ls -l,显示详细信息 |
mkdir |
创建目录(-p 递归创建父目录) |
rm |
删除文件或目录(-r 递归删除,-f 强制删除,谨慎使用) |
cp |
复制文件或目录(cp source destination,-r 复制目录) |
mv |
移动/重命名文件或目录(mv source destination) |
pwd |
显示当前工作目录的绝对路径 |
cd |
切换目录(cd ~ 回到家目录,cd - 回到上一个目录) |
文件操作
| 命令 | 说明 |
|---|---|
cat |
查看文件内容(可与 grep 组合筛选:`cat server.log |
tail |
查看文件尾部(-n 20 显示最后20行,-f 实时跟踪新增内容) |
head |
查看文件头部(-n 10 显示前10行) |
vim / vi |
文本编辑器(按 i 进入编辑模式,Esc 退出编辑,:wq 保存退出,:q! 不保存退出) |
less / more |
分页查看大文件(/关键词 搜索,q 退出) |
touch |
创建空文件或更新文件时间戳 |
find |
按条件查找文件(例如 find /home -name "*.txt") |
压缩与打包
| 命令 | 说明 |
|---|---|
tar -zcvf archive.tar.gz file1 file2 |
创建 tar.gz 压缩包(z gzip,c 创建,v 显示过程,f 指定文件名) |
tar -zxvf archive.tar.gz |
解压 tar.gz 包(x 解压) |
tar -jcvf archive.tar.bz2 file |
创建 tar.bz2 压缩包(j bzip2) |
tar -jxvf archive.tar.bz2 |
解压 tar.bz2 包 |
zip -r archive.zip folder |
创建 zip 压缩包 |
unzip archive.zip |
解压 zip 包 |
gzip file / gunzip file.gz |
单独压缩/解压单个文件(不保留源文件) |
文件传输
scp(基于 SSH 的安全复制):
bash
1
2
3scp local_file user@remote:/remote/path # 上传
scp user@remote:/remote/file local_path # 下载
scp -r local_folder user@remote:/remote/path # 递归复制目录rsync(高效同步,支持断点续传):
bash
1
rsync -avz local_dir/ user@remote:/remote_dir/
ftp / sftp:
- 交互式命令:
put(上传),get(下载),delete(删除),ls,cd,bye(退出) - 推荐使用
sftp(SSH 文件传输协议,更安全)
- 交互式命令:
文件权限
权限表示(以
-rwxrwxr--为例):- 第一个字符:
-普通文件,d目录,l符号链接 - 后面三组(每组 rwx):所有者、所属组、其他用户
- 各权限数字:
r=4,w=2,x=1,无权限=0
- 第一个字符:
修改权限:
bash
1
2
3chmod 764 file.txt # 所有者 rwx(7),组 rw(6),其他 r(4)
chmod u+x script.sh # 为所有者添加执行权限
chmod -R 755 folder # 递归修改目录权限修改所有者:
bash
1
2chown user:group file
chown -R user:group folder
用户管理
| 命令 | 说明 |
|---|---|
useradd username |
创建用户(-m 创建家目录,-s /bin/bash 指定 shell) |
userdel username |
删除用户(-r 同时删除家目录和邮件池) |
usermod |
修改用户信息(-aG group user 将用户添加到附加组,-L 锁定用户,-U 解锁) |
passwd username |
设置或修改用户密码 |
su - username |
切换用户(- 表示同时切换环境变量) |
sudo command |
以管理员权限执行命令(需要用户已在 /etc/sudoers 中配置) |
groupadd groupname |
创建用户组 |
groupmod -n newname oldname |
修改组名 |
groupdel groupname |
删除用户组 |
id username |
查看用户的 UID、GID 和所属组 |
系统状态
| 命令 | 说明 |
|---|---|
top |
动态查看进程及资源占用(按 P 按 CPU 排序,M 按内存排序,q 退出) |
htop |
增强版 top(需要安装),界面更友好 |
ps aux |
静态查看所有进程(aux 显示详细格式) |
ps -ef |
另一种进程查看格式 |
kill -9 PID |
强制终止进程(-9 SIGKILL,-15 SIGTERM 友好终止) |
pkill process_name |
按名称终止进程 |
free -h |
查看内存使用情况(-h 人类可读) |
df -h |
查看磁盘分区使用情况 |
du -sh folder |
查看目录总大小(-s 汇总,-h 可读) |
uptime |
查看系统运行时间、负载 |
uname -a |
查看系统内核版本和架构 |
网络
| 命令 | 说明 |
|---|---|
ip addr / ifconfig |
查看网络接口信息(IP、MAC、状态) |
ip link set eth0 up/down |
启用/禁用网卡 |
netstat -tuln |
查看监听端口(-t TCP,-u UDP,-l 监听,-n 不解析名称) |
ss -tuln |
现代替代 netstat,速度更快 |
ping -c 4 google.com |
测试网络连通性(-c 指定次数) |
telnet host port |
测试端口是否开放(例如 telnet 192.168.1.1 80) |
curl -O http://example.com/file |
下载文件,支持多种协议(HTTP/HTTPS/FTP) |
curl -I http://example.com |
只获取 HTTP 头部 |
wget -c http://example.com/file |
下载工具(-c 断点续传) |
traceroute google.com |
跟踪路由路径(mtr 是增强版) |
host domain.com / nslookup domain.com |
DNS 查询 |
iptables -L |
查看防火墙规则(-n 不解析,-v 详细) |
ufw status |
Ubuntu 简易防火墙状态(enable/disable 启用/禁用) |
Shell 编程
Shell 脚本是 Linux 下实现任务自动化的主要方式,最常用的 Shell 为 Bash。
1. 脚本开头
bash
1 | #!/bin/bash # 指定解释器路径 |
2. 变量
bash
1 | name="John" # 等号两边不能有空格 |
3. 特殊变量
| 变量 | 含义 |
|---|---|
$0 |
脚本名称 |
$1 ~ $9 |
第 1~9 个参数 |
$# |
参数个数 |
$@ |
所有参数(每个视为独立字符串) |
$* |
所有参数(视为一个整体字符串) |
$? |
上一条命令的退出状态(0 表示成功) |
$$ |
当前脚本的进程 ID |
4. 数组
bash
1 | arr=(a b c) |
5. 条件判断
bash
1 | # 文件测试 |
常用文件测试操作符:
| 选项 | 含义 |
|---|---|
-e |
文件存在 |
-f |
是普通文件 |
-d |
是目录 |
-r / -w / -x |
可读/可写/可执行 |
6. 循环
bash
1 | # for 循环(列表) |
7. 函数
bash
1 | function say_hello() { |
8. 输入输出重定向
| 符号 | 说明 |
|---|---|
> |
覆盖输出到文件 |
>> |
追加输出到文件 |
2> |
重定向错误输出 |
&> |
同时重定向标准输出和错误 |
< |
从文件读取输入 |
| ` | ` |
9. 常用示例
逐行读取文件:
bash
1 | while IFS= read -r line; do |
检查命令是否存在:
bash
1 | if command -v curl &> /dev/null; then |
脚本中获取脚本所在目录:
bash
1 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
10. 调试技巧
bash -x script.sh执行脚本并显示每一条执行的命令- 脚本内部使用
set -x开启调试,set +x关闭调试
提示:以上命令和用法在绝大多数 Linux 发行版(CentOS、Ubuntu、Debian 等)及 macOS 上通用。实际使用时建议通过
man command查看详细文档。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 夏天的风吹向哪里!
