【Linux04】 Linux基础指令完结与Linux权限初识(一)

Linux基础指令完结与Linux权限初识



🎬 Doro在努力个人主页
🔥 个人专栏 : 《MySQL数据库基础语法》《数据结构》

⛺️严于律己,宽以待人 从命令行到操作系统内核,一文打通Linux基础指令的任督二脉


引言

在Linux学习的道路上,基础指令就像是武林高手的内功心法,看似平淡无奇,实则是后续一切高深技艺的根基。经过前面几节课的积累,我们已经掌握了大约40多个常用指令,但这仅仅是开始。今天这节课,我们将完成基础指令部分的收官之作,同时揭开Linux权限系统的神秘面纱,理解操作系统内核与Shell外壳之间那层微妙的关系。

本文将以课堂实录的形式,结合大量实战案例和生动比喻,带你深入理解tar打包压缩、SCP远程传输、Shell外壳原理以及Linux用户权限等核心概念。无论你是刚入门的新手,还是希望系统梳理知识体系的老手,相信都能从中有所收获。


目录


一、tar命令:打包压缩的艺术

1.1 为什么需要tar

在Linux系统中,我们经常需要将多个文件或整个目录打包成一个文件,方便传输或备份。想象一下,你要搬家,是把所有东西一股脑塞进箱子方便,还是一件件搬运方便?tar命令就是那个"箱子",它可以把分散的文件"打包"在一起,再配合压缩算法,让体积更小、传输更快。

tar的名字来源于"Tape Archive"(磁带归档),虽然现在磁带已经很少见了,但这个命令依然延续着它的使命------将文件归档打包。

1.2 打包压缩的黄金公式

经过反复演示,总结出了一套黄金公式,记住这个就够了:

bash 复制代码
# 打包压缩(记住这个公式!)
tar -czf 压缩包名.tgz 要打包的目录或文件

# 解压解包(一字之差)
tar -xzf 压缩包名.tgz

这里的选项含义如下:

  • -c:create,创建新的压缩包
  • -x:extract,解压解包(和-c正好相反)
  • -z:使用gzip算法进行压缩
  • -f:指定压缩包的文件名(必须放在选项最后)

1.3 实战演示

假设我们有一个项目目录lesson5,里面包含代码文件和资源目录,我们想把它打包压缩:

bash 复制代码
# 创建测试目录结构
mkdir -p lesson5/src lesson5/docs
echo "hello world" > lesson5/hello.c
echo "README content" > lesson5/README.md

# 打包压缩(黄金公式)
tar -czf lesson5.tgz lesson5

# 查看生成的压缩包
ls -lh lesson5.tgz

解压时同样简单:

bash 复制代码
# 创建测试目录并解压
mkdir test
cd test
tar -xzf ../lesson5.tgz

# 查看解压后的内容
ls -la lesson5/

1.4 显示打包/解压过程

有时候我们想看看打包或解压的过程中都处理了哪些文件,可以加上-v选项(verbose,详细模式):

bash 复制代码
# 带详细输出的打包
tar -cvzf lesson5.tgz lesson5

# 带详细输出的解压
tar -xvzf lesson5.tgz

输出会显示类似这样的内容:

复制代码
lesson5/
lesson5/src/
lesson5/docs/
lesson5/hello.c
lesson5/README.md

不过要注意,-v选项虽然方便查看进度,但在处理大量文件时会刷屏。老师提到一个有趣的场景:如果你解压一个需要一小时的超大压缩包,加上-v会让输出疯狂滚动,反而影响其他操作。这时候可以考虑静默解压,或者把任务放到后台执行。

1.5 解压到指定目录

默认情况下,tar会把文件解压到当前目录。如果想解压到指定位置,可以使用-C选项:

bash 复制代码
# 解压到/home/user/backup目录
tar -xzf lesson5.tgz -C /home/user/backup

这个选项在实际工作中非常实用,比如你想把压缩包解压到备份目录,而不是当前工作目录。

1.6 常见压缩格式总结

Linux世界中存在多种压缩格式,课堂上老师提到了几种常见的:

后缀名 说明 解压命令
.tgz / .tar.gz tar+gzip压缩 tar -xzf
.zip zip格式 unzip
.bz2 bzip2压缩 tar -xjf

给一个重要的建议:遇到不认识的压缩格式不要害怕,直接把后缀贴出来搜索,网上都有对应的解压方法。大部分情况下,tar命令配合不同选项都能搞定。


二、file命令:洞察文件本质

2.1 为什么需要file命令

