【Linux入门】——基本指令
目录
一:认识操作系统
1.1:操作系统是什么?
1.2:操作系统 ——管理
1.3:操作系统——贯穿
二:Linux基本指令
2.1-指令学习(上篇)
2.1.1 => ls 指令
2.1.2 => pwd 指令
2.1.3 => cd指令
2.1.4 => mkdir指令
2.1.5 => touch 指令
2.1.6 => rm 指令
2.2-指令学习(中篇)
2.2.1 => man 指令
2.2.2 => cp 指令
2.2.3 => mv 指令
2.2.4 => cat 指令
2.2.5 => more 指令
2.2.6 => less 指令
2.2.7 => head 指令
2.2.8 => tail 指令
2.2.9 => alias 指令
2.2.10 => which 指令
2.2.11 => echo 指令
2.3-指令学习(下篇)
2.3.1 => date 指令
2.3.2 => cal 指令
2.3.3 => find 指令
2.3.4 => grep 指令
2.3.5 => zip/unzip 指令
2.3.6 => tar 指令
2.3.7 => bc 指令
2.3.8 => uname 指令
2.4-指令学习必备附加知识点
一:认识操作系统
1.1:操作系统是什么?
操作系统是一款做软硬件管理的软件。操作系统有两大功能:管理和贯穿
1.2:操作系统 ——管理
在操作系统之上,需要有各种不同的应用软件来满足用户不同的应用场景。 所以应用软件是在操作系统之上的。那么操作系统是如何发挥工作的呢?以某个项目为例,应用软件相当于用户,操作系统相当于某家公司的boss,当用户(应用软件)有了某个需求找到boss(操作系统),boss就会将该任务安排给下面的员工(硬件)来完成,但是boss并不会直接将各个任务分配给每一个员工(硬件),这就得需要一个项目经理(设备驱动)来管理这些所有员工和各个任务,boss将这个项目给项目经理(设备驱动),项目经理(设备驱动)将该项目得各个任务具体分配给每一个员工(硬件)。
通过上面的例子,我们可以得出操作系统的核心工作:通过对下管理好软硬件资源的手段,达到对上提供良好的稳定、快速、安全的操作/使用环境。
一个好的操作系统得衡量指标:稳定、快速、安全。
1.3:操作系统——贯穿
操作系统是通过对软件和硬件的管理,是它们相互关联起来。即我们在计算机上的所有行为都会转化为硬件行为。我们所有的软件行为全部都是要自顶向下贯穿计算机的软硬件结构,所以所有的软件行为都和操作系统直接或者间接相关。
二:Linux基本指令
2.1-指令学习(上篇)
- ls 指令:查看当前目录中的文件或文件夹
- pwd 指令:查看当前目录所处的位置
- mkdir 指令:相当于在我们的 Windows操作系统中,建立一个文件夹
- cd 指令:进入某一个文件夹的指令
- touch 指令:建立一个普通文件(非文件夹)的文件(文本文档/记事本/.c文件/...)
- rm 指令:用来删除文件的指令
在此之前,我们应该有一个概念:指令是可以携带选项的。
2.1.1 => ls 指令
语法: ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
- ls -l :显示更多的文件属性
- ls -a :显示该文件夹中的所有文件,包括隐藏文件
- ls -al :显示该文件夹中的所有文件(包括隐藏文件和其各自的属性)
- ls -d :将目录像文件一样显示,而不是显示其下的文件
- ls -F :在每个文件名后附上一个字符以说明该文件的类型(‘*’表示可执行的文件,'/'表示目录,'@'表示符号链接,...)
实例:
只输入 ls指令:将/home/alin 路径下的文件都显示出来。
输入 ls -l 选项(可以简写成 ll 指令)指令:显示该目录下的文件更多属性。
输入 ls -a 选项指令:显示该文件夹中的所有文件,包括隐藏文件(以 . / .. 开头的文件)。
输入 ls -al 选项(可以简写成 ll -a)指令:显示该文件夹中的所有文件(包括隐藏文件和其各自的属性)。
输入 ls -d 选项指令:将目录像文件一样显示,而不是显示其下的文件。【 . 说明当前所处的文件是一个隐藏文件】
输入 ls -F 选项指令:在每个文件名后附上一个字符以说明该文件的类型(‘*’表示可执行的文件,'/'表示目录,'@'表示符号链接,...)
附加知识点:
Linux中任何一个目录下都有两个隐藏文件( . / .. )
.. 表示当前路径的上级路径
. 表示当前路径(用法一:可以执行当前路径下的可执行程序)
.. / . 存在的意义就是帮用户定位当前目录下的每一个文件。
2.1.2 => pwd 指令
语法: pwd
功能:显示用户当前所在的目录
实例:
输入 pwd 指令,显示当前文件所在的目录
2.1.3 => cd指令
Linux的整个目录系统中,一定是一个多叉树的样子。
语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。
常用选项:
- cd .. :返回上级目录
- cd ~ :返回家目录
- cd - : 返回最近访问目录
- cd /home/alin/Linux :绝对路径
- cd ../Linux :相对路径
实例:
输入 cd .. 指令:返回上一级目录
输入 cd ~ 指令:返回家目录【进入Xshell 后默认进入的目录】
输入 cd - 指令:返回最近访问目录
绝对路径:我们把从/开始定位到指定位置,具有唯一性的路径,称为绝对路径。
相对路径:以当前所处的位置作为起始点,作为参照位置来进行特定文件的定位。 eg: ../lib/Test.cpp
输入 cd /home/alin/2024-Linux/ 绝对路径:
输入 cd ../linux---information-pavilion 相对路径:
2.1.4 => mkdir指令
语法:mkdir [选项] dirname...
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
- -p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
实例:
输入 mkdir test 指令,创建一个名为 test 的目录文件:
输入 mkdir -p d1/d2/d3,一次性创建多个目录文件:
2.1.5 => touch 指令
语法:touch [选项]... 文件...
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
不过当前我们只需知道 touch 指令可以创建一个普通文件(非目录文件)
实例:
输入 touch log.txt 指令:创建一个名为 log.txt 的普通文件
输入 touch te.c td.c 指令,创建两个普通文件(te.c 和 td.c):
2.1.6 => rm 指令
语法:rm [选项] 文件/目录
适用对象:所有使用者
功能:删除文件或目录
常用选项:
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
实例:
输入 rm 指令:删除普通文件
输入 rm -i 指令:删除前逐一询问确认
输入 rm -r 指令:删除目录文件
2.2-指令学习(中篇)
- man 指令:"字典"——查看各个指令的用法和说明
- cp 指令:拷贝文件或目录
- mv 指令:对文件进行重命名,剪切
- cat 指令:查看目标文件的内容(针对小文件)
- more 指令:获取大文本的内容
- less 指令:获取大文本的内容(功能比 more 指令更强)
- head 指令:提取文本前N行
- tail 指令:提取文本后N行
- alias 指令:起一个别名
- which 指令:查看指令所对应的路径
- echo 指令:将后面的字符串写入到显示器文件中(打印后面的字符串到屏幕上)
2.2.1 => man 指令
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是man。
语法: man [选项] 命令
功能:查看各个指令的用法和说明
实例:
输入 man ls 指令:查看 ls 指令的功能、用法
输入 man pwd 指令:查看 pwd 指令的功能、用法
输入 man man 指令:查看 man 指令的功能、用法
man 指令手册说明中,有9个接口(1.基本指令;2.系统调用;3.C语言接口/库函数;....)。
man + [ 序号手册接口 ] + 指令/函数
若无序号手册接口,则默认查找顺序:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
2.2.2 => cp 指令
语法:cp [选项] 源文件或目录 目标文件或目录
功能:复制文件或目录
常用选项:
- -f :强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i :覆盖文件之前先询问用户
- -r :递归处理,拷贝目录
实例:
拷贝普通文件:
输入 cp mytest.txt mytest_back.txt:拷贝到当前目录下,并且新目录以mytest_backup.txt命名
输入 cp mytest.txt ../log.txt 拷贝到上一级目录下,新目录以log.txt命名
拷贝目录文件:
输入 cp -r d1 tmp 指令:拷贝d1目录到当前路径下的 tmp目录中。
附加知识点:
tree 指令:将对应的目录文件之后的内容以树状形式显示出来。
安装 tree 指令:
- 登录 root 账号
- 输入:yum install -y tree
2.2.3 => mv 指令
语法:mv [选项] 源文件或目录 目标文件或目录
功能:剪切,重命名
常用选项:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
实例:
重命名:
输入 mv mytest_back.txt a_test.txt 指令:将 mytest_back.txt 文件重命名为a_test.txt 。
剪切:
输入 mv mytest.txt ./tmp 指令:将mytest.txt 文件剪切到 tmp 目录文件中。
重命名 + 剪切:
输入 mv mytest.txt ../b_test.txt 指令:将当前目录下的 mytest.txt 文件剪切到上一级目录下,并再重命名为 b_test.txt 。
附加知识点:
指令的本质就是文件——可执行程序,是直接安装到了系统的某种路径下。
通过编译处理 Test.c 文件生成了可执行程序 a.out 。所以直接输入 a.out 即可运行该 .c 文件代码。输入 ls 指令也可执行某个进程。即指令的本质就是可执行程序。
2.2.4 => cat 指令
语法:cat [选项][文件]
功能:查看目标文件的内容,用来查看小文件。
常用选项:
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
实例:
输入 cat test.txt 指令:将文件中的内容显示到屏幕上
输入 cat -n test.txt 指令:将输出的内容进行编号,也编号空行:
输入 cat -b test.txt 指令:将输出的内容进行编号,不编号空行:
输入 cat -s test.txt 指令:不输出多空行【多行压缩成为一行】
2.2.5 => more 指令
语法:more [选项][文件]
功能:more命令,功能类似 cat ,用来查看大文件,查看时只能依次向下翻找。
常用选项:
- -n 对输出的所有行编号
- q 退出more
实例:
先创建一个大文本(./a.out > a_test.txt):
输入 more a_test.txt 指令:开始查看大文档:
按 enter 键往下翻找,按 -q 键退出。
输入 more -500 a_test.txt 指令:到第500行时停下来:
2.2.6 => less 指令
- -n 对输出的所有行编号
- q 退出less
按 -q 键退出。
2.2.7 => head 指令
语法:head [参数]... [文件]...
功能:提取文本前N行
实例:
输入 head -3 a_test.txt 指令:提取 a_test.txt 文件前3行:
输入 head -10 a_test.txt 指令:提取 a_test.txt 文件前10行:
2.2.8 => tail 指令
语法:tail [参数]... [文件]...
功能:提取文本后N行
实例:
输入 tail -3 a_test.txt 指令:提取 a_test.txt 文件后3行:
输入 tail -10 a_test.txt 指令:提取 a_test.txt 文件后10行:
附加知识点(管道 | ):
使用示例:提取文本中第1001行至1020行的内容
管道:一种符号( | ),作用是:将左侧的内容输入到管道(管道文件)中,再将管道文件进行右侧指令的操作。其中,一个管道只能有一个出口和一个入口。
2.2.9 => alias 指令
功能:起别名
实例:alias a_cmd='ls -l -a -n'
给 ls -l -a -n 指令起一个别名 a_cmd
输入 alias a_cmd='' 命令:别名不用了,删除别名
2.2.10 => which 指令
功能:搜索。后跟指令,用来进行指令位置的搜索
实例:
输入 which ls 指令:搜索指令 ls 的存放位置:
输入 which pwd 指令:搜索指令 ls 的存放位置:
2.2.11 => echo 指令
功能:默认将指令后面跟的字符串写入到显示器文件中。
echo 指令后面跟字符串。
实例:
输入 echo "Hello Linux" 指令:把"Hello Linux" 该字符串写入到显示器文件中(打印"Hello Linux"到屏幕上)。
输出重定向【 > 】:
输入 echo "Hello Linux" > out.txt 指令:将原本写入到显示器文件中的 "Hello Linux" 写入到普通文件 out.txt 中。
但是,输出重定向 在向目标文件进行写入的时候,会覆盖写入:1.清空目标文件;2.写入新内容
继续输入 echo "Welcome to China" > out.txt 指令:
输出重定向两个作用:清空文件内容 and 创建普通文件
1.输入 > out.txt 指令:清空 out.txt 普通文件的内容
2.创建普通文件
不一定非得用touch指令创建普通文件,例如 echo "Hello Linux“ >> test.txt,若test.txt文件不存在,则会先创建一个名为test.txt的普通文件,再将"Hello Linux"写入。所以创建一个普通文件:>newtest.txt
追加重定向【 >> 】:
功能:在输出重定向时,不清空目标文件的原始内容
输入重定向【 < 】:
一般情况下,cat + 文件名。但是若cat后什么也没有,输入什么就打印什么(默认从输入设备[键盘文件]读取)。【退出时 ctrl + c】
而输入重定向:cat < out.txt 本来应该从键盘文件读取的,现在不从键盘中读取,而是从指定文件(out.txt)读取
2.3-指令学习(下篇)
- date 指令:与时间相关的指令,可查看时间
- cal 指令:被称作是日历指令,用来显示日历
- find 指令:搜索查找在任意路径下的文件、指令
- grep 指令:行文本过滤工具,按行进行过滤
- zip/unzip 指令:打包和压缩文件
- tar 指令:查看目标文件的内容
- bc 指令:Linux下的计算器
- uname 指令:查看操作系统内信息
2.3.1 => date 指令
%Y:查看年份 %m:查看月份 %d:查看日份 %H:查看时分 %M:查看分钟 %S:查看秒
语法:date +%Y...(查看年份等时间)
功能:与时间相关的指令,可查看时间
实例:
输入 date +%Y-%m-%d 指令:显示当前时间的年-月-日
输入 date +%Y-%m-%d_%H:%M:%S 指令:显示当前时间的年-月-日_时:分:秒
附加知识点(时间戳):
Unix时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
查看当前时间的时间戳:date +%s
将时间戳转化为我们所熟知的具体时间:
方法一:date -d @...
方法二:date +%Y-%m-%d_%H:%M:%S -d @...
2.3.2 => cal 指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
语法:cal [参数][月份][年份]
功能:用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份。
实例:
输入 cal 指令:将当前月份的日历显现出来
输入 cal -3 指令:将当前月份的前一个月份、当前月份、后一个月份共3个月的日历显示出来
输入 cal 2024 指令:将2024年所有的日历显示出来
2.3.3 => find 指令
语法:find 文件位置 -name 文件名
功能:用于在文件树(任意路径下)中查找文件,并作出相应的处理(可能访问磁盘),通常和 -name 配合使用。
实例:
输入 find ~ -name log.txt 命令:将家目录以下的所有名为 log.txt 的文件显示出来
输入 find /usr/bin/ -name ls 命令:在/usr/bin/路径下显示 ls 指令
2.3.4 => grep 指令
语法:grep [选项] 搜寻字符串 文件
功能:行文本过滤工具【按行进行过滤】
常用选项:
- -i :忽略大小写的不同,所以大小写视为相同
- -n :顺便输出行号
- -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
实例:
输入 grep '999' a_test.txt 命令:在a_test.txt文件中,按行进行匹配'999',将包含'999'的提取出来
输入 grep -n '999' a_test.txt 命令:在a_test.txt文件中,按行进行匹配'999',对提取的内容按行进行编号。
输入 grep -v '999' a_test.txt 命令:"reverse"逆置,在a_test.txt文件中,按行进行匹配'999',将不包含'999'的提取出来
...
输入 grep -i 'alin' log.txt 命令:在log.txt文件中,即可将匹配'alin'的文本行,又可匹配'ALIN'/‘Alin’...的文本行。
grep 指令后也可跟多个文件:
输入 grep 'alin' log.txt test.txt 命令:在 log.txt 和 test.txt 两个文件中查找字符串 'alin'
grep 指令在平时中最重要的用法是:寻找项目定位其入口
输入 grep -Rn 'int main()' /home/alin 命令:grep重点用法,grep后跟/home/alin(目录),用来寻找某一项目入口(R:代表目录进行递归)
2.3.5 => zip/unzip 指令
语法:zip 压缩文件.zip 目录或文件
功能:将目录或文件压缩成zip格式
常用选项:
- -r 递归处理,将指定目录下的所有文件和子目录一并处理
- -d 解压到指定路径
实例:
压缩 / 解压普通文件:
输入 zip test.zip test 命令:将 test 普通文件打包到当前目录中:
输入 unzip test.zip 命令,解压 test.zip 包文件到当前路径下:
压缩 / 解压目录文件:
输入 zip -r di.zip d1 log.txt 命令:将d1目录和log.txt普通文件一起压缩成一个名为d1.zip的压缩包到当前目录下
输入 unzip d1.zip 命令:将d1.zip压缩包解压到当前路径下
输入 unzip d1.zip -d ./tmp 命令:将d1.zip压缩包解压到当前路径下的tmp目录中(解压到指定目录下)
附加知识点:
打包和压缩:
打包:将所有的文件装在一起,使其不容易丢失。
压缩:将装在一起的文件,按照特定的算法将它们合理精细的进行摆放,达到减少存储空间的目的。
检测是否安装了 zip 指令:=> zip --help
安装 zip / unzip 指令:以root账号登录,登陆后 yum install -y zip unzip
2.3.6 => tar 指令
语法:tar [-cxtzjvf] 文件与目录 .... 参数
功能:打包与解压(使用主流)
常用选项:
- -c :建立一个压缩文件的参数指令(create 的意思);
- -x :解开一个压缩文件的参数指令!
- -t :查看 tarfile 里面的文件!
实例:
输入 tar czf code.tar.gz d1 log.txt 命令:将d1目录和log.txt普通文件一起打包成一个名为code.tgz的包文件。
输入 tar tzf code.tgz d1 log.txt 命令:预览打包的code.tgz文件。
输入 tar xzf code.tgz d1 log.txt 命令:解压code.tgz包文件(解压到当前目录)
输入 tar xzf code.tgz -C ./tmp 命令:解压code.tgz包文件(解压到tmp目录文件中)
附加知识点:
tgz <==> tar.gz,即 tgz 等同于 tar.gz( tar:打包后缀;gz:压缩后缀)
czf 创建打包文件【 c:create(创建) z:以zip算法方式来压缩 f:其后指定文档名称包的新命名】
tzf 预览打包文件
xzf 解压解包文件
2.3.7 => bc 指令
功能:Linux下的计算器,通常和管道匹配使用
实例:
输入 bc 指令:
输入 echo '12+45*34-90/24' | bc 命令:计算 12+45*34-90/24 的结果:
2.3.8 => uname 指令
语法:uname [选项]
功能:uname用来获取电脑和操作系统的相关信息
常用选项:
- -a 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
- -r 查看操作系统的体系结构
实例:
输入 uname -a 命令:
输入 uname -r 命令:
2.4-指令学习必备附加知识点
Xshell下的复制粘贴:复制(ctrl + insert);粘贴(shift + insert)
Linux下一切皆文件。
文件:文件的属性也是数据,只要是数据就必须要存储。所以,文件 = 文件内容 + 文件属性。Linux中对文件的操作就是对文件内容的操作 or 对文件属性的操作。
文件的类型:d:该文件是一个目录文件(以 d 开头);- :该文件是一个普通文件(以 - 开头)。
whoami 命令:显示当前用户是谁。
Ctrl + C :终止因为程序或者指令异常而导致我们无法进行指令输入。
在操作系统中,x86 就相当于该机器是一个 32位的机器,x86_64 就相当于该机器是一个64位的机器。
指令的运行原理:
alin:用户名 VM-20-6-centos:主机名 ~:当前目录 $:命令行提示符【用户名、主机名、当前目录、命令行提示符:统称为bash命令行】
输入指令的过程中,本质就是输入字符串
指令的本质,就是编译好的程序和脚本,并且一定会在系统的特定路径下存放。
我们所有的指令,最终都要在OS内部运行,但是OS使用难度系数比较高,用户不能直接的和OS打交道 => 就要使用到图形化界面 or 命令行解释器。
命令行解释器作用:将使用者的命令翻译给操作系统核心处理,同时将核心的处理结果翻译给使用者。
命令行解释器存在的意义:=>1. 进行命令解释;2.保护OS,对于用户的非法请求,直接拦截
总之:用户如果要与OS打交道,就必须要通过命令行解释器这一媒介。通过命令行解释器对OS进行操作。