Linux环境搭建与以及常见指令
希望文章能对你有所帮助,有不足的地方请在评论区留言指正,一起交流学习!
目录
3.2.9 cp指令(重要)含有echo的使用以及重定向和追加重定向的
3.2.11 cat指令(查看文件内容,不支持搜索)含有追加重定向 适合小文本
3.2.12 more指令(查看文件,只能向下查看,支持搜索)
3.2.16 who & whoami指令(查询登录终端的用户)
3.2.17 时间相关的指令(date指令,显示详细时间和时间戳以及转化)
3.2.18 find指令(find任意路径搜文件,whereis以及which只能搜索指令文件(特定路径))
3.2.21 tar指令(重要):打包/解包,不打开它,直接看内容
3.2.24 重要的几个热键[Tab],[ctrl]-c, [ctrl]-d
本章节主要包含Linux的云服务器的环境搭建,常见指令的学习;是一篇小白入门篇;其中涉及到的编程语言为C语言。
1.环境搭建
1.1 服务器的购买
博主白嫖的是腾讯云,目前只能白嫖一个月(腾讯云)腾讯云地址;之后可以购买一年的服务器,新人可以到七十多元,性价比是较高的。

对于个人练习而言,上述的轻量级服务器已经足够使用了。当然购买服务器之后,一定要设置服务器的密码。建议密码大小混写、数字、再加上特殊符号。IPV4后面就是你的公网IP,然后重新设置密码。

1.2 终端模拟器软件
我使用的XSHELL软件,对于个人完全免费,仅需要使用邮箱注册即可.安装过程如下:
浏览器搜索XSHELL,然后点击红框选中即可;也可以直接点击后面的点我直接进入。

安装即可,没有其他特殊的选项,找个盘安装进去后就可以了。
下载完成之后,可以先关闭除了填写邮件和名字的窗口,如实填写邮件按照软件上的操作步骤即可。
1.3 连接服务器
点击新建会话,


名称可以填写用途,以及服务器的公司。主机可以填写服务器的IP。然后打开会话。

然后打开会话;点你刚才创建的会话。
输入下述指令
ssh root@你的公网IP

root为超级用户,输入你的服务器密码就要可以了。
来链接成功
。
1.4 普通用户的创建删除(密码设置)

第一行为添加用户,后面为test_user 为用户名; passwd重置密码;输入的密码需要两次一致且不会显示出来;uesrdel为删除用户操作。

实际已经删除,可以采用下面的方式删除文件夹。
2.简单聊一下Linux
2.1 Linux的诞生
首台计算机名为埃尼阿克,于1946年2月14日诞生于美国的宾夕法尼亚大学,主要用作计算弹道轨,处于美苏冷战期间的军备竞赛。但是埃尼阿克的重达到了31吨。2.1
摩尔定律,摩尔定律说的是:当价格不变时,单个芯片上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。这意味着电子科技产物的小型化,计算机的小型化。
而计算机的初始研究用途是军事,因为时期为美苏争霸,政府也会推动,向研究机构以及高效投资成立专门的项目攻破技术,来推动技术的进步,但是政府的钱的也是有限的。
因此,会将部分技术进行下放,商人会购买新技术;然后根据技术孵化出一批产品,对于计算机来说就是 计算机+操作系统了。随着市场的扩大,也会产生大量的企业,而国家可以通过税收的方式筹集钱款,再投资产品研发更新。
在产品走向民用的过程中,诞生了优秀的公司,例如IBM(产品面向公司、高校、研究机构;拥有自己的操作系统(UNIX)和硬件)、苹果(产品面向个人,拥有自己的操作系统(MAC)和硬件)、微软(拥有自己的操作系统(Windows))和英特尔以及一些计算机制造商企业生产面向个人的电脑,性价比比较高。
Linux的诞生
在1991年赫尔辛基大学的雷纳斯托瓦兹使用了搭载UNIX的IBM的电脑;但是当时的电脑操作系统是收费的;因此,他就写了一份自己的操作系统,并且将其开源。Linux — Linux is not unix。在开源之后,便有很多的工程师、黑客无偿参与Linux的扩展和更新上。一直到现在,Linux一直在更新。
2.2 Linux的介绍
Linux开源的好处:免费、稳定、安全、快速、高效。被更多的专业人员使用。目前的安卓系统是由Google公司投资并研发的,其源于Linux内核。
应用场景:互联网公司的服务器后端、智能设备中的使用(手机、智能手表等等)、以及嵌入式场景。
Linux的版本分为内核以及商业化版本;很好区分,有自己logo的就是商业化版本,没有logo只有一串版本代号的就是Linux的内核。
Linux 内核是操作系统的核心组件,负责管理硬件资源(如 CPU、内存、存储设备等)、提供进程调度、文件系统管理、网络通信等底层功能。商业发行版本基于 Linux 内核,整合了各类开源软件(如桌面环境、应用程序、开发工具等)并经过商业化优化的完整操作系统。Centos就是使用的Linux的内核,目前的Centos采用7.6的版本。免费的企业级的服务器的操作系统,注重稳定和长期支持。类比的话就是Linux就是发动机(内核),centos就是整车。
2.3 操作系统是什么