在Linux中,文件的后缀名只是一个"建议",并没有强制约束力。你可以把一个文本文件命名为file.exe,也可以把一个可执行程序命名为document.txt。那么如何知道一个文件的真实类型呢?这就是file命令的用武之地。

2.2 file命令实战

bash 复制代码
# 创建一个空文件
touch hello.c

# 查看文件类型
file hello.c
# 输出: hello.c: empty

# 创建一个目录
mkdir mydir
file mydir
# 输出: mydir: directory

# 查看系统命令的文件类型
file /usr/bin/ls
# 输出: /usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV)

从上面的输出可以看到,file命令不仅能识别普通文件和目录,还能告诉我们可执行程序的系统架构(这里是x86-64位)。

2.3 一个重要的认知

课堂上强调了一个重要观点:Linux中85%以上的命令都是用C语言编写的二进制可执行程序。file命令可以帮助我们验证这一点:

bash 复制代码
# 查看常用命令的本质
file /usr/bin/cp
file /usr/bin/mv
file /usr/bin/gcc

这些命令本质上都是/usr/bin目录下的二进制文件,当我们输入命令时,系统实际上就是执行这些程序。


三、SCP命令:跨主机的文件传输

3.1 从本地拷贝到远程拷贝

前面的cp命令只能在本地文件系统中复制文件,但在实际工作中,我们经常需要把文件从一台Linux服务器传输到另一台。比如你有两台云服务器,想把A服务器上的配置文件复制到B服务器,怎么办?

SCP(Secure Copy Protocol)就是解决这个问题的利器。它基于SSH协议,可以在两台Linux主机之间安全地传输文件。

3.2 SCP基本语法

bash 复制代码
scp 源文件 用户名@目标主机:目标路径

3.3 实战演示

假设我们有两台机器:

  • 本地机器(CentOS 7)
  • 远程机器(Ubuntu),IP地址为192.168.1.100,用户名whb

要把本地的lesson5.tgz复制到远程机器的/home/whb/目录:

bash 复制代码
scp lesson5.tgz whb@192.168.1.100:/home/whb/

执行后会提示输入密码:

复制代码
whb@192.168.1.100's password: 

重要细节 :输入密码时,终端不会回显任何字符(连星号都没有),这是为了安全考虑。你只管输入,输完按回车即可。

3.4 几个关键细节

课堂上老师强调了几个容易踩坑的细节:

  1. 密码不回显:输入密码时屏幕没有任何反馈,这是正常现象,不是卡住了。

  2. 身份认证:SCP需要目标机器的用户名和密码进行认证。就像你去朋友家送东西,需要朋友给你钥匙(密码)才能进门。

  3. 首次连接确认:如果是第一次连接某台机器,SCP会询问是否确认连接:

    复制代码
    Are you sure you want to continue connecting (yes/no)?

    输入yes即可。

  4. 指定端口 :如果远程SSH服务不是默认的22端口,可以用-P选项指定:

    bash 复制代码
    scp -P 2222 lesson5.tgz whb@192.168.1.100:/home/whb/

3.5 SCP与cp的关系

老师用一句话总结了二者的关系:

cp是本地拷贝,SCP是远程拷贝。cp能干的,SCP都能干,只是SCP多了网络传输的能力。

记住这一点,以后遇到跨主机传输文件的场景,就能想到SCP这个工具。


四、BC命令:命令行下的计算器

4.1 为什么需要BC

在Linux命令行中,有时候我们需要做一些简单的数学计算。虽然可以用Python或者expr,但BC(Basic Calculator)是更轻量、更专业的选择。

4.2 BC的基本用法

直接输入bc进入交互模式:

bash 复制代码
$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

1+1
2

10*90
900

100*100/2/3
1666

Ctrl+D或输入quit退出。

4.3 配合管道使用

BC最强大的地方在于可以配合管道,接收其他命令的输出作为输入:

bash 复制代码
# 计算1到100的和
echo "1+2+3+4+5+6+7+8+9+10" | bc
# 输出: 55

# 更复杂的计算
echo "scale=2; 10/3" | bc
# 输出: 3.33

scale=2表示保留两位小数,这在需要精确计算的场景非常有用。

4.4 课堂小结

老师说得很实在:

"Linux下有计算器,知道就行了。真正需要复杂计算的时候,我们可能会用Python或者其他工具。但BC作为一个轻量级的命令行计算器,在某些场景下还是很方便的。"


五、系统信息查看:uname的妙用

5.1 面试常问的系统信息

在面试中,面试官经常会问一些系统相关的问题:

  • "你的计算机体系结构是什么?"
  • "如何查看Linux内核版本?"
  • "怎么确定你的Linux发行版?"

