前言
目标:入门 Linux 基础指令。
一、Linux 是什么?
简单来说,Linux 就是一个操作系统,就像 Windows、macOS 一样。但它的特别之处在于:
-
开源免费:任何人都可以免费使用、修改、甚至贡献代码
-
稳定高效 :全球 75% 的服务器都在运行 Linux
-
命令行操作:虽然也有图形界面,但真正的力量在命令行
小知识:我们用的 Android 手机,底层也是基于 Linux 内核的哦!
1.2 为什么要学命令行?
为什么不用图形界面?点点鼠标多方便!"
原因很简单:
-
高效 :一条命令可以完成图形界面十几步操作
-
自动化 :命令可以写成脚本,批量执行
-
服务器:大部分服务器根本没有装图形界面(为了节省资源)
1.3 Shell是什么?
打个比方:
-
操作系统内核 = 公司的CEO(核心决策者)
-
Shell(外壳) = 前台小姐姐(转达你的需求)
-
你 = 客户
你不能直接找CEO办事,需要通过前台小姐姐转达。Shell就是那个"前台小姐姐",负责把你的命令翻译给内核执行。
所以Shell 就是接收你输入的命令,交给内核执行,并把结果返回给你的那个程序。
二、环境准备
2.1 使用XShell远程连接
步骤:
-
下载XShell(家庭/学校版免费):https://www.xshell.com/
-
在Linux终端输入
ifconfig查看IP地址 -
打开XShell,输入
ssh IP地址连接
XShell复制粘贴快捷键:
-
复制:
Ctrl + Insert -
粘贴:
Shift + Insert
三、核心指令详解(附完整代码)
3.1 ls ------ 查看文件列表
功能 :列出当前目录下的文件和文件夹
基本语法:
cpp
ls [选项] [目录名]

-l:显示详细信息(权限、大小、时间等)

-a:显示所有文件(包括隐藏文件,隐藏文件是以.开头的)

-h:以人类易读的方式显示大小,把文件大小从字节,自动换成 K、M、G 这种我们看得懂的单位。
3.2 pwd ------ 显示当前路径

pwd 就是 Linux 里的 "定位",告诉你当前站在哪个目录里。
3.3 cd ------ 切换目录
基本概念:
| 路径类型 | 说明 | 例子 |
|---|---|---|
| 绝对路径 | 从根目录 / 开始 |
/home/user/Documents |
| 相对路径 | 从当前位置开始 | ./Documents 或 ../ |


快速返回家目录: cd \~ 或直接 cd \~代表当前用户的家目录 /代表根目录
linux结构像一棵倒着的树:
cpp
/
├── bin
├── etc
├── home
├── root
├── usr
├── var
├── dev
└── ...
/= Linux 世界的唯一祖先- 所有文件夹、文件、磁盘、U 盘、光盘......全都挂在
/下面
在 Linux 目录树中:叶子结点 = 文件 或 空目录
: 只要一个目录下面还有子目录或文件 → 它是树枝节点,不是叶子
只有下面啥都没有的目录(空目录)→ 才算叶子
普通文件不可能再有下级→ 天生就是叶子

返回上级目录(.. 代表上级) 切换到最近访问的目录(- 代表上一个目录)

. 代表当前目录的操作
3.4 touch ------ 创建文件/更新时间

创建空文件hello.c, 如果文件已存在,只更新修改时间(ACM时间都会改)
3.5 mkdir ------ 创建目录

创建单级目录
cpp
[root@localhost ~]# mkdir -p project/src/main/java
[root@localhost ~]# tree project/
project/
└── src
└── main
└── java
创建多级目录(-p 参数自动创建父目录)
3.6 rm ------ 删除文件/目录
rm 文件名 删除文件,不能删除目录 rm -f 文件名 强制删除
rm -r 可以删除非空目录 rm -rf 目录名 强制删除
rm -rf 是非常危险的命令!rm -rf / 会删除整个系统!
3.7 cp ------ 复制文件/目录
复f复制文件 加 -r

复制当前目录到lovexh目录下 复制目录加 -r
3.8 echo

echo = 输出内容(打印文字、变量、空行)

覆盖写入(>) 重定向:把本来要输出到屏幕的内容,强行送到文件里。 test2.txt 不存在 → 自动创建,如果存在test2.txt → 清空原有内容,再写入 HELLOWROLD


追加重定向:原来的内容还在,新内容加在后面
如果想清空文件内容,可以用**echo > test.c,它会把文件内容清空成空文件。包含了一个换行符** (\n),文件大小是 1 字节。
3.9 grep ------ 文本搜索

grep = 在文件里搜索指定文字 / 字符串
忽略大小写搜索: grep -i "hello" test.cpp
显示行号: grep -n "hello" test.cpp
显示 不包含 hello 的所有行(-v = 反选 / 取反):grep -v "hello" test.cpp
**递归搜索整个文件夹所有文件:**grep -r "main" ./
3.10 tar ------ 打包压缩