上述是一张电脑的结构图;应用软件在操作系统指向,需要不同的软件来满足用户的不同的应用场景。而操作系统就是软硬件管理的平台。
操作系统的核心工作就是对下管理好软硬件资源,对上可以提供良好的操作、使用环境。
操作系统就是介于计算机硬件和应用程序之间的一层系统软件,是计算机系统的 “灵魂”。
一个好的操作系统的衡量的指标:稳定、高效、安全。
在计算机中所有的操作都会转换为硬件行为;
1.printf -> 向显示器中打印数据,
2.读取文件 -> 读取磁盘中的数据。
3.打网络游戏 -> 向网卡中写入数据;
所有的应用软件的操作都会自上而下贯穿计算机的软硬件结构;并且所有的软件操作行为都和操作系统有着间接或者直接的相关。
Windows操作系统具有命令行和图形化界面;而Linux是纯命令行的,当然也有图形化商用版本的;先有指令,再有的图形化界面,二者的本质是一样的;指令的操作更加贴近操作系统。先有键盘再有的鼠标(在GUI出现后广泛应用)。
3 指令
本章节会总结常见的指令,例如 ls、pwd、mkdir、cd
3.1 常见使用的5个指令基本的使用
在系统学习指令之前,大家不能一点儿也不会;因此我会列出一些常见的使用的指令,便于大家对新的指令进行测试理解。
ls:列出该目录下的所有子目录与文件;
pwd:显示当前文件目录;
mkdir:在当前目录下创建新的目录;
touch:在当前目录下创建新的文件;
cd:转移到对应目录下。
3.1.1 pwd指令
pwd:Print Working Directory(打印工作目录)的缩写,执行该命令会显示当前终端会话中所在的绝对路径 。
[root@VM-8-15-centos ~]#
连接后成功之后,输入pwd指令
![]()
解释
[root@VM-8-15-centos ~]#
上述为命令行提示符
root:当前登录的用户名,root是 Linux 系统的超级用户(管理员),拥有最高权限 。@:分隔符,无实际功能,用于连接用户名和主机名 。VM-8-15-centos:主机名,标识这台 Linux 机器在网络或本地的名称 。~:表示当前所在的工作目录,~是root用户家目录(/root)的简写 。#:命令提示符的结尾符号,#表示当前是以超级用户(root)身份登录;如果是普通用户,结尾符号通常是$
输出为
/root
表明当前为超级用户且在其家目录下;可以先先记住root就是超级用户的家目录;后续在普通用户处会作解释。
3.1.2 ls指令
ls 会显示当前工作目录(或指定目录)下的文件、文件夹(目录)名称

在之间的操作中,我先创建了一个test1的文件,在/root目录下,有test1的文件夹。
3.1.3 mkdir指令
基本语法
mkdir 目录名

pwd显示工作目录;ls当前目录中的文件;使用mkdir创建新的目录(文件夹);ls显示当前目录中的文件
3.1.4 cd指令
cd 是 (Change Directory ),用于切换工作目录的命令。
基本语法
cd [目标目录路径]
根据上述指令,root文件夹中有test1、test2两条指令;使用cd指令将工作目录切换到test1下

3.1.5 touch指令
在Linux中文件夹又叫做目录,不属于普通文件,而touch就是用来创建普通文件的,例如 .txt . c文件。
下面将在test1下创建 test.txt文件以及 hello.c文件。

3.1.6 复制、粘贴和全屏切换 切换用户 退出服务器
- 复制:
Ctrl + Shift + C - 粘贴:
Ctrl + Shift + D - 全屏:
alt + 回车 切换用户:su + 用户名回到root账号 ctrl + d退出服务器 :exit- 登录服务器:ssh 用户名@公网IP
- 使用历史命令 游戏的上下键,ctrl +R是搜索历史命令。
3.2 基本指令
在常用指令了解的情况下,我们开始深入的探讨更加深入的指令的使用方式,在这里的指令将会加上选项;指令的使用方式如下,
[指令] [选项] [目录或文件]
下面将从语法, 选项、功能上分析指令的使用。
3.2.1 ls指令(显示文件和目录的信息)
(1) 语法
ls [选项] [目录或文件]
可以将目录理解为文件夹;这里的文件就是指的是普通文件。
【目录或文件】指定要查看的目录路径(默认当前目录);
【选项】后续会介绍到。
(2)功能
对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。当指令后面没有加上目录或者文件的时候;默认显示当前目录中的文件和目录信息。
(3)选项
-a 列出目录下的所有文件(包含目录和和文件),包括以 . 开头的隐含文件。

上述指令中还是以之前的目录条件下为例;在目录中还会存在隐藏的文件,以点开头的文件称为隐藏文件。

上述指令中;创建了两个点开头的隐藏文件。
下面说一下 一个点 和 两个点
两个点:当前路径的上级路径

看红色的框中的就可以了;在cd dir1 之后的路径;然后再cd 两个点 返回上级路径。
一个点:当前路径了。存在的意义,帮助用户定位当前目录下的一个文件。因为不同文件下的名字是可以一样的。下面是它的使用方式。

我在hello.c中写入了一个可以打印hello的程序;使用cat指令显示文件内容;在使用gcc将文件hello.c编译生成 a.out;./a.out为执行这个文件。

一个点就是指的是当前的目录;ls 和ls . 等效;cd . 转到当前目录,目录的路径没有变化。
-l 列出文件的详细信息。