这些问题都可以用uname命令来回答。

5.2 uname常用选项

bash 复制代码
# 查看内核版本
uname -r
# 输出: 3.10.0-1160.el7.x86_64

# 查看所有信息
uname -a
# 输出: Linux localhost 3.10.0-1160.el7.x86_64 #1 SMP ... x86_64 GNU/Linux

# 查看体系结构
uname -m
# 输出: x86_64

5.3 解读版本号

3.10.0-1160.el7.x86_64为例:

  • 3:主版本号
  • 10:次版本号
  • 0:修订号
  • 1160:构建号
  • el7:Enterprise Linux 7(表示CentOS/RHEL 7)
  • x86_64:64位x86架构

5.4 查看发行版信息

如果想查看具体的Linux发行版(如CentOS、Ubuntu等),可以查看/etc/os-release文件:

bash 复制代码
cat /etc/os-release

输出示例(CentOS 7):

复制代码
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"

5.5 体系结构的概念

课堂上老师花了不少时间讲解"体系结构"这个概念。简单来说,体系结构就是CPU的架构类型

  • x86:Intel和AMD的32位处理器架构
  • x86_64(或amd64):64位扩展版本,现在最主流
  • ARM:移动设备常用架构(手机、平板)

老师举了一个生动的例子:

"2020年之前,世界上最牛的硬件公司是英特尔。你们学的计算机组成原理里的8086架构,就是英特尔的经典产品。后来智能手机时代,ARM架构崛起,现在手机99%都是ARM处理器。"

理解体系结构很重要,因为不同架构的软件是不兼容的。32位程序可以在64位系统上运行,但反过来不行。


六、效率倍增的快捷键

6.1 什么是热键

热键(Hotkey)就是键盘快捷键。老师开玩笑说:

"去你们宿舍看一眼键盘,我就知道你喜欢打什么游戏。WASD磨损严重的是FPS玩家,QWER磨损的是LOL玩家。"

在Linux命令行中,掌握快捷键同样能大幅提升效率。

6.2 必会的快捷键

1. Ctrl + C:终止当前程序

当程序卡住或运行异常时,无脑按Ctrl+C即可终止。

bash 复制代码
# 比如运行一个死循环
$ while true; do echo "haha"; done
haha
haha
haha
^C  # 按Ctrl+C终止
2. Ctrl + R:历史命令搜索

Linux会自动记录你输入过的命令(默认最近1000条)。当想不起某个命令时,按Ctrl+R搜索:

