欢迎光临
我们一直在努力

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

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


在这里插入图片描述

🎬 Doro在努力:个人主页

🔥 个人专栏: 《MySQL数据库基础语法》《数据结构》

⛺️严于律己,宽以待人

从命令行到操作系统内核,一文打通Linux基础指令的任督二脉


引言

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

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


目录

  • 一、tar命令:打包压缩的艺术
  • 二、file命令:洞察文件本质
  • 三、SCP命令:跨主机的文件传输
  • 四、BC命令:命令行下的计算器
  • 五、系统信息查看:uname的妙用
  • 六、效率倍增的快捷键
  • 七、关机命令与服务器哲学
  • 八、Shell外壳:王婆说媒的故事
  • 九、Linux权限初识:root与普通用户
  • 十、总结与展望

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

1.1 为什么需要tar

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

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

1.2 打包压缩的黄金公式

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

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

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

这里的选项含义如下:

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

在这里插入图片描述

1.3 实战演示

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

# 创建测试目录结构
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

解压时同样简单:

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

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

1.4 显示打包/解压过程

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

# 带详细输出的打包
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选项:

# 解压到/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命令实战

# 创建一个空文件
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命令可以帮助我们验证这一点:

# 查看常用命令的本质
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基本语法

scp 源文件 用户名@目标主机:目标路径

3.3 实战演示

假设我们有两台机器:

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

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

scp lesson5.tgz whb@192.168.1.100:/home/whb/

执行后会提示输入密码:

whb@192.168.1.100's password:

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

3.4 几个关键细节

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

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

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

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

    Are you sure you want to continue connecting (yes/no)?

    输入yes即可。

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

    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进入交互模式:

    $ 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最强大的地方在于可以配合管道,接收其他命令的输出作为输入:

    # 计算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常用选项

    # 查看内核版本
    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文件:

    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即可终止。

    # 比如运行一个死循环
    $ while true; do echo "haha"; done
    haha
    haha
    haha
    ^C # 按Ctrl+C终止

    2. Ctrl + R:历史命令搜索

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

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

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

    3. Ctrl + D:退出登录

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

    4. Tab键:命令补全

    这是提高效率的神器!

    # 输入wh,按两次Tab
    $ wh<Tab><Tab>
    whatis whereis which who whoami

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

    老师透露:

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

    6.3 历史命令的存储

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

    history | wc -l
    # 输出: 1000

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

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


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

    7.1 关机命令

    Linux下的关机命令主要有:

    # 立即关机
    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作为中间层,负责:

  • 接收用户的命令
  • 解析命令的含义
  • 将命令传递给内核执行
  • 把执行结果返回给用户
  • 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:

    echo $SHELL
    # 输出: /bin/bash


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

    9.1 两类用户

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

  • root用户(超级管理员)

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

    • 可以有多个
    • 权限受限
    • 只能操作自己的文件和目录
  • 在这里插入图片描述

    9.2 权限不足的亲身体验

    # 切换到普通用户
    su whb

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

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

    9.3 切换到root用户

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

    # 切换到root(需要输入root密码)
    su

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

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

    [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" | bc
    uname 系统信息 uname -r, uname -a
    shutdown 关机/重启 shutdown -h now
    su 切换用户 su –
    history 历史命令 history | grep keyword

    赞(0)
    未经允许不得转载:171主机测评 » 【Linux04】 Linux基础指令完结与Linux权限初识(一)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址