所对应的顺序
文件类型与权限 | 硬链接数 | 所有者 | 所属组 | 文件大小 | 最后修改时间 | 文件名
上述均为文件的属性,现阶段不用了解多少,只需要知道文件类型 以 d 开头的就是目录;以 - 开头的就是普通文件。当然文件属性也是数据,也要存储。
文件的操作 = 对文件内容的操作+对文件属性的操作。
-F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)

-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录

上述指令中的 ls -d 显示为当前目录的文件信息; 加上一个目录的名字就是可以显示目录文件属性了。
其余的指令
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
- -i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件 显示文件的inode
- -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
- -l 列出文件的详细信息。
- -n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
- -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表
- 示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
- -r 对目录反向排序。
- -t 以时间排序。
- -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
- -R 列出所有子目录下的文件。(递归)
- -1 一行只输出一个文件。
3.2.2 pwd指令(显示当前的路径)
(1)语法
pwd
直接使用即可
(2)功能
显示用户当前所在的目 。
![]()
3.2.3 cd指令(改变当前的路径)
/ 为路径分隔符 ,用于区分文件路径中的不同目录层级。在 Linux 中,路径采用 树形结构,/用于分隔目录和文件的层级关系。 /目录的根目录。看下面的指令的执行。
上述指令的执行程序,在执行完cd .. 返回上级目录的时候,还是在根目录的 / 下;无法在进行下一步了。在 Linux 的文件系统树形结构中,/root中的斜杠/代表根目录 ,/ 是整个文件系统的最顶层目录。所有的文件和目录都挂载在根目录之下 。系统中的其他所有文件和目录,不管是普通用户的家目录(如/home/user)、存放系统配置文件的/etc目录 ,还是用于存放临时文件的/tmp目录等,都是以根目录为起点,挂载在根目录下的不同位置,就如同树的枝干和枝叶从树根生长延伸出来一样。root是系统的超级管理员账号,也被称为 “根用户” 。
绝对路径和相对路径在cd指令的演示,用于定位一个文件。绝对路径
从根目录开始,根据文件所在的位置,逐级寻找。相对路径:相对路径的定义和使用方式就更加的宽泛一些;没有从根目录开始寻找的都是相对路径。
https://guanjia.qq.com/nabtsem/diversion/sogou
cd 目录名
- cd .. : 返回上级目录
- cd /home/litao/linux/ : 绝对路径
- cd ../day02/ : 相对路径
- cd ~:进入用户家目
- cd -:返回最近访问目录。
插入新的知识点 超级用户和普通用户:
超级用户的家目录就是 /root 所有普通用户家目录都会存放在/home 目录下面;例如/home/xiaohei 这种类型, 最后面的是普通用户的名称。
3.2.4 touch指令(创建普通文件)
(1)语法
touch [选项]... 文件...
…的意思可以有多个选项和文件。
(2)功能
(3)选项
- -a 或--time=atime或--time=access或--time=use只更改存取时间。
- -c 或--no-create 不建立任何文档。
- -d 使用指定的日期时间,而非现在的时间。
- -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
- -m 或--time=mtime或--time=modify 只更改变动时间。
- -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
- -t 使用指定的日期时间,而非现在的时间。
(4)使用
目前使用它创建文件即可。

创建多个文件

3.2.5 mkdir指令(重要)(创建目录文件,多级目录)
(1)语法
mkdir [选项] dirname...
(2)功能
(3)选项
意思就可以建立多级目录。
(4)使用

使用mkdir命令可以创建单级目录;加上选项可以创建多级目录。
3.2.6 rmdir指令(重要)(删除目录)
(1)语法
rm :remove
rmdir [-p][dirName]
(2)功能
(3)选项
(4)使用
删除单个目录

删除多级目录

3.2.7 rm指令(重要)包含通配符 * 的解释(删除文件和目录)
(1)语法
rm [-f-i-r-v][dirName/dir]
(2)功能:可以删除文件或目录,单独使用rm的时候,只删除文件,删除目录需要加上-f选项。可以删除非空目录。
(3)选项
- -f 即使文件属性为只读(即写保护),亦直接删除,强制删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件,递归删除
- -v 显示删除过程的详细信息
(4)使用
删除普通文件

删除目录文件以及多级目录 需要加上 -r 选项
原因:目录为递归式定义 整体为树状结构,因此需要递归删除 -r 表示递归
删除一个目录文件

删除多级目录 并且询问 -r -i 选项

删除多级目录,是从叶子节点开始删除的,看的出来就是递归式删除的。
在root超级用户下,如果只是使用rm会询问是否删除;但是加上-f选项是不会有询问的(即使加上 -i 选项也是没有询问的),(相当于强制删除)