bash 复制代码
# 按Ctrl+R,然后输入关键字
(reverse-i-search)`tar': tar -czf lesson5.tgz lesson5

继续按Ctrl+R会匹配更早的历史命令。

3. Ctrl + D:退出登录

在命令行中按Ctrl+D,相当于输入exit,会退出当前登录会话。

4. Tab键:命令补全

这是提高效率的神器!

bash 复制代码
# 输入wh,按两次Tab
$ wh<Tab><Tab>
whatis    whereis   which     who       whoami

# 输入whoami的前几个字母,按Tab自动补全
$ who<Tab>
$ whoami

老师透露:

"你们看我打字这么快,其实很多时候就是按Tab补全的。输入长文件名时,Tab能帮你省下大量时间。"

6.3 历史命令的存储

Linux默认保存最近1000条历史命令,存储在内存中。可以通过history命令查看:

bash 复制代码
history | wc -l
# 输出: 1000

这个数量是可以配置的,但老师建议:

"记住多少条不重要,重要的是。经常用的命令,你一辈子都忘不掉;不用的命令,记了也没用。"


七、关机命令与服务器哲学

7.1 关机命令

Linux下的关机命令主要有:

bash 复制代码
# 立即关机
shutdown -h now

# 立即重启
shutdown -r now

# 10分钟后关机,并广播消息
shutdown -h +10 "System will shutdown in 10 minutes"

# 取消关机计划
shutdown -c

7.2 服务器永不关机

课堂上老师讲了一个重要的概念:服务器通常是7×24小时运行的

"你们半夜三更刷抖音、逛淘宝,为什么随时都能访问?因为互联网公司的服务器几乎永不关机。一台服务器从采购回来上电开始,直到报废,中间可能只重启过几次。"

这种设计理念叫做高可用性。对于生产环境的服务器,随意关机是严重事故。所以关机命令一般需要root权限,普通用户无法执行。

7.3 云服务器如何开机

有同学问了一个有趣的问题:"有关机命令,那有没有开机命令?"

老师的回答很精辟:

"开机命令?没有。命令需要在操作系统上运行,而操作系统需要先开机才能运行命令。这是一个先有鸡还是先有蛋的问题。"

对于云服务器,开机需要在云服务商的管理控制台操作(网页上点击"开机"按钮),或者通过物理电源按钮。这不是命令行能解决的问题。


八、Shell外壳:王婆说媒的故事

8.1 从命令到内核的距离

前面我们学了那么多命令,但有没有想过:当我们输入ls并回车后,到底发生了什么?

要理解这个问题,需要先了解Linux系统的层次结构。

8.2 广义与狭义的操作系统

课堂上老师区分了两个概念:

广义操作系统 = 操作系统内核 + 应用软件

  • 包括Windows系统、Office、浏览器、游戏等
  • 这是普通用户的认知

狭义操作系统 = 操作系统内核(Kernel)

  • 只包括最核心的部分
  • 这是程序员需要深入理解的概念

8.3 王婆说媒的故事

为了解释Shell的作用,老师讲了一个生动的故事:


故事开始

在一个村子里,小王是个程序员,天天和电脑打交道,不擅长和女生交流。到了适婚年龄,他看上了隔壁的如花姑娘,但不好意思直接表白。

于是小王找来了村里的媒婆------王婆。小王对王婆说:"我喜欢隔壁的如花,您能帮我说说吗?"

王婆听完,跑到如花家说:"如花啊,隔壁小王喜欢你,他爹是村长,他自己年薪几十万,要不要考虑交往一下?"

如花想了想,回复道:"王婆,对不起,我不喜欢小王,小时候他上课总说话,太吵了。"

王婆回来告诉小王:"如花说她配不上你,要不我给你介绍别人?"

故事分析

在这个故事中:

  • 小王 = Linux用户(你和我)
  • 王婆 = Shell外壳程序
  • 如花 = 操作系统内核
  • 说媒的过程 = 命令执行的过程

为什么需要王婆(Shell)?因为小王(用户)不擅长直接和如花(内核)打交道。Shell作为中间层,负责:

  1. 接收用户的命令
  2. 解析命令的含义
  3. 将命令传递给内核执行
  4. 把执行结果返回给用户

8.4 Shell的第二个作用:保护内核

故事继续:

小王不死心,过了几天又找王婆:"王婆,能不能再帮我去说说?"

王婆这次去如花家,发现如花已经有了男朋友小帅,两人正在吃饭。王婆连门都没进,直接回来告诉小王:"人家名花有主了,你别去了。"

这里体现了Shell的第二个重要作用------拦截非法请求,保护操作系统内核。如果用户的命令会损害系统,Shell可以直接拒绝,而不需要麻烦内核。

8.5 Shell的第三个作用:创建子进程

故事还没完:

小王又找到王婆:"王婆,我爹是村长,您就再帮我去一次吧。"

王婆心想:"这小子怎么这么执着?但我已经去过两次了,再去万一被拒绝,我王婆的面子往哪搁?"

于是王婆想了个办法------她成立了一家"王婆婚介公司",招了个实习生小张。王婆对小王说:"我现在年纪大了,嘴笨了,让我徒弟小张帮你去说吧。"

实习生小张去了如花家,结果...

  • 如果成功了,功劳算王婆的("我培养的人才")
  • 如果失败了,责任推给小张("年轻人没经验")
  • 如果小张被打了,王婆毫发无损

这就是Shell的第三个作用------创建子进程来执行命令。Shell本身不会亲自执行命令,而是创建子进程(实习生)去执行。这样即使命令执行出错导致进程崩溃,Shell本身也不会受影响,可以继续接收新的命令。

8.6 Shell与bash的关系

最后澄清一个概念:

  • Shell = 外壳程序的统称(所有命令行解释器的总称)
  • bash = Shell的一种具体实现(Bourne Again Shell)

就像"汽车"是一个统称,而"宝马"、"奔驰"是具体的品牌。Linux中常见的Shell有:

  • bash(最常用,CentOS/Ubuntu默认)
  • sh(原始的Bourne Shell)
  • zsh(功能强大的新贵)

查看当前使用的Shell:

bash 复制代码
echo $SHELL
# 输出: /bin/bash

九、Linux权限初识:root与普通用户

9.1 两类用户

Linux系统中的用户分为两大类:

  1. root用户(超级管理员)

    • 系统中只有一个
    • 几乎不受权限约束
    • 类似于Windows的Administrator
  2. 普通用户

    • 可以有多个
    • 权限受限
    • 只能操作自己的文件和目录

9.2 权限不足的亲身体验

bash 复制代码
# 切换到普通用户
su whb

# 尝试往系统目录拷贝文件
cp hello.txt /usr/bin/
# 报错: cp: cannot create regular file '/usr/bin/hello.txt': Permission denied

同样的操作,用root用户就能成功,用普通用户就会失败。这就是权限的力量。

9.3 切换到root用户

当普通用户需要执行高权限操作时,可以临时切换到root用户:

bash 复制代码
# 切换到root(需要输入root密码)
su -

# 或者保留当前环境变量
su root

输入密码后,命令行提示符会从$变成#,表示当前是root用户:

bash 复制代码
[whb@localhost ~]$ su -
Password: 
[root@localhost ~]# 

重要提醒:输入密码时不会有任何回显,直接输入后按回车即可。

9.4 为什么需要权限控制

权限控制是操作系统安全的核心机制。想象一下,如果所有用户都能随意修改系统文件:

  • 普通用户可以删除系统关键文件
  • 恶意程序可以破坏系统配置
  • 多用户环境下无法保护个人隐私

权限系统就像一道防火墙,确保每个用户只能做"分内的事"。

9.5 实际工作中的建议

"学习阶段建议先用root账号,因为root不受权限限制,不会因为权限问题卡壳。等掌握了基础知识,再切换到普通用户,学习权限管理。"


十、总结与展望

10.1 本节课的知识地图

通过这节课,我们完成了以下内容:

基础指令部分

  • ✅ tar命令:打包压缩的黄金公式(czf/xzf)
  • ✅ file命令:识别文件真实类型
  • ✅ SCP命令:跨主机安全传输文件
  • ✅ BC命令:命令行计算器
  • ✅ uname命令:查看系统和内核信息
  • ✅ 快捷键:Ctrl+C/R/D、Tab补全
  • ✅ shutdown命令:关机和重启

系统原理部分

  • ✅ Shell外壳:用户与内核之间的桥梁
  • ✅ 进程创建:子进程执行机制
  • ✅ 用户权限:root与普通用户的区别

10.2 学习方法论

"如果一个知识被你忘记了,说明这个知识不属于你,你也不需要它。真正重要的知识,你会天天用到,一辈子都忘不掉。"

所以不要死记硬背命令,而是要在实际工作中多用。用得多了,自然就记住了。

10.3 后续学习路线

基础指令部分到此告一段落。接下来我们将进入:

  • 开发工具篇:yum、vim、gcc/g++、Makefile、gdb
  • 系统编程篇:进程、线程、文件IO、网络编程
  • 项目实战:用所学知识完成真实项目

10.4 写在最后

Linux学习是一个循序渐进的过程。前面的40多个基础指令,就像是学武的基本功,看似枯燥,却是后续一切高级技巧的根基。当你熟练掌握了这些指令,你会发现,命令行操作比图形界面更高效、更强大。

"命令行是程序员的母语。当你能流畅地使用命令行时,你就真正入门了Linux。"

希望这篇文章能帮助你巩固课堂所学,在Linux学习的道路上更进一步。


附录:常用命令速查表

命令 用途 常用示例
tar 打包压缩 tar -czf file.tgz dir/
tar 解压解包 tar -xzf file.tgz
file 查看文件类型 file filename
scp 远程拷贝 scp file user@host:/path
bc 计算器 `echo "1+1"
uname 系统信息 uname -r, uname -a
shutdown 关机/重启 shutdown -h now
su 切换用户 su -
history 历史命令 `history

相关推荐
江畔何人初5 小时前
k8s中namespace与容器cgroup区别
linux·运维·云原生
DARLING Zero two♡5 小时前
白板协作总卡壳?Tldraw+cpolar 解锁跨地域实时共创
服务器
草莓熊Lotso5 小时前
远程控制软件实测!2026年1月远程软件从“夯”到“拉”全功能横评
运维·服务器·数据库·人工智能
次旅行的库5 小时前
不能将windows本地虚拟环境打包到实验室服务器
linux·windows·conda
沐雪架构师5 小时前
LangChain 1.0 记忆管理:短期与长期记忆详解
服务器·数据库·langchain
艾莉丝努力练剑5 小时前
【Linux进程控制(三)】实现自主Shell命令行解释器
linux·运维·服务器·c++·人工智能·安全·云原生
中二病码农不会遇见C++学姐5 小时前
文明6 Mod制作核心组件关系解密:从XML到游戏的奇幻漂流
java·运维·服务器·游戏
asaotomo5 小时前
一款 AI 驱动的新一代安全运维代理 —— DeepSentry(深哨)
运维·人工智能·安全·ai·go
?re?ta?rd?ed?5 小时前
计算机中的进程状态与linux中如何管理进程
linux·运维·服务器