上一期我们已经介绍了什么是Linux、Linux的环境搭建、以及重新认识了操作系统,和操作系统的重要性!本期我们来介绍一下Linux下常见的一些指令~!
Linux指令如:whoami/who/ls/pwd/mkdir/touch等一系列常见的指令~!
目录
前言
本期内容介绍
whoami
who
pwd
ls
ls -l
ls -a
tree 目录
ls -al
ls -目录名
ls -d 目录名
clear
cd
cd ..和cd .
cd -
cd ~
stat 文件名
mkdir
mkdir -p
touch
rmdir
rm
rm -r
rm -rf
rm -rf *
man
cp
cp -rf [src] [dest]
mv
which
echo
echo "内容" > 文件
echo "内容" >> 文件
cat
cat -n 文件
cat -s 文件
cat -b 文件
tac
cat < 文件
nano
more
less
head
tail
date
cal
find
grep
grep -i str dou
grep -n str dou
编辑grep -v str dou
sort
uniq
zip/unzip
zip
tar
uname
几个热键
关机
whoami 查看当前登录服务器的用户是谁
当前登录服务器的用户是root账户
who 查看当前服务器的都有那些用户在登录
当前服务器只有我一个人用root账号登录~!
pwd 查看当前所在的目录
当前在/root目录下,OK再来看一个:
我多进了几个目录,然后pwd显示当前在/root/slearn/code的目录下
ls 查看当前目录下的文件信息(文件名)
当前/root有一个slearn目录.
ls -l 显示当前目录下的所有文件的详细属性(时间、大小等)
再来看一个:
其实ls -l 可以简写为 ll,效果和ls -l 一样
在介绍ls -a之前先得给大家介绍一下隐藏文件。
隐藏文件:隐藏文件是以 . 开头的文件。例如(windows为例):
这就说明了. 开头文件会默认隐藏起来~!你也可以把你的小秘密建个.开头的文件藏起来~!查看的时候点击右上角的 查看--->显示---->隐藏文件把隐藏项目勾选上就可查看了~!
ls -a 显示当前目录下所有的目录和文件信息包含隐藏文件(.开头的文件)
这是ls -a的效果,再来看看ls的效果:
很明显少了. 和 ..(这里在补充介绍一个点:Linux下. 表示当前路径 .. 表示上一级的路径)任何一个目录中都含有 . 和 .. 因为我们在数据结构二叉树的那里说过,树结构的典型例子就是目录结构,他是链式指针。这里 .和 .. 解释就是在每个节点中有一个指针.指向他自己还有一个指针..指向它的上一级~!
OK,画个图解释一下:
在这里我们还得介绍一下路径:谈到路径我们好像知道又好像说不清楚~!下面我来介绍一下什么是路径以及为什么要有路径~!
路径:有多个目录和分割符(/,win下是\)组成的一个字符串叫做路径!
为什么要有路径?路径唯一定位一个文件/目录
我们一般把根节点到叶子结点的路径叫做绝对路径!把当前节点开始路径叫做相对路径~!(这个在下面cd命令的时候会用)
这里我们可以介绍一条指令:tree 目录 可以树的形式显示当前目录的所有文件
ls -al / ls -a -l / ls -l -a /ls -la 这几个都是一样的~!作用是显示当前目录下的所有文件信息的更详细属性(包含隐藏文件)
这里也验证了一下上面说的~!
ls -目录名 显示当前目录中的内容
这里在补充一个小知识点:dr开头是目录,-r开头的是普通文件
看下面:
ls -d 目录名 查看当前目录(有时候得查看当前目录是就不能用ls 目录名了,要用ls -d)
OK,关于ls的命令暂且介绍这么多。后期有重要的或常用的再补充~!
clear 清屏,这里的清屏本质是把底下的加载到了最上面任然可以翻到
清屏前:
清屏后:
cd 切换目录(win下喜欢叫路径,linux下喜欢叫目录)
我们一开是在/root的目录下:我们来用一下cd 指令切换一下目录~!
我们前面讲过一个东西叫 . 和 .. 点表示当前路径, .. 表示上级路径我们可以借助这个进想上下级的切换~!
当前在/root/slearn/dir1的目录下,我们cd .还在当前的目录下,而cd ..就到了上级目录即/root/slearn。我们来验证一下:
果然和我们的预期一样,我们上面还说过,根目录的.和..都是指向自己的,我们来验证一下
果然和我们前面的一样,当退到根节点后就..和.都指向了自己~!
上面介绍了绝对路径和相对路径吗,我们没有演示过,下面我们来分别来一下:
绝对路径:
相对路径:
cd - 返回最近一次访问的目录(一般用于看源码/日志之间回切)
cd ~ 进入到当前用户的家目录(root用户的家目录是/root ,普通用户的家目录是/home/xxx)
什么是家目录?
家目录是用户个人的数据的文件夹,用来存储用户的个人文件、配置文件等,用户通过家目录可以方便管理和访问自己的数据~!
OK,我当前是root用户cd ~一下就应该是/root, 我们来看一下:
其实windows下也有家目录的概念:
stat 查看文件的属性列表
mkdir 在当前目录下创建一个目录
我当前的/root下是有一个目录slearn 的我们用上面介绍的tree slearn可以看到slearn下有两个目录,我们再来创建一个叫dir2的目录~!
果然多了一个目录,我们再来用tree来看看:
这里有小伙伴就问了,我要是想多创建几个目录呢?就是一层套一层的那种,是不是可以呢?验证一下:
没有此文件?其实这里和上面介绍过的一个东西有关系,目录本质是树结构,树的话如果它的父节点都不存在是不会建立子节点的~!如何处理呢?加上-p即可~!
mkdir -p 如果所建的目录中有些目录不存在则加上-p(parent)会默认自动创建好所有的,即一次创建多个目录~!
OK,我们用tree来看一下:
OK,创建成功~!目录创建好了如何创建文件呢?我们下面来介绍一下~!
touch 创建一个不存在文件(>也可以,下面介绍)
我们现在就在刚刚的d1下建立一个f.c的文件:
果然有了~!那我们要一次创建多个呢?
这还比上面的创建文件简单多了~!哈哈!
关于touch不只是创建文件的,它还可更改文件过目录的时间,这里就先不介绍了,后面遇到了我会单独补充的~!
OK,创建介绍完了,对应着必须有删除。不可能只有创建没有删除吧~!下面将介绍删除文件和目录的指令~!
rmdir 是删除空目录的,非空目录删不了!
我们这里刚刚建的d1/d2/d3其中d3就是一个空目录,我们把他用rmdir删除一下:
果然把d3给删除了~!我们再来删一下非空的,验证一下上面~!
是不是显示不是空的,不让删除~!那非空的如何删除呢?就是下面要介绍的~!
rm 既可以删除目录又可以删除文件(管你非不非空)
你直接用rm指令去删除目录的话人家是不会让你删的
原因就是目录结构本质是一颗多叉树,你如果要删除它的话他会先深度优先遍历它的节点往回删除~!得用递归!这里价格-r就好了~!
rm -r 先用递归(-r)深度优先遍历删除子节点最后删除根节点
是或不是就和上面介绍的一样啊~!和我们数据结构介绍的树销毁的一样~!这里他会问你是否要删除?y表示是,n表示不是~!如果你不想问了可以加上你-f
rm -rf 删除时不用逐一询问
OK问了验证效果,我在d1下再建个d2,d2里面创建一个f.c和t.cpp文件
我们现在来加上-f试一试:
这次他直接没问就删除了~!我们上面说了rm不仅可以删除目录还可以删除文件,下面我们就来演示一下删除文件:
文件果然被删除了~!这里他会问是因为我是root超级用户,在超级用户下删除所有的文件或目录都会询问,而在普通的账号下删除文件就不会问,会直接删除这样的坏处是会在成误删。为了解决这种问题加上i就行了。-i的作用是在删除时会询问你是否执行该操作~!
rm -rf * (rm -rf ./*)表示删除当前目录下的所有文件~!
我们想有时候一个文件里的所有文件都不想要了,一个一个删是不是有点烦,我们能不能一把梭哈掉呢》答案是可以的~!直接用rm -rf *即可~!
也可以从树的角度看:
OK,d1目录下的所有文件以及目录都被一把梭哈了~!
这里有个问题就是删除的时候会不会删除隐藏文件呢?OK,验证一下:
我们现在d1目录下什么都没有,我们先创建一个文件t.txt:
我们可以看到有t.txt的文件,以及.和..我们现在来删除一下:
删完之后,我们可以清楚地看到.和..这就说明了我们在进行删除的时候是默认不会把隐藏文件删掉的
man Linux的指令查找手册
man是查找Linux下的指令或函数等的一个查找手册!例如今天忘了ls这条指令如何用,我们就可以man ls
它的用法也比价简单,就是查找功能的一个类似于库。上面说到了一号手册是什么意思?其实在man 下有9个库,刚刚ls就在一号库下面,1号是指令的库!输入man man即可查看:
当然你可以指定查找的库:例如 man 3 printf:
建议:一般不建议去这里查看,因为现在的搜索引擎比较发达几乎所有绝大多数问题都能在网上找到!除非你不喜欢或看不惯网上的就可以在这里查看~!
cp 文件/目录 拷贝文件或目录
我们目前的d2目录下有一个文件file.txt我们现在把他拷贝到上级:
果然拷贝过来了,那拷贝一个目录呢?我们可以把当前的d2目录拷贝到dir2下:
cp -rf [src] [dest] 拷贝src目录到dest目录
来直观的看看树状图:
OK,拷贝过来了,我们考虑能不能把一个文件拷贝到当前目录下呢?试一下:
明显是不可以的!原因是在同一目录下不能有同名的文件或目录~!
如果没要强行拷贝到同级的话需要加个和被拷贝不一样的名字:
mv [选项] [src] [dest] mv指令常用来移动文件/目录或修改文件名/目录
当前已经没有了d2我们再来到dir1下看看:
的确移动过来了~!!!当然也可以移动文件~!我们可以把dir1下的file.txt移动到上级:
当然你如果说嫌弃这个名字你可以在移动的时候重新起一个名字(dest不存在的):我们再把file.txt拷贝回去并重命名为t.txt
which 查看当前的指令在哪里
ls就是在/usr/bin/ls的目录下!这里还有一个指令是alias它的作用是ls --color=auto(重命名)起别名为ls的!
echo "内容" stream 将内容写入到某个流当中(如果不指定则默认写入到屏幕)
关于流我们在C语言文件操作的时候介绍过,键盘是只有读取的流、屏幕是只有写入流~!而文件可输入又有输出!OK,那如果我们想改变这个流的写入方向该如何做了?其实只需要一个输出重定向操作符即可~!
> 是一个重定向操作符,用于将命令的输出重定向到指定的文件中,或者创建一个新的文件并将输出写入其中(当指定写入的文件不存在时就会创建)。它不是一个独立的指令或操作符。
如果文件存在直接写入,不存在则创建然后写入~!
输入重定向在每次写入的时候会清空文件的内容,在把最新的写入!说以也可用>f.txt(f.txt是已存在的文件)来清空文件
> 可以创建新文件
如何像一个文件中写入多个字段而每一次不清空呢?>>(追加重定向)就可以~!
>> 是重定向操作符之一,用于将命令的输出追加到指定文件的末尾,而不会覆盖文件中原有的内容。
这是不是就没有被清空~!我们想如果我们追加的这个文件压根就把不存在那他会创建追加呢还是报错?验证一下:
如果我们追加内容到一个不存在的文件的话,他会先创建这个文件然后追加~!
cat 默认是从键盘读取,写入到显示屏的~!
cat 查看目标文件(较小)的内容(重定向了cat的读取的流,从屏幕到文件)
其实我们上面也用到了~!
对文件的内容每行编号
不输出文件中的多行空行
我们在test.txt中加入3行空行,然后在加3行内容~!
先看当前文件:
结合刚刚介绍的-n此时就可看看:
对文件内容的诽谤空行进行编号
逆向输出文件内容
cat < 文件 / cat 文件 查看文件的内容 < 输入重定向 上面说过cat 是默认读取从键盘,而加上<后就会重定向到文件,默认不加也可以!
是Linux中的一个记事本
ctrl + x 退出
more 和cat的功能类似都是查看文件内容的,cat适合查看较小的文件内容较长的文件适合more或less来~!
我们先来创建一个大文件(10万行个hello):
此时用cat查看就会很不方便,他会一直刷屏导致大文件无法查看。那大文件如何查看呢?就是用more指令来查看~!
more 是从头开始查看文件,按回车键向下翻(上下键没有用不起作用)
输入q退出more
less 也是查看文件的一个指令,他和more、cat都是在不打开源文件的情况下查看文件内容的~!cat适合查看较小的文件,more适合看较大的文件但不支持上翻,less适合上下翻还能指定查看的行~!按q退出
head 是将文件的开头到标准输出中即到显示屏,默认显示前10行
head -n 文件 -n是指定从头开始到n行
指定显示前三行:
tail 用于显示指定文件末尾内容,默认后10行, tail -n 文件 -n是指定问倒数n行
默认后10行:
指定后4行:
思考:如果现在要提取80000---80010这10行呢?该怎么做?我目前能想到的有两种方法我要演示一下。
1、先提取前80010行,然后在提取80000-80010行/先提取后20001行在提取前10行。
这种方法虽然可以完成任务但毕竟生成临时文件,不太好~!
2、通过命令行管道
OK,第一种方式较为挫,第二种方式才是常用的~!OK,这里说到了管道,由于进程和通信、信号还没介绍,这里简单的画个图说一下!
上面的就是把前80010行提取出来的结果通过管道(|)当作提取后10行的输入而且都不用指定文件~!当然你也可以在套一些,比如逆向输出然后在提取过三行~!
date 指定格式显示时间
date +%Y:%m:%d %Y年份,%m月份,%d天,%F(相当于%Y年份,%m月份,%d天) %H小时,%M分,%S秒,%X(相当于%H小时,%M分,%S秒)
时间戳
我们以前不止一次的用过时间戳例如C语言猜数字游戏扫雷三子棋等都是用time获取一个时间戳返回的。什么是时间戳?
时间戳通常指的是 UNIX 时间戳(Unix timestamp),也称为 POSIX 时间。UNIX 时间戳是英国格林威治从 1970 年 1 月 1 日 00:00:00 协调世界时(UTC)开始计算的秒数。它是一个整数,表示当前时间与该参考点之间的秒数差值。
date +%s获取时间戳
无论是在生活中还是在计算机中,时间是很重重要的。时间对于程序员更重要,比如你开发的王者荣耀什么时间点召唤师死亡什么时候复活?等以及出问题了去查日志~!日志虽然还没有介绍(日志是记录系统、应用程序、网络活动或事件的一种记录形式)它的作用是辅助程序员去排查问题的~!日志可以是一般的时间也可以是时间戳,一般的时间你看起来舒服,时间戳计算机看起来舒服,假设你看到了一个时间戳如何转成一般的时间呢?
date -d @时间戳(将时间戳转换为一般时间)
这里我们看了一下0时间戳的一般日期是:1970年1月1日的8.00这里不是0.00的原因是每个国家的时区不一样,我们是东八区~!
用于查看日历等时间信息
cal 显示当前月的日历
cal -j 显示当前是当前年的第几天
cal -3 查看最近三个月的时间(当前月、前一月、后一月)
cal -y显示当前一年的日历(当然-y后面可以跟想查的年份)
这东西多好,赶紧给你奶奶装一台服务器,以后她看日历就方便多了~!哈哈!
find 可以在目录结构中以文件的名称、属性等进行查找文件~!由于很多没介绍直接就简单的介绍一个:按照文件名查找!
在/root/slearn的目录下以名的形式查找test.c的文件:
我这个是一个新的服务器没有写多少代码,他只有一个在/root/slearn/code/test.c这里他找的时候由于目录结构是树(多叉树),所以他会深度优先遍历进行查找~!
当然他也可以查指令
查找头文件
find和前面的which不一样的是which是更喜欢查指令,find是可以查指令也可以查文件,which是从根节点开始到深度和广度开始搜索,find会从指定目录开始深度遍历查找~!
grep [选项] 搜索的字符串 文件
作用:在文件中搜索字符串,将找到的行打印出来
这里从test.txt文件中匹配'A'他匹配到了两行~!这里匹配多个的原因是grep是默认采用一种贪心的策略~!能匹配几个就匹配几个~!grep是区分大小写的~!
忽略大小写 -i(ignore忽略)
顺便输出行号
反向选择,即显示出没有 '搜寻字符串' 内容的那一行
grep行文本过滤其实是很重要的:我来小小的举个栗子:
这一大堆的东西叫进程,我们要是想在这么多行中找sleep的该怎么处理呢?其实很简单:管道配合grep就可以~!
sort 文件 对文件进行排序,用ASCII值排列
sort -r 文件 对文件进行逆向排列(以ASCII)
uniq 文件 去除文件相邻的重复行,只保留一行
去重前:
去重后:
这个uniq并不是完全去重,而是去掉相邻的压缩为一行~!
uniq -u test.txt 是将文件中的唯一的显示出来,默认就是这个
uniq -d test.txt是将文件中的非唯一的显示出来~!
学了grep,sort,uniq我们就可以进行各种比较有用的操作~!例如多行去重:
统计出有多少行是不重复的~!排序后进行去重然后用wc -l进行统计(wc就是word count -l 就是line),这里是有17行不重复的~!
这是统计文件中的含有1的去重后的行数是3~!
在介绍打包和压缩之前我们先谈谈什么是打包压缩?为什么有打包压缩?
什么是打包压缩?
打包压缩是指将一个或多个文件或目录组合成一个单独的文件,并使用压缩算法将其压缩为较小的文件大小。
打包压缩的好处
1、防止文件的丢失
2、防止数据的丢失
3、网络传输时更节省空间和时间(当前机器空间都很大所以比较注重时间)
举个生活中的小栗子来解释一下,你平时玩的王者每次更新时下载快,更新慢。是因为你下载的是一个压缩包,更新的时候是在解压数据包。这样做的好处就是数据不容易丢~!
zip f.zip src 将源文件打包压缩成.zip的文件
unzip src.zip 将压缩文件进行解压(默认解压到当前目录,也可以指定-d目录)
我们把dir1目录打包压缩成dir1.zip并且移动到test目录下,然后解压看看效果:
OK,我们老看看是不是全部文件打包过来了?
事实是并没有把目录中的所有文件打包过来,原因是zip默认打包是不会把目录里面的内容拷贝过来的!如何解决这个问题呢?我们说过目录是树状的结构那打包的时候就得用递归遍历把每个内容都打包~!
tar [选项] dest.tgz src
-c :建立一个压缩文件的参数指令(create 的意思);-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件!-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!-C : 解压到指定目录
tar -czf dest.tgz src 压缩 tar -xzf dest.tgz 解压
tar的组合还是挺多的这是最简单的一种打包压缩的方式~!如果后面要其他的打包压缩方式直接去上搜索引擎查找即可~!
uname 用来获取电脑和操作系统的相关信息(可显示linux主机所用的操作系统的版本、硬件的名称等基本信息)
-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类 型,硬件平台类型,操作系统名称
uname -r 查看cpu架构
查看cpu
history 查看从开机到当前敲的所有指令
上下翻可到以前的指令
Tab 命令补全/档案补齐(当记不全时输入一个字母tab一下或两下)
ctrl +c 终止进程
ctrl + d 退出当前用户
语法 : shutdown [选项] ** 常见选项:**-h : 将系统的服务停掉后,立即关机。-r : 在将系统的服务停掉之后就重新启动-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
OK,本期内容就分享到这里,好兄弟我们下期再见~!