ctrl+c 的作用 注释掉代码 ,不在运行代码;发送的2号信号给进程,终止当前前台进程。
通配符:使用 * 表示,它可以是一个字符也可以是一串字符串。删除一批文件,*可以代替数字,也可以代替txt字符串。
注意:删除的时候,要谨慎,Linux是没有回收站的,起始windows中的回收站是没有删除的文件,只是将文件挪到的回收站中,因为你在清理电脑的时候,回收站也是占内存空间的。
3.2.8 man指令(重要)(查询手册)
服务器上的man手册是精简版本的,可以重新装一下man手册
(1)语法 全称 manual (手册)
man [选项] 查找的内容
(2)功能
(3)选项
- -k 根据关键字搜索联机帮助,搜索包含目标关键词的所有手册页;
- num 只在第num章节找
- -a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
- -f 显示目标名称的简短描述(相当于
whatis命令)- -w仅显示手册页的路径,不打开内容
手册分为8章
- 是普通的命令;
- 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件);系统调用接口,上层软件用户访问操作系统的主要手段。
- 是库函数,如printf,fread,
- 是特殊文件,也就是/dev下的各种设备文件;
- 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义;
- 是给游戏留的,由各个游戏自己定义;
- 是附件还有一些变量,比如向environ这种全局变量在这里就有说明;
- 是系统管理用的命令,这些命令只能由root使用,如ifconfig。
上述的章节需要进行安装操作 对于centos来说,使用下面这一行就可以了
sudo yum install man-pages glibc-manual
(4)使用
查询指令进入手册之后:
1.q为退出手册选项
2./+单词 和文件的CTRL+F一样搜索某一个单词
注意:Man + 查找对象 按照顺序查找,先查 1 号 手册,再查找 2 . 3
找到一个之后不在寻找了。要想查找C语言的接口的 printf 需要 man 3 printf。如下
![]()
1 号手册

![]()
3 号手册

3.2.9 cp指令(重要)含有echo的使用以及重定向和追加重定向的 (复制指令)
(1)语法
copy复制
cp [选项] 源文件或目录(src) 目标文件或目录(dest)
- 源文件或目录:指定要复制的文件或目录,可以是单个文件,也可以是多个文件(通过空格分隔)。
- 目标文件或目录:指定复制后的文件或目录存放位置。
(2)功能 :用于备份数据、移动文件到其他位置,复制配置文件
(3)选项:
- -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i 或 --interactive 覆盖文件之前先询问用户
- -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
- -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理。
(4)使用
前期准备:echo 指令 将字符串原生的打印在对应的显示器。


echo -n 为去掉换行符号,echo默认为具有换行符号。但是printf指令是没有的
输出重定向符号 > 将本应该属于到屏幕文件字符串输入到 mytest.txt文件

cat 打印文件内容,> 重定向符号,echo将后面的字符串输入到mytest.txt中。
cat查看目标文件内容。

将mytest.txt文件复制并粘贴到当前目录下,形成备份mytest_backup.txt中.
注意:拷贝的文件和目标文件必须是不一样的。备份文件和源文件大小是一样的
拷贝到下级目录下

注意:
在复制的目标文件没有的情况下,会默认创建目标文件,然后复制内容进去。
在同级目录下,文件名不能是一样的。 假如文件名字可以相同的存在,无法表示文件在该目录下的唯一性。 如果文件名一样,文件将不具有唯一性,绝对路径找不到了。

可以复制粘贴到上级目录。
空目录的复制

多级目录以及包含普通文件
凡是(空目录也要带上 -r)拷贝目录需要带上-r选项;-r具有递归的意思,拷贝或者删除都需要递归;当然除了可以复制目录也可以复制目录中的普通文件。在不同级别的用户下,输出指令对应的操作也是不一样的。有的会询问你是否会覆盖文件(多次拷贝)。
![]()
-i 选项;将普通用户在复制文件的时候也可以有询问。上面是centos系统,下面是ubtuntu系统 + i 选项也没有询问。

删除可以使用通配符 * 可以代表 点 前面和后面的。
3.2.10 mv指令 (等于windows的剪切)
(1)语法
mv [选项] 源文件或目录 目标文件或目录
(2)功能
1. 视 mv 命令中第二个参数类型的不同(是目标文件还是目标目录), mv 命令将文件重命名或将其移至一个新的目录中。不会拷贝文件,只会重新命名文件。2. 当第二个参数类型是文件时, mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个, mv 命令将各参数指定的源文件均移至目标目录中。4. 相当于剪切并且重命名,在没有新的名字的情况下,默认使用原来的名字;所有行为都是剪切;剪切并重新命名在语义上,普通文件和目录是一样的。
(3)选项
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
(4)使用

修改文件的名字,重命名。

将文件移动到上一个级的目录;剪切复制粘贴到上一级目录。
目录的剪切重命名。统计目录 修改名字。

多级目录。

剪切目录;将test1同级目录复制到test1下。

加上-i的时候碰见同名的文件会询问,不加-i会直接覆盖已有文件。(注意)
3.2.11 cat指令(查看文件内容,不支持搜索)含有追加重定向 适合小文本
(1)语法
:cat [选项][文件]
(2)功能:查看目标文件的内容
(3)选项
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
(4)使用
重定向 > 本来写入显示屏文件的内容,重定向到其他的文件的如下

输出重定向:向目标文件进行写入的时候,覆盖写入;会清空文件中的内容;然后写入新的内容。

可以清空文件
追加重定向 >>
不清空文件的追加重定向 >> 在文件的结尾处输入
注意:重定向文件没有存在的时候,会直接创建新的文件
重新定向符号自带换行;但是Linux中的printf指令(1号手册)没有带换行符。

使用cat;cat什么也不加默认从键盘读取数据,然后显示到显示屏上。
本来是从键盘中读取数据的,但是重定向,将开始从文件中读取数据并显示。效果一样
cat ht1.txt
选项 -n;对文件内容的所有的行进行编号
选项 - b 不对空行进行编号。
选项 - s 对非空行进行编号 将多个连续的空行压缩到 一行
cat指令不是适合看大文本;适合看小文本;
cnt=1
while [ $cnt -le 10000 ]; do
echo "hello world $cnt "
((cnt++))
done > test2.txt
输出大文本;将10000行的 hello world输入到 ht3.txt;然后使用cat显示;发现屏幕无法提供足够的空间显示文件内容;而且不能查看;查看需要自己查找,人眼搜索。
3.2.12 more指令(查看文件,只能向下查看,支持搜索)
(1)语法
more [选项][文件]
(2)功能 :more命令,功能类似 cat
(3)选项
- -f 对输出的所有行编号
- q 退出显示文件内容
(4)使用

