基本命令使用

基本命令使用
Mozi1. 文件与目录操作
查看目录内容
使用
ls
命令查看当前目录下的文件和子目录。
常用选项:-l
:以长格式显示文件信息(权限、大小、修改时间等)。-a
:显示所有文件,包括隐藏文件(以.
开头的文件)。
示例:
1
2ls -l
ls -la
创建文件
使用
touch
命令创建一个空文件。
示例:1
2touch newfile.txt
touch file1.txt file2.txt
删除文件或目录
使用
rm
删除文件,使用rm -r
删除目录。
常用选项:-r
:递归删除目录及其内容。-f
:强制删除,不提示确认。
示例:
1
2
3rm file.txt
rm -r directory/
rm -rf directory/
移动或重命名文件
使用
mv
命令移动文件或重命名文件。
示例:1
2
3mv oldname.txt newname.txt # 重命名文件
mv file.txt /path/to/destination/ # 移动文件
mv *.txt /path/to/destination/ # 移动所有 .txt 文件
创建目录
使用
mkdir
命令创建新目录。
常用选项:-p
:递归创建多级目录。
示例:
1
2mkdir new_directory
mkdir -p parent_directory/child_directory
复制文件或目录
使用
cp
命令复制文件,使用cp -r
复制目录。
常用选项:-r
:递归复制目录及其内容。-i
:在覆盖文件前提示确认。
示例:
1
2
3cp file.txt /path/to/destination/
cp -r directory/ /path/to/destination/
cp -i file.txt /path/to/destination/
查看当前路径
使用
pwd
命令显示当前工作目录的绝对路径。
示例:1
pwd
切换目录
使用
cd
命令切换到指定目录。
示例:1
2
3cd /path/to/directory/
cd .. # 返回上一级目录
cd ~ # 切换到用户主目录
查看文件内容
使用
cat
、more
、less
、head
或tail
命令查看文件内容。
常用命令和选项:cat
:一次性显示整个文件内容。
示例:1
2cat file.txt
cat file1.txt file2.txt > combined.txt # 合并多个文件内容到一个文件more
:分页显示文件内容,按空格键翻页,按q
退出。
示例:1
more file.txt
less
:分页显示文件内容,支持上下滚动,按q
退出。
示例:1
less file.txt
head
:显示文件的前几行内容,默认显示前 10 行。
常用选项:-n
:指定显示的行数。
示例:
1
2head file.txt
head -n 5 file.txt # 显示前 5 行tail
:显示文件的最后几行内容,默认显示最后 10 行。
常用选项:-n
:指定显示的行数。-f
:实时跟踪文件内容的变化(常用于查看日志文件)。--regex
:结合grep
使用正则表达式过滤内容(需要手动组合)。
示例:
1
2
3
4tail file.txt
tail -n 5 file.txt # 显示最后 5 行
tail -f logfile.txt # 实时跟踪日志文件
tail -f logfile.txt | grep -E "error|fail" # 实时过滤包含 "error" 或 "fail" 的行
2. 常用工具
文本编辑器
Vim:功能强大的文本编辑器,支持多种模式(命令模式、插入模式等)。
常用命令:i
:进入插入模式。Esc
:退出插入模式,返回命令模式。:w
:保存文件。:q
:退出 Vim。:wq
:保存并退出。:q!
:强制退出,不保存更改。
示例:1
vim file.txt
文件搜索工具
grep:在文件中搜索指定的字符串。
常用选项:-i
:忽略大小写。-r
:递归搜索目录中的文件。-n
:显示匹配行的行号。-E
:使用扩展正则表达式。-P
:使用 Perl 风格的正则表达式(某些系统可能不支持)。
示例:1
2
3
4
5grep "search_term" file.txt
grep -i "search_term" file.txt
grep -r "search_term" /path/to/directory/
grep -E "pattern[0-9]+" file.txt # 使用扩展正则表达式匹配
grep -P "\d{3}-\d{2}-\d{4}" file.txt # 使用 Perl 风格正则匹配
find:在目录中查找文件或目录。
常用选项:-name
:按名称查找(支持简单通配符)。-regex
:使用正则表达式匹配路径。
示例:1
2
3find /path/to/directory -name "*.txt"
find /path/to/directory -type f -size +1M
find /path/to/directory -regex ".*\.log" # 使用正则匹配 .log 文件
locate:快速查找文件(基于预构建的文件索引)。
示例:1
2locate filename
locate -r ".*\.conf" # 使用正则匹配 .conf 文件which:查找命令的可执行文件路径。
示例:1
2which ls
which python
3. 用户与权限管理
添加用户
使用
useradd
命令添加新用户。
示例:1
2sudo useradd username
sudo passwd username # 设置用户密码使用
adduser
命令(某些系统中)添加用户并交互式设置信息。
示例:1
sudo adduser username
删除用户
使用
userdel
命令删除用户。
常用选项:-r
:同时删除用户的主目录。
示例:
1
2sudo userdel username
sudo userdel -r username
修改权限
使用
chmod
命令修改文件或目录的权限。
权限表示:r
:读权限。w
:写权限。x
:执行权限。
示例:
1
2chmod 755 file.txt # 设置文件权限为 rwxr-xr-x
chmod -R 700 directory/ # 递归设置目录权限为 rwx------使用
chown
命令更改文件或目录的所有者。
示例:1
2sudo chown username file.txt # 更改文件所有者
sudo chown -R username:group directory/ # 递归更改目录所有者和组
查看权限
使用
ls -l
命令查看文件或目录的权限。
示例:1
ls -l file.txt
使用
stat
命令查看文件的详细信息,包括权限。
示例:1
stat file.txt
4. 网络操作
查看网络配置
使用
ifconfig
或ip addr
查看网络接口的配置信息。
示例:1
2ifconfig
ip addr使用
ping
测试与目标主机的连通性。
示例:1
2ping 8.8.8.8
ping www.example.com
测试网络连接
使用
curl
或wget
测试网络连接并获取网页内容。
示例:1
2curl http://www.example.com
wget http://www.example.com使用
netstat
或ss
查看网络连接状态。
示例:1
2netstat -tuln
ss -tuln使用
traceroute
跟踪数据包到目标主机的路由。
示例:1
traceroute www.example.com
使用
nslookup
或dig
查询域名解析信息。
示例:1
2
3nslookup www.example.com
dig www.example.com
dig -t A www.example.com | grep -E "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$" # 使用正则过滤 IPv4 地址
5. 软件包管理
安装与卸载软件
使用
apt
命令安装、卸载软件。
示例:1
2
3
4sudo apt update # 更新软件包索引
sudo apt install package_name # 安装软件包
sudo apt remove package_name # 卸载软件包
sudo apt purge package_name # 卸载软件包并删除配置文件
更新系统
使用
apt
命令更新系统。
示例:1
2
3sudo apt update # 更新软件包索引
sudo apt upgrade # 更新已安装的软件包
sudo apt dist-upgrade # 执行发行版升级
搜索软件包
使用
apt search
搜索软件包。
示例:1
apt search package_name
查看已安装的软件包
使用
dpkg
或apt list
查看已安装的软件包。
示例:1
2dpkg -l
apt list --installed
6. 系统与存储管理
查看系统信息
使用
uname
命令查看系统内核和操作系统信息。
常用选项:-a
:显示所有信息。-r
:显示内核版本。-n
:显示主机名。
示例:
1
2
3uname -a
uname -r
uname -n使用
hostnamectl
查看和设置主机名。
示例:1
2hostnamectl
hostnamectl set-hostname new-hostname使用
uptime
查看系统运行时间和负载信息。
示例:1
uptime
使用
free
查看内存使用情况。
常用选项:-h
:以人类可读的格式显示。
示例:
1
free -h
使用
df
查看磁盘使用情况。
常用选项:-h
:以人类可读的格式显示。
示例:
1
df -h
使用
top
或htop
查看系统资源使用情况和运行的进程。
示例:1
2top
htop
查看磁盘使用情况
使用
df
命令查看文件系统的磁盘使用情况。
常用选项:-h
:以人类可读的格式显示。-T
:显示文件系统类型。
示例:
1
2df -h
df -T
挂载与卸载设备
使用
mount
命令挂载设备到指定目录。
示例:1
sudo mount /dev/sdX1 /mnt
使用
umount
命令卸载设备。
示例:1
sudo umount /mnt
查看当前挂载的设备和挂载点。
示例:1
2mount
cat /proc/mounts使用
lsblk
查看块设备信息,包括挂载点。
示例:1
lsblk
使用
blkid
查看设备的 UUID 和文件系统类型。
示例:1
sudo blkid
更新
/etc/fstab
文件以实现设备的自动挂载。
示例:1
echo "UUID=xxxx-xxxx /mnt ext4 defaults 0 0" | sudo tee -a /etc/fstab
关机与重启
使用
shutdown
命令关机或重启系统。
常用选项:-h now
:立即关机。-r now
:立即重启。-h +分钟
:在指定分钟后关机。-c
:取消已安排的关机或重启。
示例:
1
2
3
4sudo shutdown -h now # 立即关机
sudo shutdown -r now # 立即重启
sudo shutdown -h +10 # 10 分钟后关机
sudo shutdown -c # 取消已安排的关机或重启使用
reboot
命令重启系统。
示例:1
sudo reboot
使用
halt
或poweroff
命令关机。
示例:1
2sudo halt
sudo poweroff
进程管理
使用
ps
查看当前运行的进程。
常用选项:-e
:显示所有进程。-f
:显示完整格式的信息。
示例:
1
ps -ef
使用
grep
配合ps
按名称或正则表达式过滤进程。
示例:1
2ps -ef | grep process_name # 按名称过滤进程
ps -ef | grep -E "process[0-9]+" # 使用正则表达式过滤进程使用
kill
终止进程。
示例:1
2kill PID # 使用进程 ID 终止进程
kill -9 PID # 强制终止进程使用
pkill
按名称或正则表达式终止进程。
常用选项:-f
:匹配完整命令行。- 支持正则表达式匹配进程名称。
示例:
1
2pkill process_name # 按名称终止进程
pkill -f "process[0-9]+" # 使用正则表达式终止进程使用
jobs
查看当前会话中的后台任务。
示例:1
jobs
使用
bg
将后台任务切换到后台运行。
示例:1
bg %1 # 将任务编号为 1 的任务切换到后台运行
使用
fg
将后台任务切换到前台运行。
示例:1
fg %1 # 将任务编号为 1 的任务切换到前台运行
使用
nice
和renice
调整进程优先级。
示例:1
2nice -n 10 command # 以指定优先级启动进程
renice -n 5 -p PID # 调整指定进程的优先级
7. 日志管理
查看系统日志
使用
journalctl
查看系统日志(适用于 systemd 系统)。
常用选项:-b
:查看当前启动的日志。-u
:查看指定服务的日志。-f
:实时跟踪日志输出。--since
和--until
:按时间范围过滤日志。
示例:
1
2
3
4journalctl -b
journalctl -u sshd.service
journalctl -f
journalctl --since "2023-01-01" --until "2023-01-02"查看传统日志文件(适用于非 systemd 系统或特定日志)。
示例:1
2
3cat /var/log/syslog
tail -f /var/log/syslog
less /var/log/messages
分析日志文件
使用
grep
搜索日志中的关键字。
示例:1
2grep "error" /var/log/syslog
grep -i "failed" /var/log/auth.log使用
awk
提取日志中的特定字段。
示例:1
awk '{print $1, $2, $3}' /var/log/syslog # 提取日期和时间
使用
sed
过滤或替换日志内容。
示例:1
sed -n '/error/p' /var/log/syslog # 仅显示包含 "error" 的行
使用
logrotate
管理日志文件的轮换和压缩。
示例:1
sudo logrotate /etc/logrotate.conf
使用
rsyslog
配置日志的收集和存储。
示例:1
2sudo vim /etc/rsyslog.conf
sudo systemctl restart rsyslog
8. 安全与防火墙
配置防火墙
使用 UFW(Uncomplicated Firewall)
常用命令:启用防火墙:
1
sudo ufw enable
禁用防火墙:
1
sudo ufw disable
查看防火墙状态:
1
sudo ufw status
允许特定端口(如 22 端口):
1
2sudo ufw allow 22
sudo ufw allow 80/tcp拒绝特定端口:
1
sudo ufw deny 23
删除规则:
1
sudo ufw delete allow 22
使用 Firewalld
常用命令:启动防火墙:
1
sudo systemctl start firewalld
停止防火墙:
1
sudo systemctl stop firewalld
查看防火墙状态:
1
sudo firewall-cmd --state
允许特定端口(如 22 端口):
1
2sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload删除规则:
1
2sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload
设置 SSH 安全
修改默认端口
编辑 SSH 配置文件/etc/ssh/sshd_config
:1
sudo vim /etc/ssh/sshd_config
找到
#Port 22
,取消注释并修改为其他端口号(如 2222):1
Port 2222
保存后重启 SSH 服务:
1
sudo systemctl restart sshd
禁用 Root 用户登录
编辑/etc/ssh/sshd_config
文件,找到#PermitRootLogin yes
,修改为:1
PermitRootLogin no
保存后重启 SSH 服务:
1
sudo systemctl restart sshd
使用密钥认证
生成 SSH 密钥对
在客户端机器上运行以下命令生成密钥对:1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa
:指定密钥类型为 RSA。-b 4096
:指定密钥长度为 4096 位。-C "your_email@example.com"
:为密钥添加注释(可选)。
系统会提示输入保存路径,默认路径为
~/.ssh/id_rsa
。按回车键即可使用默认路径:1
Enter file in which to save the key (/home/user/.ssh/id_rsa):
然后会提示设置密码短语(可选),如果不需要密码短语,直接按回车跳过:
1
Enter passphrase (empty for no passphrase):
密钥生成后,公钥保存在
~/.ssh/id_rsa.pub
,私钥保存在~/.ssh/id_rsa
。将公钥上传到服务器
使用以下命令将公钥上传到服务器的~/.ssh/authorized_keys
文件中:1
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
-i ~/.ssh/id_rsa.pub
:指定公钥文件路径。user@server_ip
:替换为目标服务器的用户名和 IP 地址。
如果
ssh-copy-id
不可用,可以手动将公钥内容追加到服务器的~/.ssh/authorized_keys
文件中:1
cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh"
配置 SSH 服务
编辑服务器上的 SSH 配置文件/etc/ssh/sshd_config
,确保以下配置项启用:1
2PubkeyAuthentication yes
PasswordAuthentication noPubkeyAuthentication yes
:启用公钥认证。PasswordAuthentication no
:禁用密码认证(确保密钥认证正常工作后再禁用)。
保存后重启 SSH 服务:
1
sudo systemctl restart sshd
测试密钥登录
在客户端使用以下命令测试密钥登录:1
ssh -i ~/.ssh/id_rsa user@server_ip
如果登录成功且未提示输入密码,则密钥认证配置成功。
备份私钥
私钥是登录的关键,务必妥善保管。可以将私钥备份到安全的存储介质(如 U 盘或密码管理工具),并确保权限设置为仅用户可读:1
chmod 600 ~/.ssh/id_rsa
限制登录尝试次数
使用fail2ban
工具:安装
fail2ban
:1
sudo apt install fail2ban
启动服务:
1
2sudo systemctl start fail2ban
sudo systemctl enable fail2ban配置
/etc/fail2ban/jail.local
文件,设置 SSH 规则:1
2
3
4
5[sshd]
enabled = true
port = 22
maxretry = 5
bantime = 600重启
fail2ban
服务:1
sudo systemctl restart fail2ban
9. Shell 脚本基础
9.1 什么是 Shell 脚本
Shell 脚本是一种用 Shell 命令编写的脚本程序,通常用于自动化任务。它以 .sh
为扩展名,使用 #!/bin/bash
指定解释器。
9.2 创建与执行脚本
创建脚本文件:
1
vim script.sh
添加以下内容:
1
2
echo "Hello, World!"保存并赋予执行权限:
1
chmod +x script.sh
执行脚本:
1
./script.sh
9.3 变量与参数
定义变量:
1
2name="Linux"
echo "Welcome to $name"读取用户输入:
1
2
3echo "Enter your name:"
read user_name
echo "Hello, $user_name!"脚本参数:
1
2
3
4
echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"执行:
1
./script.sh arg1 arg2
特殊变量:
$#
:参数个数。$@
:所有参数。$?
:上一个命令的退出状态。
9.4 条件语句
if 语句:
1
2
3
4
5if [ -f "file.txt" ]; then
echo "File exists"
else
echo "File does not exist"
fi多分支 if-elif-else:
1
2
3
4
5
6
7if [ $1 -eq 1 ]; then
echo "Option 1"
elif [ $1 -eq 2 ]; then
echo "Option 2"
else
echo "Other option"
ficase 语句:
1
2
3
4
5
6
7
8
9
10
11case $1 in
start)
echo "Starting..."
;;
stop)
echo "Stopping..."
;;
*)
echo "Invalid option"
;;
esac
9.5 循环
for 循环:
1
2
3for i in {1..5}; do
echo "Iteration $i"
donewhile 循环:
1
2
3
4
5count=1
while [ $count -le 5 ]; do
echo "Count: $count"
((count++))
doneuntil 循环:
1
2
3
4
5count=1
until [ $count -gt 5]; do
echo "Count: $count"
((count++))
done
9.6 函数
定义函数:
1
2
3
4greet() {
echo "Hello, $1!"
}
greet "World"返回值:
1
2
3
4
5add() {
return $(($1 + $2))
}
add 3 5
echo "Sum: $?"全局与局部变量:
1
2
3
4
5
6
7my_function() {
local local_var="I am local"
global_var="I am global"
}
my_function
echo $global_var # 输出 "I am global"
echo $local_var # 无输出
9.7 文件操作
检查文件是否存在:
1
2
3
4
5if [ -e "file.txt" ]; then
echo "File exists"
else
echo "File does not exist"
fi读取文件内容:
1
2
3while read line; do
echo $line
done < file.txt写入文件:
1
echo "Hello, File!" > file.txt
追加内容:
1
echo "New Line" >> file.txt
9.8 调试脚本
逐行调试:
1
bash -x script.sh
检查语法:
1
bash -n script.sh
脚本内启用调试:
1
2
3
4
5
set -x
echo "Debugging enabled"
set +x
echo "Debugging disabled"
9.9 定时任务
使用 cron:
1
crontab -e
添加任务:
1
* * * * * /path/to/script.sh
查看任务:
1
crontab -l
9.10 示例脚本
备份文件:
1
2
3
4
5
src="/path/to/source"
dest="/path/to/backup"
tar -czf "$dest/backup_$(date +%Y%m%d).tar.gz" $src
echo "Backup completed!"监控磁盘使用:
1
2
3
4
5
usage=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $usage -gt 80 ]; then
echo "Disk usage is above 80%!"
fi批量重命名文件:
1
2
3
4
5
for file in *.txt; do
mv "$file" "${file%.txt}.bak"
done
echo "Files renamed!"