IT运维君
十年运维路,半生中年局。
扫码关注公众号
不管是刚接触Linux的新手,还是想在工作里提高效率的人,把这10个核心技能练熟,基本能应对日常80%以上的操作,写简历能加分,干活也能少走弯路。
一、基础操作:天天都得用的核心命令
1.文件与目录管理
每天处理文件、建文件夹都靠这几个命令:ls、cd、mkdir、rm、cp、mv。
(1)ls:看当前目录有啥文件,ls -lha能看详细信息(大小、权限、修改时间),隐藏文件也能显示。
(2)cd:切换目录,cd /home/user进用户家目录,cd ..回上一级,不用记完整路径。
(3)mkdir:建文件夹,mkdir work建单个,mkdir -p work/project/docs一次性建多层目录。
(4)rm:删东西,rm test.txt删文件,rm -r work删文件夹,rm -rf work强制删(删了找不回,得小心)。
(5)cp:复制,cp test.txt work/把文件拷到文件夹,cp -r work/ backup/复制整个文件夹。
(6)mv:移动或改名,mv test.txt work/移文件,mv test.txt data.txt直接改文件名。
2.权限管理
Linux里文件谁能看、谁能改,靠chmod和chown管,尤其是多人共用服务器时必用。
(1)chmod:设读写执行权限,用数字最方便。比如chmod 755 file.txt,7是用户(所有者)权限(读+写+执行),第一个5是用户组权限(读+执行),第二个5是其他用户权限(读+执行)。
想让所有人能写就chmod 777,但不安全,少用。改文件夹权限加-R,chmod -R 755 work/。
(2)chown:改所有者和所属组,chown user:group file.txt,把文件归给user用户和group组;只改所有者就chown user file.txt,只改组就chown :group file.txt。
3.文本处理“三剑客”
查日志、改配置文件全靠grep、awk、sed,天天都能用到。
(1)grep:找文件里的内容,grep "error" log.txt在日志里找“error”行;grep -i "Error"忽略大小写,grep -c "error"统计有多少行匹配。
(2)awk:提取数据,比如/etc/passwd文件用冒号分隔,awk -F: '$3<1000 {print $1}' /etc/passwd,能找出用户ID小于1000的用户名($3是用户ID,$1是用户名)。
(3)sed:替换内容,sed -i 's/old_ip/new_ip/g' config.txt,把文件里所有旧IP换成新IP(-i直接改原文件,g是全局替换);还能删行,sed -i '/^#/d' config.txt删掉注释行。
二、系统管理:提升效率的关键操作
4.进程监控与管理
平时程序卡住,或者内存占用太高,就得用ps、top、kill这几个命令处理。
先说ps,这个命令能查看正在运行的进程。
输入ps -ef,可以看到所有进程的详细信息;要是只想找Java进程,就用ps -ef | grep java ,这里的 | 符号就像个筛子,帮你过滤结果。
top命令更直观,打开后能实时看到哪个进程最“吃”CPU和内存。
按P键,进程会按CPU占用从高到低排序;按M键,按内存占用排序;看完了想退出,直接按q就行。
最后是kill命令,用来结束进程。先从ps或top命令里找到进程号,比如1234 ,用kill 1234 就能正常结束进程。
要是进程卡死了,就得用kill -9 1234强制结束。
不过一定要确认好进程号,杀错进程可能会出大问题!
5.服务管理
像Web服务、数据库这些后台服务,启动、重启在不同系统里命令不太一样。
CentOS系统用systemctl命令,Ubuntu系统用service命令。
不过现在新一点的系统,比如CentOS 7以上、Ubuntu 16.04以后,基本都统一用systemctl了。
比如管理httpd服务,启动用systemctl start httpd,查看状态用systemctl status httpd,改完配置要重启就用systemctl restart httpd。
要是想让服务开机自动启动,得用systemctl enable httpd。
不过在一些老系统里,可能还会用到service命令,比如service nginx restart,但为了方便,还是建议优先学systemctl。
6.磁盘与文件系统
服务器硬盘满了,或者要接新硬盘,都会用到df、du、fdisk、mount这几个命令。
先说说df -h,这是我每天必看的。
它能显示每个磁盘分区用了多少空间,结果直接以GB、MB为单位,特别直观。
要是看到/目录占用超过80%,就得赶紧清理了——我之前就吃过亏,没及时清理,结果服务器直接卡住了。
du命令用来查目录大小。
比如想知道日志文件夹占多大空间,就用du -sh /var/log;要是想细看里面每个子目录,用du -h /var/log,哪个文件占地方一下就清楚了。
接新硬盘的时候,千万要小心。我见过有人手滑操作错,把数据全删了。
所以第一步一定要用lsblk或fdisk -l确认硬盘设备名,比如确认是/dev/sdb。
确认好了,再开始分区,用fdisk /dev/sdb,按n新建分区,按w保存。分区完了,用mkfs.ext4 /dev/sdb1格式化。
最后新建个目录,比如mkdir /data,再用mount /dev/sdb1 /data挂载。
如果想让挂载设置一直生效,就得改/etc/fstab文件。这里建议用磁盘的UUID代替设备名,因为设备名有时候会变,但UUID是固定的,更保险。
查UUID也简单,用blkid命令就行,之前我给服务器加硬盘时,就是用这个方法,到现在都没出过问题。
三、网络与实用工具:保障运行+少跑腿
7.网络配置与排查
连不上网,或者远程登不上服务器,就用ip、ping、traceroute这几个命令排查问题。
ip addr能查看网卡信息,从这里能看到服务器的IP地址、MAC地址,确认有没有分配到IP。
ping命令用来测试网络通不通,ping www.baidu.com能正常返回数据,说明外网没问题;ping 192.168.1.100这种内网IP,可以测试内网连接,不通的话就得检查路由器或者防火墙设置。
traceroute命令能追踪网络路径,比如traceroute www.baidu.com ,能看到数据从本地到百度服务器经过的所有路由器节点,哪个节点没响应,问题大概率就在那里。
不过有些系统里可能没装这个命令,可以试试tracepath,还有个mtr命令,集成了ping和traceroute的功能,更好用。
8.防火墙管理
开放端口、防止恶意访问,CentOS用firewalld,Ubuntu用ufw。
CentOS系统里,要是想开放80端口(Web服务常用),就用firewall-cmd --permanent --add-port=80/tcp,然后再输入firewall-cmd --reload让设置生效;想查看开放了哪些端口,用firewall-cmd --list-ports。
Ubuntu系统用ufw,开放22端口(SSH远程登录用),输入ufw allow 22/tcp;启用防火墙用ufw enable;想看防火墙状态,用ufw status。
平时很少直接操作服务器,基本都靠ssh和scp远程管理。
ssh用来远程登录服务器,输入ssh user@192.168.1.200 ,再输密码就能登录(user是用户名,192.168.1.200是服务器IP)。
要是端口不是默认的22,得用ssh -p 2222 user@192.168.1.200指定端口。
scp用来传文件,本地文件传到服务器,用scp test.txt user@192.168.1.200:/home/user/ ;服务器文件下载到本地,用scp user@192.168.1.200:/home/user/data.txt ./。
要是传文件夹,得加个-r参数,像scp -r work/ user@192.168.1.200:/home/user/ 。
其实还有更安全的登录方式,用ssh-keygen生成密钥对,再用ssh-copy-id user@192.168.1.200把公钥传到服务器,以后登录就不用输密码了,比密码登录安全得多。
像每天备份数据、每周清理日志这种重复的活儿,不用手动做,可以用crontab命令设定时任务,让系统自动运行。
输入crontab -e就能编辑任务,按照“分 时 日 月 周 要执行的命令”这个格式写。
比如每天凌晨2点运行备份脚本,就写“0 2 * * * /home/user/backup.sh”,这里的*代表任意时间。
想看自己设了哪些定时任务,用crontab -l;
设好任务后就不用管了,到时间系统会自动执行。
不过要注意,cron运行的环境和我们平时用的不一样,脚本或命令里最好写绝对路径,比如/usr/bin/python3 /home/user/script.py,不然可能因为找不到命令执行失败。
这10个技能看着多,其实都是工作里天天用的操作。刚开始记不住命令参数没关系,用的时候对着查,练个两三次就能上手。
学Linux不用贪多,先把这些核心的练熟,能解决工作里的实际问题就行,不管是写简历找工作,还是平时干活,都能真真切切帮上忙。