more ht3.txt 打开文件充满现在的屏幕;按enter向下翻;按q退出显示。支持搜索
输入 / +搜索的内容自己跳转和man手册类型


more -f - 80 ht3.txt 显示80行。 more -20 ht3.txt 显示20行。终端界面的最后一行为20/80

还是可以搜索的;Skipping表示跳过了很多的数据行。
3.2.13 less指令(支持下翻和上翻)(重要)
(1)语法
less [参数] 文件
(2)功能:less与more类似,但使用less可以随意浏览文件,而more仅能向下移动,却不能向上移动,而且less在查看之前不会加载整个文件。
(3)选项
- -i 忽略搜索时的大小写
- -N 显示每行的行号
- /字符串:向下搜索“字符串”的功能
- ?字符串:向上搜索“字符串”的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- N:反向重复前一个搜索(与 / 或 ? 有关)
- q:quit
说明
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,不能向前面翻, 只能往后面看但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
(4)使用

可以上下翻,查找大文本(项目和日志)。
3.2.14 head指令 (默认显示头部10行,需指定)
(1)语法
head [参数]... [文件]...
(2)功能:head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
(3)选项
- -n<行数> 显示的行数 n 不是选项
(4)使用

选项-20;显示20行。

3.2.15 tail指令(包含管道文件,和head类似)
(1)语法
tail[必要参数][选择参数][文件]
(2)功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
(3)选项
- -f 循环读取
- -n<行数> 显示行数
(4) 使用

默认显示倒数10行; -15 显示15行。
重点:管道文件,内存级文件,也就是管道文件的内容不用落盘(刷新到磁盘上)此类型文件由OS管理OS创建。类似于自来水管道,一边输入一边截取(多少不一定)。

截取文件ht3.txt20行到temp.txt;然后截取其中的倒数第12行。

相当于管道;流出一部分,然后进行节流一段。
统计行数 指令 wc 可以统计文件的行数、单词数、字节数、字符数。
3.2.16 who & whoami指令(查询登录终端的用户)
whoami
功能:仅输出当前终端的有效用户名(即当前执行该命令的用户身份),无任何其他参数、无多余输出,是最简洁的 “查当前用户” 命令。
使用:
# 实际登录用户是ubuntu,但用sudo提权后,有效用户变成root
$ whoami # 实际用户:ubuntu
ubuntu
$ sudo whoami # 有效用户:root
root
# 用su切换用户后,有效用户和实际用户一致
$ su zhangsan
$ whoami
zhangsan
$ sudo whoami # 无效用户:zhangsan
zhangsan is not in the sudoers file. # 普通用户在没有加入 sudo组,因此不能提升权限
who
本身就是 “谁” 的意思,核心作用是显示当前所有登录到系统的用户信息(包括你自己和其他远程 / 本地登录的用户)。

- 第一列:登录用户名(
zhangsan、lisi);- 第二列:登录终端(
pts/0、pts/1是远程终端,tty1、tty2是本地物理终端);- 第三列:登录时间;
- 第四列:登录来源(远程 IP)
3.2.17 时间相关的指令(date指令,显示详细时间和时间戳以及转化)
date [选项]... [+时间符号]
date +[时间类型]
- %H : 小时(00..23)
- %M : 分钟(00..59)
- %S : 秒(00..61)
- %X : 相当于 %H:%M:%S
- %d : 日 (01..31)
- %m : 月份 (01..12)
- %Y : 完整年份 (0000..9999)
- %F : 相当于 %Y-%m-%d

注意:输出的时间之间不能加入空格,bash 会认为是多个选项
(3)时间戳
时间戳,目的保证时间的统一,以格林威治时间为主。按照时差调整(东八区),1970年1月1日午夜0点到现在的秒数。
时间->时间戳:date +%s时间戳->时间:date -d@0

