系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、Linux介绍
-
- [1.1 什么是Linux指令](#1.1 什么是Linux指令)
- 2.指令和界面的故事(可跳过)
- 二、Linux下基本指令
-
- [2.1 用户名和pwd](#2.1 用户名和pwd)
- [2.2 入门指令用法](#2.2 入门指令用法)
- [2.3 `ls`指令(列出文件)](#2.3
ls
指令(列出文件)) - [2.4 touch指令(建普通文件)和mkdir指令(建目录)](#2.4 touch指令(建普通文件)和mkdir指令(建目录))
- [2.5 pwd显示当前路径](#2.5 pwd显示当前路径)
- [2.6 cd指令(改变当前位置)和目录结构](#2.6 cd指令(改变当前位置)和目录结构)
- [2.7 rmdir(删除空目录)和rm(删除文件)](#2.7 rmdir(删除空目录)和rm(删除文件))
- [2.8 通配符`*`](#2.8 通配符
*
) - [2.9 nano编辑工具](#2.9 nano编辑工具)
- [2.10 cp(拷贝)指令](#2.10 cp(拷贝)指令)
- [2.11 mv指令(移动文件,重命名)](#2.11 mv指令(移动文件,重命名))
- [2.12 cat指令(查看文件内容)](#2.12 cat指令(查看文件内容))
- [2.13 echo(写入操作)和cat对比](#2.13 echo(写入操作)和cat对比)
-
- [输出重定向符号 `>`](#输出重定向符号
>
) - 输出追加重定向`>>`
- 输入重定向`<`
- [输出重定向符号 `>`](#输出重定向符号
- 使用more或less查看文件内容
- 2.14tac指令(反着查看)
- [2.15 head(从头查看)和 tail(从尾查看)指令](#2.15 head(从头查看)和 tail(从尾查看)指令)
- [2.16 date指令(显示时间)](#2.16 date指令(显示时间))
- [2.17 cal查看日历](#2.17 cal查看日历)
- [2.18 find(查找)指令](#2.18 find(查找)指令)
- [2.19 which(查找指令)指令](#2.19 which(查找指令)指令)
- grep指令(查找指定文件内容)
- zip和unzip指令(打包压缩)
- [2.20 tar指令:打包/解压](#2.20 tar指令:打包/解压)
- [2.21 bc指令(浮点运算)](#2.21 bc指令(浮点运算))
- [2.22 uname --r指令(查看系统内核)](#2.22 uname –r指令(查看系统内核))
- [2.23 关机shutdown](#2.23 关机shutdown)
- [2.24 以下命令作为扩展:](#2.24 以下命令作为扩展:)
- [三、重要的几个热键[Tab],[ctrl]-c, [ctrl]-d](#三、重要的几个热键[Tab],[ctrl]-c, [ctrl]-d)
前言
Linux操作系统是基于Unix操作系统的设计原则和理念,但是它是一个完全独立的操作系统。Linux操作系统被广泛用于服务器、个人电脑、移动设备和嵌入式系统等领域。Linux操作系统具有很多优点,比如稳定性、安全性、灵活性和免费使用 等。Linux操作系统也拥有一个庞大的社区,这个社区不断地为Linux系统添加新的功能和更新,使得Linux系统变得更加强大和适应各种不同的需求。Linux操作系统也支持各种不同的应用程序和工具,使得用户可以根据自己的需求来定制自己的系统。
一、Linux介绍
1.1 什么是Linux指令
Linux指令是在Linux操作系统中用于执行特定操作或任务的命令 。用户可以通过在终端窗口中输入 这些指令来控制和管理系统 ,例如创建、复制、移动和删除文件,查看系统信息,安装软件等 。Linux指令通常由一个命令名称和一些选项 或参数组成,用于指定命令应该如何执行 。Linux操作系统提供了许多内置的指令 ,同时用户也可以编写自己的自定义指令。
2.指令和界面的故事(可跳过)
指令,可能有的小伙伴是第一次听,但是它确实历史悠久,而且先于界面。
交互的需求
计算机被创造出来,是为了为人提供服务的。但是为了让计算机更好的为人服务,前提是人必须的和计算机交互起来。
类比一下另一种机器,那就是汽车,汽车是为了给人提供交通服务的,但是造出来之后,需要人通过某种方式去控制汽车,当然在汽车里,人和汽车的交互方式是通过方向盘,油门去交互的。
满足需求的第一阶段-指令
打字机的产生是在19-20世纪,反正是远远早于计算机发明的。所以我们要和新发明的计算机进行交互,人们先想到的是借鉴一下打字机的输入方式,来进行常规交互,慢慢演化下,就有了现在的键盘。既然早期交互硬件只有键盘,那么初期的交互方式,也变很顺理成章的是指令方式喽(又没有鼠标可以点)。
思考一下,为什么键盘现在的按键布局,是现在这个样子的呢?
1946年2月14,世界第一台计算机ENIAC问世,后因交互的需求,借鉴了打字机键盘,就有了初期的指令交互方式。
满足需求的第二阶段-界面
虽然我们还没有正式操作过,但是直觉告诉我们,指令这种方式,可能比较恶心。
一个问题想问问大家,PC时代,要点击界面,需要有鼠标点击(移动时代长大的土著,就不要和老夫杠了~~),那么,是先有鼠标,还是先有真正意义上的图形化界面呢?答案是,先有鼠标,先看看世界上第一个鼠标的样子吧。
这个大爷,出生于1925年1月30日,美国人道格拉斯·恩格尔巴特。这个样子的鼠标在1968年面世。
有了硬件设备的支持,同时指令用起来给一般用户的体验特别不好,再这样的需求促进下,乔布斯在1979年参观完施乐公司Xerox Alto(阿尔托)系统之后,迅速模仿并商业化出来了图形化界面交互式的方式,并诞生了世界上第一台商业图形化交互方式的电脑:lisa(当然,后面因为成本问题,效果并不理想,后来乔布斯又继续改良,就有了划时代产品Macintosh(麦金塔),也就是第一代mac笔记本,乔布斯就此封神)
与此同时,比尔盖茨在借鉴苹果lisa下,带着他的windows 1.0,后续在商业上迅速跟进。
乔布斯对苹果的定位是一家计算机科技公司,属于软硬件都做的那种,有自己的软件操作系统,也有自己的硬件设计方案,而且乔布斯是一个神一样的产品经理,所以对软硬件的整合能力,对用户的理解,都造就了一款符合事宜,又设计精良的电脑问世。mac 1问世之后,迅速走红。
可是,走向世界的是苹果,覆盖世界的却是微软。
比尔盖茨看到这样的苹果公司,走的早,产品还好。如何赢?差异化
比尔盖茨对微软的定义是一家软件公司,也就是只负责软件,可是计算机毕竟是一个软硬件结合的产物,于是微软便找了自己的硬件合作方intel(开始是IBM,大家理念有差异,散了)开始搞事。合作的最大好处是成本好控制,生产效率高,毕竟是产业分工的产物,慢慢的windows便席卷全球,就有了摆在我们面前的windows操作系统。
苹果的操作系统,一般都在苹果的计算机上跑微软的windows操作系统,什么品牌的电脑都能跑,像联想,dell,华为,鸿基,东芝等。细心的同学应该能发现,所有的这些品牌的计算机上面搭载的CPU都是Intel的X86
我们把时间先罗列一下:打字机产生1808年7月24日(衍生键盘)
1946年2月14,世界第一台计算机ENIAC问世
因为有交互的需求,计算机交互便借鉴打字机的键盘,慢慢演化,就有了键盘,所以当时人们对交互的想象只能是命令行
鼠标在1968年面世
1973年施乐公司Xerox Alto(阿尔托)系统,世界上第一个非商业图形化操作系统
1979年乔布斯和施乐进行利益交换,带团队参观施乐计算机研究中心,借鉴并商业化带UI的操作系统,后来衍生出来mac图形化界面(期间也有windwos的故事)
随后,微软推出了自己的桌面级操作系统windows 1.0
两家商业公司,两个老总,开始撕
就有了现在的PC界面交互方式
最后,有一个问题,就是为什么电子计算机,操作系统,各种电子设备会在1950~2000年这50年大量爆发。
这个问题有点远,有兴趣的老铁,可以在了解一下,当时的时代背景,你可能会有不一样的收获.
指令和界面交互
了解过历史之后,我们能理解,为何会有指令交互和界面交互这样的现象,但是还有两个问题的在讨论一下。
这两种方式,在操作系统层面有啥区别?
既然界面方式是发展的产物,为什么还要在学命令行?
区别:
区别这个问题,同学们现在比较难理解,目前也不打算谈。但是在功能定位上,是一样的,都是让用户进行和系统进行交互。也就是说,界面的点击操作,一般也有对应的命令与之对应? 是的
为什么要学命令行:
windows/苹果图形界面,是商业化的产物,也就是使用必须简单小白,才能有人用,so what?
严格意义上讲,我们必须要学一下Linux命令行。因为企业后端有大量的服务器,服务器上跑的全是Linux,Linux上部署的全是服务(比如:qq的服务,王者荣耀,LOL的服务等),无论是成本角度,还是资源效率角度,后台的服务器,都不会大量给你也安装一个界面让你来控制(界面也是要占系统资源的哦)但是服务器上面的服务需要维护,需要管理,也就衍生大量的对基本操作的需求。也就是企业的用人需求
Linux命令行是职业化的表现,想职业化/成大神,必须掌握Linux
Linux命令行,更接近系统原生,用的多了,面对很多系统现象,会更好理解。
严格意义上讲,光光学习Linux操作是远远不够的。
二、Linux下基本指令
2.1 用户名和pwd
首先要登录云服务器:ssh 用户名@你的云服务器的ip地址
。然后输入密码。
我们使用云服务器,通过xshell软件 来演示指令的操作,一个linux系统中可以有多个用户 ,而权限最大的用户就是根用户root,我们使用root用户来进行操作。在一进入xshell界面登录成功后,输入whoami
就可以知道自己的用户名 。
在Linux中我们把文件夹叫做目录。文件夹本身可以存很多的其他文件或者文件夹。所以也叫目录。
简单先介绍一下pwd
指令(Print Working Directory
)功能:显示当前工作目录。
所有要查看当前在哪个目录中就是用pwd
来查看,如图我们现在在root
目录中。
2.2 入门指令用法
指令 | 中文 | 全称 |
---|---|---|
pwd | 显示当前所在的目录 | Print Working Directory |
ls | 列出文件和目录 | List |
mkdir | 创建新目录 | Make Directory |
cd | 切换当前目录(进入到哪个目录) | Change Directory |
clear | 清除显示的内容 | clear |
在进入xshell时,默认的是根目录:
输入ls之后会显示当前目录的文件:
可能你输入ls什么都不会显示,这是因为当前的目录下什么都没有。
接下来我们简单介绍一下新建目录指令:mkdir
mkdir
的功能就是创建目录 :
一般蓝色 的是目录 (文件夹);白色或黑色的是普通文件。
要进入Clanguage目录则要使用到指令 cd:
clear清除显示:
2.3 ls
指令(列出文件)
语法:ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
- -a列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls --d 指定目录。
- -i 输出文件的 i 节点的索引信息。 如 ls --ai 指定文件。
- -k 以 k 字节的形式表示文件的大小。ls --alk 指定文件。
- -l 列出文件的详细信息。
- -t 以时间排序。
- -R 列出所有子目录下的文件。(递归)
这里我们进入Clanguage
目录中创建俩个目录
进行观察ls -l
:
只需要知道以d
开头的是目录,以-
开头的是普通文件。
文件 = 文件内容 + 文件属性
观察ls -a
:
ls -a
列出了当前目录下的所有文件,除了dir1
和dir2
之外还有一个点.
和俩个点..
,它们都是蓝色的,那么就是俩个目录。
现在暂时先了解指令关于目录下的文件我们之后做讲解。
能否将俩个功能结合呢?观察 ls -a -l
或 ls -al
、ls -la
:
ls -a -l
ls -l -a
:
ls -al
ls -la
:
结果是相同的。
所有选项是可以多选的。
使用-d
选项可以查看当前目录而不看其他文件.在之后观察目录的权限时使用。
ls -ld
2.4 touch指令(建普通文件)和mkdir指令(建目录)
touch
语法 :touch [选项]... 文件...
功能 :touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项:
- -a 或--time=atime或--time=access或--time=use只更改存取时间。
- -d 使用指定的日期时间,而非现在的时间。
- -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
- -m 或--time=mtime或--time=modify 只更改变动时间。
- -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
- -t 使用指定的日期时间,而非现在的时间。
mkdir
语法 :mkdir [选项] dirname...
功能 :在当前目录下创建一个名为 "dirname"的目录
常用选项:
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好
那些尚不存在的目录,即一次可以建立多个目录;
:
mkdir --p test/test1 : 递归建立多个目录
再Clanguage文件夹向下,创建了目录dir
,和普通文件test.txt
。使用ll -a
发现文件.
和..
,它们俩实际叫做隐藏文件。我们也可以创建以点开通的文件。
递归创建目录:
这里的tree
是可以查看当前目录下的所有文件。
使用yum install -y tree
可以安装tree
指令。这里知道怎么安装,具体是什么我们之后在做简介。
2.5 pwd显示当前路径
在Windows
下的目录路径:C:\Users\Public
,是使用\
作为路径分隔符.
在Linux
下的目录路径:/root/Clanguage
,是使用/
作为路径分隔符.
路径是用于定位文件的。像上面的路径叫做绝对路径
。
所以我们可以使用绝对路径
进行显示任意目录下的内容:
由目录结构可知。像/root/Clanguage
最开始的/
我们称为根目录 。
2.6 cd指令(改变当前位置)和目录结构
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语法 :cd 目录名
功能 :改变工作目录。将当前工作目录改变到指定的目录下。
举例:
cd
..
: 返回上级目录
cd
/home/litao/linux/ : 绝对路径
cd
../day02/
: 相对路径
cd
~:进入用户家目
cd
-:返回最近访问目录
从这看出实际上在之前的一个.
和俩个..
实际上就是个目录。
.
表示当前目录。
..
表示上级目录。
该多叉树的叶子节点一定是空目录或普通文件 。
任何一个父节点,可能存在多个子节点。
任何一个子节点一定只有一个父节点。
所以路径是唯一的,就可以用于定位文件。
同一目录下不能有同名文件。
任何一个目录都有.
和..
目录,就像每个节点都保存父节点的指针和自己的指针。
而根目录没有上一级,所以它的.
和 ..
都指向它自己。
cd ~
:回到当前用户的家目录。什么是用户的家目录?
在Windows中,桌面实际上就是一个文件夹,每一次开机都会进入桌面。
xxxx
表示你的用户名称,这里的路径就相当于家目录。windows
下可以新建很多用户。
每一个用户都会在Users
中 。
而在Linux
中也一样,root用户首次登录就会默认是家目录/root
。其他用户:/用户名
。
Linux的每一个用户(除root
)都在home
文件中:
每一个用户,默认登录时,在自己的家目录。
而 root
是超级管理员。
2.7 rmdir(删除空目录)和rm(删除文件)
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令。
语法 :rmdir [-p] [dirName]
适用对象 :具有当前目录操作权限的所有使用者
功能 :删除空目录
常用选项:
- -p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm命令可以同时删除文件或目录
语法 :rm [-f-i-r-v] [dirName/dir]
适用对象 :所有使用者
功能 :删除文件或目录
常用选项:
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
对于root用户,单独使用rm
会询问.
使用rm -rf
则不会询问:
rm -rf /
会将根目录的内容都删掉,导致系统崩了。不要这么干~~~
2.8 通配符*
ls搭配:
匹配的文件都找到,对于多目录,找到就返回。
rm
搭配:rm -rf *
删除当前目录下的所有文件。
*
匹配所有内容。
2.9 nano编辑工具
nano
是Linux
环境中的一个记事本。它可以直接打开文本或.c、.cpp
文件。
写完之后直接按CTRL + X
,再输入y或Y,按回车即可退出。
写完之后可以使用cat
进行查看。使用gcc -o 自己定的名字 test.c
即可编译。
./test
是因为要执行一个程序,得先找到该程序,这里使用相对路径可以找到,.
表示当前路径。
同样可以使用绝对路径:
如果没有nano
,可以进行安装:yum install -y nano
2.10 cp(拷贝)指令
语法 :cp [选项] 源文件或目录 目标文件或目录
功能 : 复制文件或目录
说明 : cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制 到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
常用选项:
- -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i 或 --interactive 覆盖文件之前先询问用户
- -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
- -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
下面将一个文件进行拷贝到当前目录:
将多个文件拷贝到一个目录:
新建文件dir
但是将目录拷贝到另一个目录是不行的,因为dir
中有别人。
所以递归式的拷贝:
再一次进行拷贝,则会询问是否要覆盖:
在普通用户下可以进行强制覆盖不用询问:cp -rf dir dir2
2.11 mv指令(移动文件,重命名)
- 剪切文件、目录
- 重命名
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法 : mv [选项] 源文件或目录 目标文件或目录
功能:
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
- 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
常用选项:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
如果剪切之后跟上文件名,如果没有就会重命名。
2.12 cat指令(查看文件内容)
语法 :cat [选项] [文件]
功能 : 查看目标文件的内容
常用选项:
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
基本用的是cat -n xxx
。
cat
后面什么都不跟。默认向当前窗口输入。如果要结束按ctrl + c
。
2.13 echo(写入操作)和cat对比
cat
一般用于查看小文件,查看大文件时会很麻烦。这里我们伪造一个大文件,不需要记住,我们只是举个例子:
cnt=1; while [ $cnt -le 10000 ]; do echo "$cnt";let cnt++; done > log.txt
这里要记住这一些小知识点 :
Linux下一切皆是文件。 键盘、显示器都看待为文件:如printf/cout
都是向显示器文件中进行写入.
scanf/cin
向键盘文件中读取数据。
echo
是Linux下的写入操作。echo "hello world"
是默认向显示器中写入hello world
:
输出重定向符号 >
那是否可以像文件中输入呢?
echo "hello world" > test.txt
:
再通过cat
进行查看文件test.txt
:
想这样echo
本来是向显示器写入 的,变成向文件写入 的操作我们叫做输出重定向。
>
符号就是 输出重定向符号.
该符号可以用于新建文件,如果文件不存在新建空文件,如果存在则会覆盖文件内容为空文件:
输出追加重定向>>
使用echo "" > 文件
的操作会将原来内容给覆盖:
这意味着输出重定向的每次写入,都是从头开始写入。所以> test.txt
也会将文件内容清空。
那么要向文件中追加内容呢?
echo "hello world" >> test.txt
:
使用>>
符号可以进行追加,注意中间不能有空格。
echo
命令默认后面根了换行符
,如果不想使用换行则可以使用printf
.
printf
也是命令,同样可以和echo
一样使用,俩者区别在于一个默认还换行、一个不默认:
输入重定向<
只输入cat
是向键盘文件中读取文件,然后输入到显示器文件中。那么能否从文件中读取?
cat < test.txt
:
<
输入重定向符号,将本来默认从键盘文件输入的,更改为从文件中输入。
回到我们创建大文件那一步。
使用 ctrl + r
可以匹配之前输入的命令。
使用more或less查看文件内容
紧接上面。
所以这里就是将内容输入到文件log.txt
中。使用cat
查看这样的文件时会刷屏,造成前面的内容都在上面。这样很不方便。
这时隆重介绍more
的命令,more log.txt
可以从头开始,输入q退出.
按住回车
会显示下面的内容。
但是more
不可以进行上翻。所以我们使用less
指令:
既可以上翻又可以下翻,同样按q退出,使用方向键上下查看,回车向下: less log.txt
查看文件中,可以输入/xxx
表示搜索文件内容,按 n
可以找到下一个搜索的内容。建议使用less
2.14tac指令(反着查看)
和cat
功能一样,只是反着输出。
2.15 head(从头查看)和 tail(从尾查看)指令
head -数字n 文件
可以查看从头开始指定行数的内容。n可以省略。
tail -数字n 文件
可以查看从尾开始指定行数的内容。n可以省略。
也可以通过输出重定向符号将指定行内容输出到一个文件中查看。
初步认识管道
但是这样太麻烦了,我们使用head -5020 log.txt | tail -20
:
|
该符号我们称之为管道,这里简单提一下。
管道 是将上一个命令的输出结果,给下一个命令执行:
由于Linux下一切皆是文件,所以在我们看来管道就是文件。所以上面的操作就像,把head原本向显示器写入的内容变为向管道写入,然后tail从管道里读文件。
管道可以像流水线一样:
可以依次试试。
2.16 date指令(显示时间)
date
指定格式显示时间: date +%Y:%m:%d
date
用法:date [OPTION]... [+FORMAT]
:
* %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
:
* date -s //设置当前时间,只有root权限才能设置,其他只能查看。
* date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
* date -s 01:01:01 //设置具体时间,不会对日期做更改
* date -s "01:01:01 2008-05-23″ //这样可以设置全部时间
* date -s "01:01:01 20080523″ //这样可以设置全部时间
* date -s "2008-05-23 01:01:01″ //这样可以设置全部时间
* date -s "20080523 01:01:01″ //这样可以设置全部时间
3.时间戳
时间->时间戳
- date +%s
时间戳->时间
- date +%Y:%m:%d -d @1599642565
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
2.17 cal查看日历
cal
可以查看指定年份的日历:
2.18 find(查找)指令
Linux下find命令在目录结构中搜索文件,并执行指定的操作。
Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS), find命令在该文件系统中同样有效,只你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
find 指定路劲 -name 文件名
可以进行在指定目录下查找文件。
find
有很多选项,使用man find
可以进行详细了解.一般常用的是:
find xxx -name xxx -o -name xxx ····
: -o 选项进行多个文件的查找。
2.19 which(查找指令)指令
which
也是一个查找命令,用于查找指令在哪个文件下。
是的没错,Linux下的指令实际上也是一个文件。
指令的本质
指令就是一个可执行程序,也就是文件。它内部的内容实际上就是程序员写的代码。
所以在调用时,我们也可以带路劲的调用:
既然是这样,那我们怎么写一个指令呢?接下来来实现一个指令打印hello world
:
使用nano
编辑c语言代码,ctrl+x
进行保存退出.进行编译查看是否有错误:
可执行程序编辑好了之后,直接使用mycmd
不行,而使用./mycmd
则可以,这说明常规的指令,Linux会在它默认的目录下去找,所以我们可以将mycmd
拷贝到 /bin
目录下:
进行删除也很简单:
上面的一系列的操作就叫安装软件。
所以我们在当前目录下执行程序时,要时用./
的方式进行执行。单单的文件名只会让Linux去它默认的目录下找。
注意可能有小伙伴,将代码编译为test
,test
是Linux下的一个命令。所以执行的时候或许什么都不会发生。
alias(重命名指令)指令
可能有小伙伴注意到,当我们使用which
查找指令时,有的指令是一个路径,而有的指令前面还会跟上一个 alias
:
alias
叫做别名的意思,实际上就是给指令下取别名。
例如:
查看 zhangsan
:
我们对比一下ls
和 ll
:
ls
使用时我们会发现它显示的内容是有颜色的,当时使用/bin/ls
则不会有颜色:
实际上ls
是被取了别名的:
那么在使用/bin/ls
时带上--color=auto
即可达到一样的效果:
所以ll
就是:
自己取别名的指令,会在下一次登录时取消掉。
grep指令(查找指定文件内容)
语法 : grep [选项] 搜寻字符串 文件
功能 : 在文件中搜索字符串,将找到的行打印出来
常用选项:
- -i :忽略大小写的不同,所以大小写视为相同
- -n :顺便输出行号
- -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
使用:
未来查看进程时,我们会使用到grep。
zip和unzip指令(打包压缩)
这俩个指令是,打包和压缩指令。打包和压缩可以减少网络传输的时间。
语法 : zip 压缩文件.zip 目录或文件
功能 : 将目录或文件压缩成zip格式
常用选项:
- -r 递 归处理,将指定目录下的所有文件和子目录一并处理
如果安装了zip
指令则会显示下面的内容:
没有安装执行下面的指令:
yum install -y zip unzip
在source
文件中我们创建如下文件:
返回到上级目录:
我们使用zip
指令将source
文件进行压缩:
此时我们就成功将source
进行打包,再将压缩包移动到target
再进行解压:
进行解压:
但是会发现解压的结果不是我们所预期的:
我们只打包了source目录,里面的文件并未进行打包。
实际上我们再打包时应该跟上 -r
选项:
结果符合我们的预期:
如果要解压到指定目录下,需要进行-d
选项:
传输文件到Windows中
我们可以在Linux中安装一个工具lrzsz
和Windows进行文件的传输:
yum remove -y lrzsz
工具中,sz
指令是发送文件到Windows中,将source进行打包:
打包的内容和Linux中的是一样的:
使用rz
可从Windows下传文件到Linux中,注意目录下不能有同名文件。
2.20 tar指令:打包/解压
tar [-cxtzjvf] 文件与目录 ...
参数 :
- -c :建立一个压缩文件的参数指令(create 的意思);
- -x :解开一个压缩文件的参数指令!
- -t :查看 tarfile 里面的文件!
- -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
- -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
- -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
- -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
- -C : 解压到指定目录
由于选项较多,所以提供方案即可:
使用 -c
创建文件, -z
是否需要压缩,-f
紧跟需要的名字 :
tar -czf source.tgz source
:
也可以tar -cvzf source.tgz source
显示打包的过程:
解压操作只需要改一个选项:
tar -xzf source.tgz
:
如果要解压到指定文件中:
tar -xzf source.tgz -C 指定路径
同样也可以使用sz
rz
就可以进行和Windows进行传输。
2.21 bc指令(浮点运算)
bc命令可以很方便的进行浮点运算
2.22 uname --r指令(查看系统内核)
语法 : uname [选项]
功能 : uname用来获取电脑和操作系统的相关信息。
补充说明 : uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:
- -a或--all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称.
2.23 关机shutdown
注意云服务器不要轻易关机。关了可以去买的地方进行启动。
语法 : shutdown [选项] 常见选项:
- -h : 将系统的服务停掉后,立即关机。
- -r : 在将系统的服务停掉之后就重新启动
- -t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
2.24 以下命令作为扩展:
◆ 安装和登录命令: login、 shutdown、 halt、 reboot、 install、 mount、 umount、 chsh、 exit、 last ;
◆ 文件处理命令: file、 mkdir、 grep、 dd、 find、 mv、 ls、 diff、 cat、 ln ;
◆ 系统管理相关命令: df、 top、 free、 quota、 at、 lp、 adduser(创建用户,在home文件下可查看用户)、 groupadd、 kill、 crontab ;
◆ 网络操作命令: ifconfig、 ip、 ping、 netstat、 telnet、 ftp、 route、 rlogin、 rcp、 finger、 mail、 nslookup ;
◆ 系统安全相关命令: passwd、 su、 umask、 chgrp、 chmod、 chown、 chattr、 sudo ps、 who ;
◆ 其它命令: tar、 unzip、 gunzip、 unarj、 mtools、 man、 unendcode、 uudecode。
三、重要的几个热键[Tab],[ctrl]-c, [ctrl]-d
[Tab]按键---具有『命令补全』和『档案补齐』的功能:
快速按俩下:
按一下补齐内容,可以是指令,也可以是路径。
[Ctrl]+c按键---让当前的程序『停掉』。
[Ctrl]+d按键---通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit。
[Ctrl]+r按键,可以用于查历史输入指令。
man
指令是一个在线的命令手册。可以查命令。
如果没有那个男人man
,使用下面的指令可以安装:
yum install -y man-pages
1 是基本指令
2 是系统调用
3 是c语言的函数 如man 3 printf
如果你有所收获,可以留下你的关注和点赞,谢谢你的观看!!!