tarczf 压缩包名 源文件 作用:把源文件打包成指定名字的 .tgz 压缩包,压缩包名和源文件可以完全不同
tarxzf 压缩包名 -C 路径 :解压到指定目录**tar xzf r.tgz -C ./..** → 把 r.tgz 解压到当前目录的上一层
- 压缩包的名字只是 "容器名",和里面文件的名字无关
- 解压时只会还原包内文件的原名,不会变成压缩包的名字
- 你这次解压到上级目录,看到的
test.c就是压缩包里还原出来的文件,和你原来的test.c内容完全一致
3.10 more/less ------ 分页查看大文件
cpp
# 1. 生成一个大文件用于演示
[root@localhost ~]# for i in {1..100}; do echo "Line $i"; done > bigfile.txt
# 2. more:分页查看(只能向下翻页)
[root@localhost ~]# more bigfile.txt
Line 1
Line 2
...
Line 20
--More--(29%) # 按空格翻页,按q退出
# 3. more指定显示行数
[root@localhost ~]# more -10 bigfile.txt
Line 1
...
Line 10
--More--(10%)
# 4. less:更强大的分页查看(可上下翻页)
[root@localhost ~]# less bigfile.txt
# 在less中:
# 空格/PageDown:向下翻页
# PageUp:向上翻页
# /关键词:向下搜索
# ?关键词:向上搜索
# n:下一个匹配
# N:上一个匹配
# q:退出
3.11 head/tail ------ 查看文件头尾
cpp
# 1. head:查看前10行(默认)
[root@localhost ~]# head bigfile.txt
Line 1
Line 2
...
Line 10
# 2. head指定行数
[root@localhost ~]# head -5 bigfile.txt
Line 1
Line 2
Line 3
Line 4
Line 5
# 3. tail:查看后10行(默认)
[root@localhost ~]# tail bigfile.txt
Line 91
Line 92
...
Line 100
# 4. tail指定行数
[root@localhost ~]# tail -3 bigfile.txt
Line 98
Line 99
Line 100
# 5. 实时跟踪日志(-f,非常实用!)
[root@localhost ~]# tail -f /var/log/messages
# 会持续显示新增的日志,按 Ctrl+C 退出
# 6. 实战:显示第20-30行
[root@localhost ~]# head -30 bigfile.txt | tail -11
Line 20
Line 21
...
Line 30
3.12find ------ 查找文件
cpp
# 1. 按文件名查找
[root@localhost ~]# find /home -name "test.txt"
/home/user/test.txt
/home/user/Documents/test.txt
# 2. 按文件名模糊匹配(使用通配符)
[root@localhost ~]# find /home -name "*.log"
/home/user/app.log
/home/user/error.log
# 3. 按类型查找
[root@localhost ~]# find /home -type d # 查找目录
[root@localhost ~]# find /home -type f # 查找普通文件
# 4. 按大小查找
[root@localhost ~]# find /home -size +100M # 大于100MB
[root@localhost ~]# find /home -size -1M # 小于1MB
[root@localhost ~]# find /home -size 10M # 等于10MB
# 5. 按时间查找
[root@localhost ~]# find /home -mtime -7 # 7天内修改的文件
[root@localhost ~]# find /home -mtime +30 # 30天前修改的文件
# 6. 对查找结果执行操作
[root@localhost ~]# find /tmp -name "*.tmp" -delete # 删除
[root@localhost ~]# find /home -name "*.sh" -exec chmod +x {} \; # 添加执行权限
# 7. 实战:查找大文件
[root@localhost ~]# find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null
3.13 ps ------ 查看进程
cpp
# 1. 查看当前终端进程
[root@localhost ~]# ps
PID TTY TIME CMD
1234 pts/0 00:00:00 bash
5678 pts/0 00:00:00 ps
# 2. 查看所有进程
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19368 1544 ? Ss 10:00 0:01 /sbin/init
root 1234 0.0 0.2 28932 2340 pts/0 Ss 10:00 0:00 -bash
# 3. 查看进程树
[root@localhost ~]# ps auxf
# 4. 查找特定进程
[root@localhost ~]# ps aux | grep nginx
# 5. 查看指定用户的进程
[root@localhost ~]# ps -u root
# 6. 实时查看进程(top命令)
[root@localhost ~]# top
# 按 q 退出,按 M 按内存排序,按 P 按CPU排序
3.14 sudo
Linux 临时提权命令,全称 superuser do,普通用户临时以管理员(root)权限执行操作,输入当前用户密码验证。
高频参数
sudo -i:切换 root 完整环境sudo -s:切换 root 终端,保留当前环境sudo -l:查看自身权限sudo -k:清除密码缓存
与 su 区别 :sudo 单条临时提权、权限可控;su 完整切换用户,需目标账号密码。
总结:
| 你想干什么 | 命令 | 通俗解释 | 例子 |
|---|---|---|---|
| 我在哪? | pwd |
P rint W orking Directory,打印当前工作路径。就像问"我现在在地图的哪个位置?" | 输入pwd,它告诉你:/home/yourname |
| 里面有什么? | ls |
列出目录内容。相当于打开一个文件夹,看看里面有啥文件。 | ls -l 可以看详细信息; ls -a 可以看到隐藏文件。 |
| 去哪儿? | cd |
C hange Directory,切换目录。就像双击文件夹。 | cd /home 去home目录; cd .. 返回上一级; cd ~ 直接回家(用户自己的家)。 |
| 建个新文件夹 | mkdir |
M ak e DIRectory,创建目录。 | mkdir myfiles 创建一个叫myfiles的文件夹。 |
| 建个空文件 | touch |
触摸一下。如果文件不存在,就建一个空的。 | touch hello.txt 创建一个空的hello.txt文件。 |
| 看看文件内容 | cat |
把文件内容全部显示在屏幕上。适合看短文件。 | cat hello.txt |
| 复制文件 | cp |
C opy,复制。 | cp a.txt b.txt 把a.txt复制一份叫b.txt。 |
| 移动/改名 | mv |
M ove,移动。也可以用来重命名。 | mv a.txt ../ 把a.txt移到上级目录; mv a.txt b.txt 把a.txt改名为b.txt。 |
| 彻底删除 | rm |
R em ove,移除。危险! Linux没有回收站。 | rm a.txt 删文件; rm -rf 文件夹 强制递归删除整个文件夹。 |
| 看一点内容 | head / tail |
看文件的开头10行 / 结尾10行。看日志文件超级好用。 | tail -f error.log 实时追踪日志末尾的新内容。 |
搜索与帮助:
-
找文件:
find-
场景:你忘了昨天写的代码放哪儿了。
-
命令:
find /home -name "*.c"在/home目录下找所有以.c结尾的文件。
-
-
找命令:
which-
场景:你想知道
ls这个命令本身住在哪。 -
命令:
which ls
-
-
在文件里找内容:
grep-
场景:你在一堆日志里找"错误"这个词。
-
命令:
grep "error" server.log在server.log文件里找包含error的行。加上-i可以忽略大小写。
-
-
救命手册:
man-
场景:你忘了
ls的某个参数是啥了。 -
命令:
man ls打开ls的说明书。按q退出。这是Linux里的"百度",一定要学会用!
-
权限
Linux的权限很严格,就像一个高档小区。
-
三类人:
-
u (主人):房子的主人,可以为所欲为。
-
g (家人):跟主人一组的家人,有一定的权限。
-
o (外人):路过的人,权限最小。
-
-
三种权限:
-
r (读):看看文件里写了啥。
-
w (写):修改文件内容。
-
x (执行):运行这个文件(就像双击exe)。
-
-
怎么看权限?
输入
ls -l,你会看到类似-rw-r--r--的东西。-
第一个字符:
-是文件,d是文件夹。 -
后面9个字符,每3个一组:主人 | 家人 | 外人。
-
rw-表示可读可写不可执行。r--表示只读。
-
-
怎么改权限?
-
数字法(推荐):r=4, w=2, x=1。
chmod 755 file:主人有7(4+2+1=读写执行),家人和读者有5(4+1=读和执行)。
-
字母法:
chmod u+x file:给主人增加执行权限。
-
-
粘滞位(防隔壁老王)
-
在一个公共文件夹(比如/tmp)里,你创建的文件,不想被别人乱删。
-
命令:
chmod +t 目录名。加上后,只有文件的主人、目录的主人、root才能删它。
-
高手进阶(组合技与打包)
-
管道
|把左边命令的输出,直接塞给右边命令当输入。像工厂流水线。
-
例子 :想找出
a.txt里包含"hello"的行,并且还要看一页停一下。 -
grep "hello" a.txt | less -
经典例子(显示文件的第180到200行):
-
head -200 file.txt | tail -21 -
先取出前200行,再从那200行里取出最后21行。
-
-
-
重定向
>>>-
>:把命令的结果覆盖写入一个文件。 -
>>:把命令的结果追加到文件末尾。 -
例子 :
echo "你好" > hello.txt(把"你好"写到hello.txt文件里)
-
-
打包压缩
tarWindows里是zip,Linux里最常用
tar。-
打包+压缩 :
tar -czvf 压缩包名字.tar.gz 要压缩的文件夹/c=创建,z=压缩,v=显示过程,f=指定文件名。
-
解包 :
tar -xzvf 压缩包名字.tar.gzx=解压。
-
解压到指定目录 :
tar -xzvf 压缩包名字.tar.gz -C /目标路径/
-
保命三连快捷键
-
Tab:自动补全 。打一半文件名或命令,按Tab帮你补全。没事就按,神技! -
Ctrl + C:强制停止。命令卡住了?疯狂输出中?按它,立刻终止。 -
Ctrl + D:退出。相当于跟系统说"拜拜",或者退出当前终端。