(4)修改时间
没有必要就不修改,而且普通用户无法做。
3.2.17 Cal指令(日历)
cal命令可以用来显示公历日历。
ubuntu 中没有此命令需要安装
sudo apt update
sudo apt install ncal
cal [参数][月份][年份]
- -3 显示系统前一个月,当前月,下一个月的月历
- -j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
- -y 显示当前年份的日历
(2)例子
cal -3 //显示当前月以及前后一个月的日历
cal 10 2026 //显示2026年 10月份
cal 2026 //显示全年日历
cal -j 2026 //显示全年日历,日期列显示 1~365/366,而非 1~31
3.2.18 find指令(find任意路径搜文件,whereis以及which只能搜索指令文件(特定路径))
| 工具 | 核心作用 | 查找范围 | 速度 | 典型场景 |
|---|---|---|---|---|
which |
找可执行命令的绝对路径 | $PATH 环境变量目录 | 最快 | 查命令安装在哪(如 which python) |
whereis |
找命令的二进制 / 手册 / 源码文件 | 系统预设目录(非全量) | 较快 | 查命令的完整相关文件(如手册) |
find |
全量查找任意文件 / 目录 | 指定路径(默认全系统) | 最慢 | 按名称 / 大小 / 时间 / 权限找文 |
which — 找可执行命令的 “快捷方式”
核心特点
- 只找 $PATH 环境变量 里的可执行文件(命令);
- 只返回第一个匹配的绝对路径;
- 非命令类文件(如普通文本)查不到。
不是指令不会搜索
whereis — 找命令的 “全套文件”
核心特点
- 查找范围:系统预设的命令目录(/bin、/usr/bin、/usr/share/man 等);
- 输出内容:二进制文件(-b)、手册页(-m)、源码文件(-s);
- 比
find快,比which信息全,但只针对系统命令。- 默认情况全部查找
find — 全量文件查找 “万能工具” whereis 和 which底层封装的是find指令
核心特点
- 查找范围:可指定任意路径(如
/全系统、/home家目录);- 查找条件:支持按名称、大小、时间、权限、属主等多维度筛选;
- 速度最慢,但功能最全(可执行后续操作,如删除、复制)。
- 默认为磁盘中的所有文件
在家目录的范围中 按照名字搜索文件
查某目录的时候报错 permission denied 权限约束
3.2.19 grep指令(文本搜索指令/行文本过滤工具)
-i :忽略大小写的不同,所以大小写视为相同-n :顺便输出行号-v :反向选择,亦即显示出没有 '搜寻字符串' 内容
du test2.txt
查看文件的大小 以kb为单位 -k 以kb为单位 -m 以MB为单位
查找包含9999的行,并且打印
带上行号
创建新的文件,使用过滤工具

-v选项,反向筛选

选型-i,忽略大小写

3.2.20 zip/unzip指令
(1)安装:sudo apt install zip unzip 普通用户转到超级用户 su +用户名字
zip file.zip file.txt # 把 file.txt 压缩成 file.zip
zip all.zip file1.txt file2.jpg dir1/ # 同时压缩文件和目录
zip -r docs.zip ./documents/ # 递归压缩 documents 目录
zip -r test.zip ./test/ 把 test 目录及所有子文件压缩成 test.zip
unzip的使用
unzip test.zip # 解压到当前目录
unzip test.zip -d /home/user/test/ # 解压到 /home/user/test/
unzip -l test.zip # 查看压缩包内容输出示例:
# Archive: test.zip
# Length Date Time Name
# --------- ---------- ----- ----
# 12 2026-03-20 11:00 file.txt
# 0 2026-03-20 11:01 dir1/
# --------- -------
# 12 2 files
- -r 递归处理,将指定目录下的所有文件和子目录一并处理
- 文件完整性
- 多个文件 → 打包成一个整体文件,传输 / 备份时不容易丢失或遗漏文件。
- 避免分散文件在拷贝、下载过程中出现缺失。
- 节省空间与传输时间
- 压缩后体积变小,可以减少存储占用空间,同时缩短下载 / 传输时间。
- 压缩 → 体积更小 → 下载更快、存储更省。
- 常用的打包压缩工具
zip/unzip
- 跨平台兼容(Windows/Mac/Linux 都能直接解压),适合通用场景。
- 用法:
zip -r 包名.zip 目录压缩,unzip 包名.zip解压。tar
- 核心是打包(把多个文件合成一个
.tar文件),常和gzip/bzip2等压缩算法结合使用。- 常见组合:
tar -zcvf 包名.tar.gz 目录:打包 + gzip 压缩(最常用)tar -jcvf 包名.tar.bz2 目录:打包 + bzip2 压缩(压缩比更高)- 解压:
tar -zxvf 包名.tar.gz/tar -jxvf 包名.tar.bz2
打包单个文件

打包多个文件

打包目录内容和多个文件 需要选项 -r 不然只是打包目录
查看压缩包内容
(6)解压
-d 选项 +路径 = 解压到指定的路径
3.2.21 tar指令(重要):打包/解包,不打开它,直接看内容
tar(tape archive)是 Linux 中最核心的文件打包 / 解包工具,支持打包、压缩、解压、预览等全流程操作。
| 参数 | 含义 | 常用组合 |
|---|---|---|
c |
创建新的打包文件(create) | czf(打包+压缩)/cf |
x |
解压文件(extract) | xzf(解压解包)/xf |
t |
查看压缩包内容(list) | tzf(查看压缩包)/tf |
z |
用 gzip 压缩 / 解压(.tgz/.tar.gz) | czf/xzf/tzf |
j |
用 bzip2 压缩 / 解压(.tar.bz2) | cjf/xjf/tjf |
f |
指定文件名(必须放在参数最后) | 所有组合都要加 |
v |
显示详细过程(verbose) | czvf/xzvf |
-C |
指定解压目录 | xzf xxx.tgz -C /tmp(解压到某个路径下) |
Linux 的压缩的包的格式有很多 .tgz .bz2,.tgz是tgr.gz的合成。
tar:纯打包(仅合并文件,不减小体积).tar.gz/.tgz:先打包(tar)再用 gzip 压缩(减小体积).tar.bz2:先打包(tar)再用 bzip2 压缩(压缩率更高)- windows下经常使用的zip文件,上述linux环境下使用的。
使用最多的方式
| 操作场景 | 命令格式 | 示例 |
|---|---|---|
| 打包 + gzip 压缩 | tar czf 目标文件名.tgz 源文件/目录 |
tar czf code.tgz d1 log.txt |
| 预览压缩包内容 | tar tzf 文件名.tgz |
tar tzf code.tgz |
| 解压 + 解包 | tar xzf 文件名.tgz |
tar xzf code.tgz |
| 指定解压路径 | tar xzf 文件名.tgz -C 目标路径 |
tar xzf code.tgz -C /tmp/test |
打包压缩文件和查看打包压缩文件
解压到某一个路径下,当前目录下创建tmp目录文件,然后解压。
3.2.22 bc指令(计算器)
bc命令可以进行浮点运算

