1. 为什么你需要学习Linux基础指令?
如果你刚接触Linux,看到黑乎乎的终端窗口和闪烁的光标,可能会有点发怵。我刚开始用Linux的时候也是这种感觉,觉得这玩意儿是给“黑客”或者“大神”用的,离我这个普通开发者很远。但后来我发现,无论是想搭建一个自己的网站,还是想管理云服务器,甚至是日常处理一些批量文件,都绕不开Linux命令行。它就像一把万能钥匙,能打开服务器世界的大门。
简单来说,Linux指令就是你和计算机“内核”对话的语言。内核是操作系统的核心,负责管理硬件、内存、进程这些底层的东西,但它太高冷了,不直接和用户交流。Shell(壳)就是这个翻译官,它把你想做的事情(比如“看看这个文件夹里有什么”)翻译成内核能懂的命令去执行,再把结果(比如“文件夹里有三个文件”)翻译成你能看懂的文字显示出来。我们常说的“敲命令”,其实就是在和Shell对话。
所以,掌握基础指令,你就能直接指挥计算机干活,效率比用鼠标点来点去高得多。比如,你想找出服务器上所有昨天修改过的日志文件,用图形界面得一个个文件夹翻,但用命令行,一行指令就能搞定。这不仅是效率问题,更是一种思维方式。很多企业招聘运维、后端开发,都要求会Linux,不是没有道理的。别怕,跟着我一步步来,你会发现它其实很友好,甚至有点“上瘾”。
2. 文件与目录操作:像管理你的书桌一样
想象一下你的电脑桌面,上面有文件夹、文档、图片。Linux的文件系统也是一棵倒挂的树,最顶端是根目录 /,所有东西都从这里长出来。我们操作文件,无非就是“看看有什么”、“去哪里”、“新建什么”、“删掉什么”。这几个动作,对应着最核心的几个命令。
2.1 我在哪?我要看什么?(pwd, ls, cd)
刚登录系统,你首先得知道自己站在哪里。pwd(Print Working Directory)就是干这个的,它会告诉你当前所在的绝对路径。
pwd
# 输出可能是:/home/yourname
知道了位置,下一步就是看看周围有什么。ls(list)命令就像你的眼睛。直接输入 ls,它会列出当前目录下所有非隐藏的文件和文件夹。但它的能力远不止于此,配合选项(options),它能告诉你更多细节。
我常用的几个组合:
ls -l:以长格式列出,能看到文件权限、所有者、大小、修改时间等详细信息。这是我最常用的,一眼就能看清文件全貌。ls -a:显示所有文件,包括以点.开头的隐藏文件(比如.bashrc这种配置文件)。ls -lh:在-l的基础上,把文件大小用 K、M、G 这样人类易读的方式显示,比直接看字节数友好多了。ls -la:组合拳,显示所有文件(包括隐藏的)的详细信息。
ls -la
# 输出类似:
# drwxr-xr-x 5 user group 4096 Mar 10 14:30 .
# drwxr-xr-x 18 user group 4096 Mar 9 10:15 ..
# -rw-r--r-- 1 user group 220 Mar 9 10:15 .bash_logout
# -rw-r--r-- 1 user group 3771 Mar 9 10:15 .bashrc
# drwxrwxr-x 2 user group 4096 Mar 10 14:30 my_project
看完了,想换个地方?用 cd(Change Directory)来移动。cd 后面跟路径,可以是绝对路径(从根 / 开始),也可以是相对路径(从当前位置开始)。
cd /usr/local # 绝对路径,切换到 /usr/local
cd .. # 相对路径,返回上一级目录
cd ~ # 切换到当前用户的家目录,比如 /home/yourname
cd - # 切换到上一次所在的目录,在两个目录间来回跳转特别方便
cd my_project # 相对路径,进入当前目录下的 my_project 文件夹
提示:
Tab键是你的好朋友。输入路径时,按一下Tab可以自动补全,按两下会列出所有可能的选项,能有效防止输错。
2.2 创建与删除:从无到有,从有到无(touch, mkdir, rm, rmdir)
想新建一个空文件,比如准备写个脚本或者记点笔记,就用 touch。它的本意是“触摸”,如果文件不存在,就创建它;如果存在,就更新它的最后修改时间。
touch my_notes.txt # 创建一个名为 my_notes.txt 的空文件
touch file1 file2 file3 # 一口气创建多个文件
创建文件夹用 mkdir(Make Directory)。如果想创建的文件夹的上级目录还不存在,加上 -p 选项,它会帮你把路径上所有不存在的目录都创建好,非常省心。
mkdir new_folder # 在当前目录创建 new_folder
mkdir -p project/src/main/java # 递归创建多级目录,即使 project 目录不存在
删除操作要谨慎,因为命令行里删除的东西默认不进“回收站”。删除空目录用 rmdir。
rmdir empty_folder # 删除名为 empty_folder 的空目录
删除文件或者非空目录,用 rm(Remove)。这是最需要小心的命令之一。
rm file.txt:删除文件。rm -r folder_name:递归删除文件夹及其内部所有内容。-r是递归的意思。rm -rf folder_name:在-r基础上加-f(force,强制),不会询问,直接删除。这个命令威力巨大,请务必确认路径无误后再敲回车! 我见过有人想删/tmp/test,结果输成了rm -rf / tmp/test(/ 后面多了个空格),后果非常严重。
注意:对于新手,我强烈建议先使用
rm -ri命令。-i选项会在删除每个文件前都询问你,虽然麻烦,但安全。等完全熟悉了再考虑其他方式。
2.3 复制、移动与重命名:文件的搬运工(cp, mv)
cp(Copy)用于复制。复制文件很简单:cp 源文件 目标文件。如果想复制整个目录,需要加上 -r 选项。
cp document.txt document_backup.txt # 复制文件并重命名
cp -r old_project/ new_project/ # 递归复制整个目录
cp *.txt backup/ # 使用通配符,复制所有 .txt 文件到 backup 目录
mv(Move)有两个功能:移动文件和重命名文件。它的逻辑是,看第二个参数(目标)是什么。
- 如果目标是一个不存在的名字,那就是重命名。
- 如果目标是一个已存在的目录,那就是移动文件到那个目录。
mv old_name.txt new_name.txt # 重命名文件
mv file.txt /home/user/docs/ # 移动文件到指定目录
mv *.png images/ # 移动所有png图片到images文件夹
3. 查看与编辑文件内容:不止是“打开看看”
很多时候,我们不需要编辑文件,只是想快速瞄一眼内容,或者从中找点信息。这时候,cat, more, less, head, tail 这些命令就派上用场了。
3.1 快速浏览与搜索(cat, more, less)
cat(concatenate)本意是连接文件,但最常用的功能是快速打印整个文件内容到屏幕。适合看小文件。
cat config.yaml
但如果文件有几百上千行,cat 刷一下就过去了,根本看不清。这时可以用 more 或 less。它们都会分页显示。
more 比较简单,只能往下翻页(空格键),不能往回看。翻到底就自动退出了。
less 更强大,是 more 的增强版。可以用上下箭头、PageUp/PageDown 键随意滚动,支持向前(?)向后(/)搜索,退出按 q。我几乎只用 less。
less huge_log_file.log
在 less 视图里,输入 /error 可以搜索“error”这个词,按 n 跳转到下一个匹配项,N 跳转到上一个。
3.2 只看头尾(head, tail)
日志文件动不动几百MB,我们通常只关心最新的错误。tail 就是为这个而生的。默认显示文件最后10行。
tail app.log # 显示 app.log 最后10行
tail -n 20 app.log # 显示最后20行
tail -f app.log # 这是神器!`-f` 表示 follow,实时追踪文件新增的内容。监控日志时一直开着这个窗口,所有新日志都会实时显示出来。
head 则相反,看文件开头部分,默认显示前10行。常用于检查配置文件的前几行,或者看一个数据文件的格式。
head -n 5 users.csv # 显示 users.csv 文件的前5行
3.3 强大的文本搜索(grep)
grep 是文本搜索的瑞士军刀。它的基本用法是在一个或多个文件里,搜索包含特定模式(字符串或正则表达式)的行。
grep "ERROR" app.log # 在 app.log 中搜索包含 “ERROR” 的行
grep -r "function_name" src/ # `-r` 递归地在 src 目录下所有文件中搜索
grep -n "login" auth.log # `-n` 显示匹配行所在的行号
grep -i "warning" system.log # `-i` 忽略大小写,匹配 warning, WARNING, WaRnInG 等
grep -v "success" output.txt # `-v` 反向选择,只显示**不包含** “success” 的行
我经常用 grep 和管道符 | 结合其他命令。比如,我想看看当前正在运行的进程里,有哪些是 Java 进程:
ps aux | grep java
这里 ps aux 列出所有进程,然后把结果“管道”给 grep java 进行过滤,只显示包含“java”的行。
4. 文件查找、打包与权限管理
4.1 如何找到“藏起来”的文件?(find)
find 命令功能极其强大,可以在指定目录下递归地查找文件,根据名称、大小、修改时间、类型等各种条件进行搜索。最常用的就是按名字找。
find /home -name "*.jpg" # 在 /home 目录下查找所有 .jpg 文件
find . -type f -name "config.*" # 在当前目录(`.`)下查找类型为文件(`-type f`)且名字匹配 config.* 的文件
find /var/log -mtime -7 # 在 /var/log 下查找过去7天内修改过的文件
find . -size +10M # 在当前目录下查找大于10MB的文件
find 还可以对找到的文件执行操作。比如,删除当前目录下所有名为 .tmp 的临时文件:
find . -name "*.tmp" -delete
(再次提醒,-delete 操作前请务必确认查找结果!)
4.2 打包与压缩:方便传输和备份(tar, gzip, zip)
在Linux世界,tar 是标准的打包工具,它能把一堆文件和目录打包成一个 .tar 文件(归档)。为了节省空间,我们通常还会用 gzip 或 bzip2 进行压缩,生成 .tar.gz (或 .tgz) 或 .tar.bz2 文件。
打包并压缩(最常用):
tar -czvf my_project.tar.gz my_project/ # 将 my_project 目录打包并用gzip压缩
# -c: 创建归档
# -z: 使用gzip压缩
# -v: 显示过程(verbose)
# -f: 指定文件名
解压:
tar -xzvf my_project.tar.gz # 解压到当前目录
tar -xzvf my_project.tar.gz -C /opt # `-C` 指定解压到 /opt 目录
# -x: 解压
对于 .zip 格式,使用 zip 和 unzip 命令:
zip -r archive.zip folder_to_zip/ # 压缩
unzip archive.zip # 解压到当前目录
unzip archive.zip -d target_folder # 解压到指定目录
4.3 理解文件权限(ls -l 的输出)
当你用 ls -l 时,第一列的那串奇怪字符(如 drwxr-xr-x)就是文件权限。它决定了“谁”能对文件“做什么”。
这串字符有10位:
- 第1位:文件类型(
-普通文件,d目录,l链接等)。 - 第2-4位:文件所有者(user)的读(r)、写(w)、执行(x)权限。
- 第5-7位:文件所属用户组(group)的权限。
- 第8-10位:其他用户(others)的权限。
rwx 分别用数字 4, 2, 1 表示。所以 rwxr-xr-x 就是 755(所有者:4+2+1=7;组:4+1=5;其他人:4+1=5)。
修改权限用 chmod 命令:
chmod 755 script.sh # 将 script.sh 设为所有者可读写执行,组和其他人只读执行
chmod +x script.sh # 给 script.sh 添加可执行权限(对所有用户)
chmod u+w file.txt # 只给所有者(user)添加写(write)权限
修改文件所有者和所属组用 chown:
sudo chown newowner:newgroup file.txt # 改变文件的所有者和组
5. 系统状态与进程管理
5.1 看看系统在忙什么?(ps, top, df, free)
ps aux:查看当前系统所有进程的快照。a显示所有用户进程,u显示详细信息,x包括没有控制终端的进程。我常用ps aux | grep nginx来检查Nginx是否在运行。top/htop:动态实时查看系统资源占用情况,像任务管理器。htop是top的增强版,界面更友好,支持鼠标操作。它能直观地看到哪个进程吃了最多的CPU和内存。df -h:查看磁盘空间使用情况。-h选项让大小以 G、M 为单位显示,一目了然。服务器磁盘快满的时候,第一个就该运行这个命令。free -h:查看内存使用情况。同样,-h选项让输出更易读。关注available这一列,它表示系统可用的内存。
5.2 管理进程(kill, pkill, jobs, bg, fg)
如果某个程序卡死了,你需要结束它。首先用 ps aux | grep 程序名 找到它的进程ID(PID),然后用 kill 命令。
kill 1234 # 温和地终止PID为1234的进程(发送SIGTERM信号)
kill -9 1234 # 强制杀死进程(发送SIGKILL信号),这是最后的手段
pkill firefox # 根据进程名来杀死进程,比如杀死所有Firefox进程
如果你在终端里启动了一个程序(比如 python3 app.py),它在前台运行,占用了你的终端。你可以按 Ctrl + Z 把它暂停并放到后台。然后:
jobs:查看当前终端后台的所有任务。bg %1:将1号后台任务转为后台继续运行。fg %1:将1号后台任务调回前台运行。- 想让程序一开始就在后台运行,可以在命令末尾加
&:python3 app.py &。
5.3 网络相关(ping, netstat/ss, wget/curl)
ping baidu.com:检查网络连通性。看看能不能通到百度。netstat -tulpn或ss -tulpn:查看系统监听了哪些端口,以及对应的进程。ss是更现代、更快的工具。排查“端口被占用”问题时必用。curl http://example.com:在命令行里获取网页内容或下载文件,功能非常强大。wget也是一个常用的下载工具,更适合直接下载文件到本地。
6. 用户管理与文件传输
6.1 我是谁?我能做什么?(whoami, sudo, adduser/useradd)
whoami:告诉你当前登录的用户名。sudo command:以超级管理员(root)权限运行命令。普通用户执行需要高权限的操作(如安装软件、修改系统文件)时,需要在命令前加sudo,并输入自己的密码(如果该用户在sudoers列表里)。adduser username:创建一个新用户。它会交互式地询问密码等信息,并自动创建家目录,对新手更友好。useradd是更底层的命令,需要更多参数。passwd username:修改用户密码。
6.2 在机器间搬运文件(scp, sftp)
这是本地电脑和远程服务器之间传输文件最常用的安全方式。
从本地上传文件到远程服务器:
scp local_file.txt user@remote_server_ip:/home/user/
从远程服务器下载文件到本地:
scp user@remote_server_ip:/path/to/remote/file.txt /local/path/
递归传输整个目录(加 -r 选项):
scp -r my_project/ user@remote_server_ip:/opt/
scp 基于SSH,所以你需要有远程服务器的登录权限。如果需要进行更复杂的文件管理(如重命名、删除远程文件),可以使用 sftp,它提供了一个类似FTP的交互式界面。
学习Linux命令就像学骑自行车,一开始可能会摔几下,但一旦掌握了平衡,你就会发现一片新天地。最好的学习方法就是“用”。给自己定个小目标,比如在服务器上部署一个个人博客,过程中遇到的所有问题,都尝试用命令行去解决。遇到不会的命令,随时用 man 命令名(比如 man ls)去查官方手册,或者 命令名 --help 看简单帮助。别指望一次全记住,用得多了,自然就熟了。记住,每个高手都是从输入第一行 ls 开始的。

377

被折叠的 条评论
为什么被折叠?



