第一次接触Linux系统的时候,我盯着黑底白字的终端直发愣。鼠标点哪儿都没反应,只能硬着头皮敲键盘。那会儿最怕的就是一不小心就把系统给搞崩了,后来才知道,原来这种担心每个新手都有。
首先是文件操作:这个就像是我们要先摸清楚家里的抽屉
刚装完系统,第一个要学的就是在文件夹里溜达。ls这个命令简直是救命稻草,敲下去至少能看到点东西。不过光用ls可不够,我习惯加上ls -la——这样能看到隐藏文件,还能知道每个文件的大小、权限这些干货。
有时候文件太多,屏幕刷地一下就满了。这时候ls | less就派上用场了,可以慢慢翻页看。小技巧:按/可以搜索,按q就能退出来。
说到文件夹,cd命令刚开始把我折腾坏了。老是记不住路径,后来发现有个偷懒的办法:cd -能直接回到刚才的目录,就像电视遥控器上的返回键。cd ~回主目录也很实用,不管现在在哪儿,一敲就回家。
创建文件夹用mkdir,不过我刚开始经常遇到"没有那个文件或目录"的错误。原来是要加-p参数,mkdir -p project/src/main这样一下子能建好整个路径,省事多了。
删除文件可真得小心。我有一次手快把rm -rf用错了地方,结果辛辛苦苦写的代码全没了。现在学乖了,重要文件先备份,删除前再用ls确认一遍路径。rm -i会逐个询问,虽然麻烦点,但安全了不少。
复制和移动文件也有讲究。cp命令默认不会复制文件夹,得加-r参数。mv除了移动还能重命名,我经常用它来整理下载目录,把一堆乱糟糟的文件归类放好。
查看文件内容:不再搞得一头雾水
cat命令看似简单,其实门道不少。看小文件还行,大文件就直接刷屏了。我更喜欢用less或者more,能一页一页看。特别是看日志的时候,less可以上下翻页,搜索关键字也很方便。
说到日志文件,tail命令简直是神器。服务器出问题的时候,tail -f /var/log/nginx/access.log能实时看到访问记录,配合grep一起用,能快速定位问题。比如tail -f logfile | grep error就能只显示包含error的行。
head命令相反,看文件开头很有用。我常用它检查CSV文件的表头,或者快速浏览配置文件的结构。
查找和搜索:大海捞针的利器
find命令刚开始把我绕晕了,参数太多。后来掌握了几种常用套路就简单多了:find.-name"*.txt"# 当前目录找所有txt文件find /var -type f -size +100M # 找/var目录下大于100M的文件find.-mtime-7# 找7天内修改过的文件grep更是日常必备。查日志、找代码、看配置都离不开它。我特别喜欢用grep -r递归搜索,配合-n显示行号,调试程序时特别好用。grep -v能反向过滤,比如ps aux | grep nginx | grep -v grep就能把grep本身的进程过滤掉。
进程管理:可以看清系统在干嘛
系统卡顿时,第一反应就是敲top。这个实时更新的界面刚开始看可能眼花缭乱,其实关注几个关键指标就行:CPU使用率、内存占用、负载平均值。按M按内存排序,P按CPU排序,能快速找到占用高的进程。
ps命令适合静态查看。ps aux能看到所有进程的详细信息,配合grep能快速找到特定进程。比如ps aux | grep mysql就能看MySQL相关的进程。
结束进程用kill命令,不过得先知道进程号。我通常这样操作:
ps aux |grep 进程名kill 进程号kill-9 进程号 # 强制结束
磁盘和内存:别让系统喘不过气
磁盘空间不足是常遇到的问题。df -h能看各个分区的使用情况,-h参数让容量显示得更友好,比如显示"2.3G"而不是"2360324"。
du命令看目录大小很实用。du -sh *能看当前目录下每个文件和文件夹的总大小,s参数只显示汇总,不会列出每个子目录。
内存不够时,free -h能快速查看内存使用情况。注意看available那一列,它表示系统实际可用的内存,比单纯的free值更有意义。
权限管理:门禁系统要设置好
Linux的权限系统刚开始确实让人头大。chmod命令有两种用法:数字法和符号法。我更喜欢数字法,简单粗暴:
chmod755 script.sh # 所有者可读可写可执行,其他用户可读可执行 chmod600 private.key # 只有所有者可读写
chown改文件所有者也很常用。复制文件的时候经常会忘了改所有者,导致其他用户无法访问。chown -R能递归修改整个目录的所有者,批量处理很方便。
网络相关:连通性测试必备
网络出问题的时候,ping是第一道诊断工具。ping 8.8.8.8能测试外网连通性,ping 网关IP能检查局域网连接。-c参数能指定发送次数,比如ping -c 4 baidu.com。
netstat查看端口监听情况很有用。netstat -tuln能看哪些端口在监听,配合grep能快速找到特定服务。比如netstat -tuln | grep :80能看80端口是否被占用。
远程连接用ssh,基本语法是ssh 用户名@主机地址。经常连接的服务器可以配置~/.ssh/config文件,设置别名和密钥,省得每次输入长串命令。
软件安装:各家的包管理器
不同发行版的包管理器命令不太一样,但思路差不多。Debian/Ubuntu用apt,CentOS/RHEL用yum或dnf。我总结了一套标准流程:
sudoapt update # 先更新软件列表sudoapt search 关键词 # 搜索软件包sudoaptinstall 包名 # 安装sudoapt remove 包名 # 卸载sudoapt autoremove # 清理不需要的依赖
实用技巧:让命令行更好用
Tab键自动补全必须掌握,能省不少打字时间。连按两次Tab能看到所有可能的选项,对记命令很有帮助。
命令历史也很有用。上下箭头能翻看历史命令,history命令显示所有历史记录,!编号能重复执行某条历史命令。Ctrl+R可以搜索历史命令,找到之前用过的复杂命令。
管道符|能把多个命令串起来,这是Linux最强大的特性之一。比如ps aux | grep nginx | awk '{print $2}'能提取nginx进程的PID。
重定向>和>>能保存命令输出。>会覆盖文件,>>是追加。我经常把长命令的输出重定向到文件,慢慢分析。
踩过的坑:血泪教训
刚开始用rm命令时,我干过rm -rf /tmp/*结果多打了个空格变成rm -rf /tmp *的蠢事,差点把系统根目录删了。从那以后,删除前必用ls确认路径,重要数据定期备份。
还有一次,修改配置文件前没备份,结果改错了导致服务启动不了。现在养成了好习惯:改配置前先cp file.conf file.conf.bak,出问题能快速恢复。
用sudo时也得小心,特别是sudo配合重定向的时候。sudo echo "content" > /etc/config不会生效,因为重定向是在当前用户下执行的。正确做法是echo "content" | sudo tee /etc/config。
学习心得:从恐惧到享受
刚开始学Linux命令时,确实觉得又难又枯燥。但掌握了基本命令后,发现命令行效率比图形界面高多了。批量处理文件、远程管理服务器、自动化脚本,这些都是图形界面难以胜任的工作。
我的学习方法是:先掌握最基础的20%命令,解决80%的日常问题。等熟练了再逐步扩展。遇到问题时先查man手册,看不懂再上网搜。很多命令都有丰富的示例,比死记硬背参数有效得多。
现在我已经离不开命令行了。看着一行行命令在终端里飞舞,有种指挥千军万马的感觉。Linux命令行就像是一门语言,越用越熟练,越用越有趣。
希望这些经验能帮到你。记住,每个Linux高手都是从ls开始的,多练习,多尝试,你也能成为命令行大师!