3.2.23 uname –r指令
-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
-r 显示的内核版本号
3.2.24 重要的几个热键[Tab],[ctrl]-c, [ctrl]-d
- [Tab]按键---具有『命令补全』和『档案补齐』的功能
单一命令,例如比较好识别的shut 按一下Tab 自动补全为 shutdown,但是ls这种太多,不容易补全。
- [Ctrl]-c按键---让当前的程序『停掉』终止前台进程
- [Ctrl]-d按键---通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit(退出当前服务器)单次退出服务器,双次退出xsheel。
3.2.25 关机
shutdown [选项] 常见选项:
- -h : 将系统的服务停掉后,立即关机。
- -r : 在将系统的服务停掉之后就重新启动
- -t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
一半是centos的root账户或者ubtuntu的ubtuntu使用才可以普通用户默认没有直接执行关机 / 重启操作的权限,系统要求进行交互式身份验证(即需要 sudo 提权)。
# 关机
sudo shutdown -h now
# 重启
sudo shutdown -r now
普通用户提升权限后,还是不能操作的。
3.3 扩展
3.3.1 Linux指令是什么(可执行程序 ELF文件) 在linux的环境下
- 指令 = 可执行程序
- 指令本质上就是编译好的可执行文件(二进制程序或脚本),和你自己写C/C++/Python 代码编译出的程序没有区别。
- 例如:
ls对应/usr/bin/ls,pwd对应/usr/bin/pwd,这些文件都存放在系统特定路径下。
- 执行指令前要先 “找到它”,因此指令一定存在系统的某个地方
- Shell 会根据
$PATH环境变量定义的目录,去查找你输入的指令对应的可执行文件。 - 只有找到该文件,系统才能加载并执行指令;如果找不到,就会提示
command not found。
使用file指令(判断文件类型),文件类型和自己写的mykill一直。和普通文件一样想要执行就要找到程序。
- Shell 会根据

指令存在的位置

因此将我门缩写的程序的文件放入/usr/bin/目录下,我们程序也可以像指令一样运行,因为bash会从此路径下寻找指令。
3.3.2 Linux 核心思想:一切皆文件
- 万物皆文件
- 普通文件、目录、硬件设备(显示器、键盘)、甚至指令本身,在 Linux 中都被抽象成 “文件”。
- 它们都提供统一的读写接口(如
fread()/fwrite()),操作系统可以用相同的方式访问不同资源。只不过键盘文件只有写方法没有读方法。显示器反之。
- 指令也是文件
- 指令是存放在
/bin、/usr/bin等路径下的可执行文件,符合 “一切皆文件” 的设计。 - 你可以用
ls查看指令文件的属性,用file命令查看它的类型。
- 指令是存放在
总结
- 指令本质:可执行文件,存放在系统路径中,由 shell 查找并执行。
- 设计哲学:一切皆文件,用统一的文件接口访问所有资源,简化系统设计。
3.3.3 安装软件和卸载软件(删除和下载可执行程序)
一、核心本质:一切皆 “可执行程序”
- Linux 指令(如
ls、tar)、自己写的代码编译出的程序(如mykill)、带图形界面的软件,本质上都是可执行程序,没有底层区别。 - 它们的差异仅在于:是否带图形界面、是否依赖系统库、调用方式是命令行还是鼠标点击。
二、“安装软件” 的本质
把可执行程序(及依赖库 / 配置)放到系统能找到的路径下,让 Shell 或图形界面能定位并运行它。
Linux 下的做法
- 不推荐:直接放到
/usr/bin(系统自带指令的目录,容易污染系统)。- 推荐:
- 放到
/usr/local/bin(用户自定义软件的标准目录,默认在$PATH中)。- 放到
~/bin(用户家目录下的 bin 目录,需手动添加到$PATH)。
Windows 下的对应逻辑
- 把
.exe文件放到C:\Windows、C:\Program Files等目录,或把软件目录添加到系统PATH环境变量中。 - 图形界面的 “快捷方式”,本质就是指向
.exe的一个链接文件。
三、“卸载软件” 的本质
把可执行程序从系统路径中删除(同时清理关联的配置文件、库文件等)。
Linux 下的操作:直接删除相关文件程序。
Windows 下的对应逻辑
- 手动删除
.exe(等价于Linux的elf文件)及所在文件夹,或通过 “控制面板” 卸载(本质也是删除文件和注册表项)
总结:所有指令、软件、工具,本质都是可执行程序;安装就是 “把它放到系统能找到的路径”,卸载就是 “从路径中删掉它”;Windows 和 Linux 只是路径组织和启动方式不同,底层逻辑完全一致。
注意:不要污染系统目录
4.shell 命令以及运行原理

