运维常用命令
一、 Linux 系统
1. 系统监控与性能排查
命令 | 说明 | 常用示例/参数 |
---|---|---|
top / htop |
动态实时查看系统进程、CPU、内存等使用情况。htop 是增强版,更直观。 |
top ,htop (需安装) |
uptime |
查看系统运行时间、负载平均值(1分钟、5分钟、15分钟)。 | uptime |
free |
查看系统内存和Swap使用情况。 | free -h (以人性化单位显示) |
df |
查看磁盘空间使用情况。 | df -h |
du |
查看文件或目录的磁盘使用空间。 | du -sh /path/to/dir (查看目录总大小) |
iostat |
查看CPU统计和磁盘I/O信息。 | iostat -x 1 (每1秒显示一次扩展信息) |
vmstat |
报告虚拟内存、进程、CPU、磁盘I/O等统计信息。 | vmstat 1 |
netstat / ss |
查看网络连接、路由表、接口统计等。ss 是现代替代品,更快。 |
ss -tulnp (查看监听端口) |
lsof |
列出当前系统打开的文件。常用于排查“文件被哪个进程占用”。 | lsof -i :8080 (查看谁占用了8080端口) |
ps |
报告当前进程的快照。 | ps aux | grep nginx (查找nginx进程) |
2. 文件与目录操作
命令 | 说明 | 常用示例/参数 |
---|---|---|
grep |
强大的文本搜索工具。 | grep "error" logfile ,grep -r "pattern" /dir (递归搜索) |
find |
在目录中搜索文件。 | find /var/log -name "*.log" -mtime +7 (找7天前的日志) |
awk |
文本处理和分析语言,处理列数据非常强大。 | awk '{print $1}' file (打印第一列) |
sed |
流编辑器,用于文本替换、删除等。 | sed 's/foo/bar/g' file (将foo全局替换为bar) |
tail / head |
查看文件尾部/头部内容。 | tail -f app.log (实时追踪日志) tail -n 100 app.log (看最后100行) |
cp / mv / rm |
复制 / 移动(重命名) / 删除 | rm -rf dir (慎用!强制递归删除),cp -a src dst (归档模式,保留属性) |
chmod |
修改文件权限。 | chmod 755 script.sh ,chmod +x script.sh (添加执行权限) |
chown |
修改文件属主和属组。 | chown user:group file |
3. 网络工具
命令 | 说明 | 常用示例/参数 |
---|---|---|
ping |
测试网络连通性。 | ping example.com |
traceroute / mtr |
跟踪数据包到达目标主机的路由路径。mtr 是增强版。 |
mtr google.com |
curl / wget |
命令行下载工具,curl 功能更强,常用于测试API。 |
curl -I http://site.com (仅获取HTTP头),wget url |
telnet / nc (netcat) |
检查远程端口是否通畅。 | nc -zv host.com 3306 ,telnet host.com 22 |
4. 系统管理
命令 | 说明 | 常用示例/参数 |
---|---|---|
systemctl |
控制系统服务(systemd系统)。 | systemctl start nginx (启动),systemctl status nginx (状态) |
journalctl |
查看systemd管理的服务的日志。 | journalctl -u nginx -f (查看并追踪nginx服务日志) |
crontab |
管理定时任务。 | crontab -l (列出当前任务),crontab -e (编辑任务) |
二、 数据库 (MySQL和Oracle)
1. 连接与基本操作
操作 | MySQL | Oracle |
---|---|---|
命令行客户端连接 | mysql -u [用户名] -p -h [主机名/IP] [数据库名] 例: mysql -u root -p -h 192.168.1.100 mydb |
sqlplus [用户名]/[密码]@//[主机名/IP]:[端口]/[服务名] 例: sqlplus system/password@//192.168.1.101:1521/ORCLCDB |
查看当前数据库 | SELECT DATABASE(); |
Oracle 的概念不同:用户与 schema 强关联。连接时即连接到某个 PDB。SHOW CON_NAME (在容器内) 查看当前容器。 |
列出所有数据库 | SHOW DATABASES; |
Oracle 多租户架构: - 查看所有容器数据库(CDB)/可插拔数据库(PDB): SELECT name, open_mode FROM v$pdbs; (需有权限) - 切换到某个 PDB: ALTER SESSION SET CONTAINER = [PDB_NAME]; |
列出当前用户的所有表 | SHOW TABLES; |
SELECT table_name FROM user_tables; |
查看表结构 | DESCRIBE [表名]; 或 SHOW CREATE TABLE [表名]; |
DESC [表名]; (在 SQL*Plus 中) 或查询 SELECT DBMS_METADATA.GET_DDL('TABLE', '[表名]', '[用户名]') FROM dual; |
2. 用户与权限管理
操作 | MySQL | Oracle |
---|---|---|
创建用户 | CREATE USER '[用户名]'@'[主机]' IDENTIFIED BY '[密码]'; 例: CREATE USER 'dev'@'%' IDENTIFIED BY 'Passw0rd!'; |
CREATE USER [用户名] IDENTIFIED BY [密码] DEFAULT TABLESPACE [表空间名] QUOTA [大小] ON [表空间名]; 例: CREATE USER scott IDENTIFIED BY tiger DEFAULT TABLESPACE users QUOTA 100M ON users; |
授予权限 | GRANT [权限] ON [数据库名].[表名] TO '[用户名]'@'[主机]'; 例: GRANT ALL PRIVILEGES ON mydb.* TO 'dev'@'%'; |
GRANT [权限] TO [用户名]; 例: GRANT CONNECT, RESOURCE TO scott; GRANT SELECT, INSERT ON scott.emp TO another_user; |
撤销权限 | REVOKE [权限] ON [数据库名].[表名] FROM '[用户名]'@'[主机]'; |
REVOKE [权限] FROM [用户名]; |
刷新权限 | FLUSH PRIVILEGES; (执行授权后通常需要) |
权限在 Oracle 中立即生效,无需刷新。 |
修改密码 | ALTER USER '[用户名]'@'[主机]' IDENTIFIED BY '[新密码]'; 或 SET PASSWORD FOR ... |
ALTER USER [用户名] IDENTIFIED BY [新密码]; |
3. 备份与恢复 (核心技能,命令差异巨大)
操作 | MySQL | Oracle |
---|---|---|
逻辑备份(导出) | mysqldump 工具 mysqldump -u [用户] -p -h [主机] [数据库名] > backup.sql |
数据泵(Data Pump) 工具,推荐方式 导出: expdp [用户]/[密码] DIRECTORY=[目录对象名] DUMPFILE=[文件名].dmp SCHEMAS=[用户名] (传统 exp 工具已过时) |
逻辑恢复(导入) | mysql -u [用户] -p -h [主机] [数据库名] < backup.sql |
数据泵(Data Pump) 导入: impdp [用户]/[密码] DIRECTORY=[目录对象名] DUMPFILE=[文件名].dmp REMAP_SCHEMA=[原用户]:[新用户] |
物理备份 | 使用企业版或第三方工具(如 XtraBackup)进行热备。 | RMAN (Recovery Manager),标准且强大。 示例命令: RMAN> BACKUP DATABASE; RMAN> BACKUP TABLESPACE users; |
4. 状态与诊断
操作 | MySQL | Oracle |
---|---|---|
查看当前连接/会话 | SHOW PROCESSLIST; |
SELECT sid, serial#, username, status, machine, program FROM v$session; |
杀死会话 | KILL [processlist_id]; |
1. 查询会话:SELECT sid, serial# FROM v$session WHERE ... 2. 终止: ALTER SYSTEM KILL SESSION 'sid,serial#'; |
查看数据库运行状态和参数 | SHOW STATUS; SHOW VARIABLES LIKE '%buffer%'; |
SELECT name, value FROM v$parameter WHERE name LIKE '%sga%'; SELECT * FROM v$sysstat; |
查看锁信息 | SHOW ENGINE INNODB STATUS\G (查看Locks部分) |
SELECT * FROM v$locked_object; SELECT * FROM v$lock; |
查看表空间使用情况 | SELECT table_schema, SUM(data_length+index_length)/1024/1024 AS Size_MB FROM information_schema.tables GROUP BY table_schema; |
SELECT tablespace_name, sum(bytes)/1024/1024 MB from dba_free_space group by tablespace_name; |
5. Oracle 特有实用命令 (在 SQL*Plus 中)
查看当前用户:
SHOW USER
执行操作系统命令:
HOST [命令]
,例如HOST ls -l
编辑上一条 SQL:
EDIT
(或ED
)运行外部 SQL 脚本:
@[脚本路径]
,例如@/home/oracle/script.sql
关键差异总结
架构差异:MySQL 是
实例 -> 数据库 -> 表
的结构;Oracle 是实例 -> 数据库 (CDB) -> 可插拔数据库 (PDB) -> 表空间 -> 表
的结构,用户(Schema)与 PDB 关联。权限体系:MySQL 的权限与
'用户'@'主机'
绑定,更偏向网络层面;Oracle 的权限与用户直接绑定,更复杂精细,常用角色(如CONNECT
,RESOURCE
)来管理。备份工具:这是最大的不同点。MySQL 主要用
mysqldump
和 XtraBackup;Oracle 强烈推荐使用 RMAN 进行物理备份和 Data Pump (expdp
/impdp
) 进行逻辑备份,传统exp
/imp
已不再被推荐用于新系统。元数据查询:MySQL 多用
SHOW
命令;Oracle 几乎全部通过查询数据字典视图 (如dba_*
,all_*
,user_*
,v$*
) 来完成。
三、 实用技巧
组合使用:Linux命令的强大之处在于可以用管道
|
组合。grep "ERROR" application.log | awk '{print $2}' | sort \| uniq -c | sort -nr
(统计错误日志中出现的错误类型及其次数并按频率排序)
后台运行:在命令后加
&
可使其在后台运行。使用nohup command &
可以让命令在退出终端后继续运行。命令历史:按
Ctrl + R
可以反向搜索历史命令。谨慎操作:尤其在使用
rm
、dd
、chmod
、chown
和数据库的DELETE
、UPDATE
、DROP
命令时,一定要再三确认命令和条件是否正确。生产环境操作前最好先备份。善用手册:忘记命令用法时,使用
man [command]
(如man ls
) 查看详细手册。