Linux Shell 与指令运行原理
解答「Linux 是什么、为什么需要 Shell、Shell 做了什么、指令到底是怎么运行的」问题
(1)、核心前提:Linux 的本质,以及为什么用户不能直接使用内核?
-
Linux 的严格定义:Linux 严格意义上指的是操作系统内核(Kernel),它是系统的核心,唯一能直接操作硬件、管理内存 / 进程 / 文件系统的底层程序。
-
为什么普通用户不能直接使用内核?
-
使用门槛极高:内核只提供极其底层的系统调用接口,没有任何友好的交互方式,普通用户完全无法直接使用。
-
安全风险不可控:用户直接操作内核,任何误操作、非法操作都可能直接导致系统崩溃、数据丢失,甚至破坏硬件。
-
-
解决方案:必须在用户和内核之间,加入一个专属的中间软件层—— 也就是 Shell(外壳程序),用户只能和这个中间层交互,由它和内核沟通
(2)、Shell 的技术定义与核心职责
1. 技术定义
Shell 就是命令行解释器(command Interpreter),是包裹在 Linux 内核外的「外壳程序」,也是用户和内核之间唯一的交互桥梁。我们常说的「命令行」,本质就是 Shell 程序提供的交互界面。
2. 两大核心职责
-
上行翻译:将用户输入的命令字符串,解析、翻译成内核能理解的系统调用,交给内核处理。
-
下行翻译:将内核执行后的结果、状态码,翻译成用户能看懂的内容,格式化后输出到终端。
3. 额外核心价值:系统安全守门人
Shell 会提前拦截用户的非法请求、越权操作、错误指令,不会把危险操作直接传递给内核,从根源上降低了用户操作导致系统崩溃的风险,变相保护了操作系统。
(3)、跨平台类比:Windows GUI 和 Linux Shell 本质完全一致
-
在 Windows 中,我们从来不会直接操作 Windows 内核,而是通过图形界面(GUI) 完成操作:双击 D 盘盘符进入目录、双击图标运行程序,本质是图形界面把我们的鼠标点击操作,翻译成了内核能理解的请求,再交给内核执行。
-
在 Linux 中,Shell 就等价于 Windows 的图形界面,唯一的区别只是交互方式:Windows 用鼠标点击,Linux 用命令行输入字符串。两者的核心作用完全一致 —— 都是用户和内核之间的交互中间层,做翻译和管控。
(4)、生活化比喻:理解角色关系
|
技术角色 |
比喻角色 |
核心职责 |
|---|---|---|
|
你(Linux 用户) |
害羞的程序员 |
有诉求,但只能和媒婆沟通,不能直接找小花 |
|
Shell(我们常用的 bash) |
王婆 / 媒婆 |
唯一的中间人,帮你传话、转达诉求,也帮你接收回复 |
|
Linux 内核 |
村头的小花 |
你最终的诉求对象,但你不能直接和她沟通,所有信息都必须通过媒婆转达 |
你在命令行输入指令,本质就是「你跟王婆说你的诉求」;终端输出结果,本质就是「王婆把小花的回复转达给你」。
(5)、命令行提示符与指令的本质
1. 命令行提示符拆解
以 lty@VM-0-10-ubuntu:~$ 为例,这是你和 Shell 交互的入口:
|
组成部分 |
含义 |
|---|---|
|
lty |
当前登录的用户名 |
| VM-0-10-ubuntu |
当前机器的主机名 |
|
|
当前所在工作目录( |
|
|
命令行提示符(普通用户为 |
核心认知:用户在命令行输入指令的过程,本质就是输入一串字符串,所有的解析、翻译、执行工作,都由 Shell 完成。
2. 指令的本质就是编译好的可执行程序 / 脚本,和我们自己写 C/C++ 代码编译出的程序,没有任何底层区别。
(6)、Linux 指令完整运行全流程
-
用户输入:在 bash 终端输入指令字符串(如
ls -l),按下回车,把你的诉求交给 Shell(王婆)。 -
Shell 解析与查找:Shell 拆分指令名和参数,在
$PATH环境变量的目录中,查找指令对应的可执行文件(如/usr/bin/ls)。 -
Shell 翻译请求:Shell 把用户的指令,翻译成 Linux 内核能识别的系统调用,转达给内核(小花)。
-
内核执行操作:内核接收请求,操作硬件、文件系统等底层资源,完成指令对应的实际工作。
-
内核返回结果:内核把执行后的结果数据、状态码,回传给 Shell(王婆)。
-
Shell 格式化输出:Shell 把内核返回的结果,整理成用户能看懂的格式,输出到终端,完成整个指令执行流程。
(7)、补充:常见的 Shell 实现(可以不看)
不同的 Shell 就像不同的媒婆,核心的「传话、翻译」功能完全一致,差异主要体现在交互体验、扩展能力上:
-
bash:绝大多数 Linux 发行版的默认 Shell,也就是我们常说的「王婆」,兼容性最好、使用最广泛。 -
sh:最基础、最精简的 Shell,兼容性极强,几乎所有 Linux 系统都自带。 -
zsh:功能最丰富、可定制性最强的 Shell,支持更强大的自动补全、插件扩展,常搭配 Oh My Zsh 使用。
总结
Linux 严格意义上是内核,用户无法直接使用,必须通过 Shell 这个中间层交互。
Shell 的本质是命令行解释器,核心作用是「双向翻译」和「安全管控」,等价于 Windows 的图形界面。
指令的完整执行,就是「用户→Shell 翻译→内核执行→Shell 翻译回用户」的全流程。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



























所有评论(0)