Linux的基本指令
1 .Linux的指令究竟是在做什么?
我们在linux中执行的指令就是类似于我们在小学的时候学习的Windows中的一些简单的操作,例如建一个文件夹之类的
pwd:表示的意思是显示当前的路径(有了这个路径,我就可以知道mkdir创建的文件夹是在哪里了)
mkdir:表示在当前的路径下创建一个目录(也就是我们在Windows中的(文件夹)的意思)->所以就是创建一个文件夹的意思(此时就可以想到我们在使用电脑的时候,什么时候会去创建一个文件夹呢?)
cd:表示进入当前的目录(并且这个目录不能是文本文件)
touch:创建指定的普通文件
ls:显示当前目录下的所有文件夹和文本文件,也就是可以用来显示我刚刚用mkdir创建出来的文件夹或者显示我用touch创建出来的指定文件(包括目录,普通文本文件……)
但是以上的这些指令还有很多的细节要处理,所以我们一个一个进行解刨
指令细节处理
1.1(ls)
什么是当前路径:就是用户现在所处的当前的那个目录下,就叫做那个当前路径
命令 — 命令选项
ls — l
shutdown-s-t 120
shutdown-a
文件=文件+属性 => ls->显示文件名 ls-l -> 显示文件名和对应的属性,l 就是表示以list的形式,显示文件的更多的属性
并且我们在更改文件的内容的时候->相对应的我们就会更改文件的属性(内存大小)
以 . 开头的就是一个隐藏文件,然后ls-l -a 就是查看我的隐藏文件
ls-l = ll
常用的选项
ls-a =>列出目录下的所有文件,包括以 . 开头的隐藏文件
ls-d =>将目录像文件一样显示,而不是显示其下的文件。如 ls-d指定文件
ls-i =>输出文件的i结点的索引信息。如 ls-ai指定文件
ls-k =>以k字节的形式表示文件的大小。ls-alk指定文件
ls-l =>列出文件的详细信息
ls-n =>用数字的UID,GID代替名称(就是表示IP的意思,也就是我们在大学中的学号的意思)
ls-F =>在每个文件名后附上一个字符来说明这个文件的类型,"*“表示可执行的普通文件;”/“表示目录;”@“表示符号链接;”|“表示FIFOs;”="表示套接字
ls-r =>对目录进行反向排序
ls-t =>以时间对文件中的内容就行排序
ls-s =>在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
ls-R =>列出所有子目录下的文件(递归)
ls-1 =>一行只输出一个文件
1.2(pwd)(较简单)
登录之后都先执行一下这个pwd指令,确认一下自己的路径是那个
1.3(cd)英文意思就是:改变目录(使用时也可以这样子理解)
隐藏目录、隐藏文件(这两个是不一样的),当然隐藏目录在Windows中也就是表示隐藏文件夹的意思
" \ "->这个斜杠表示的是Windows中的路径分隔符(也就是文件夹路径分隔符)
" / "->这个表示的是Linux中的路径分隔符(但是当仅有 "/"的时候,此时的斜杠表示的意思是Linux下的根目录)
路径具有唯一性
并且我们在Linux中有两种寻找对应文件的方式:一种是通过绝对路径,一种是通过相对路径
例如:cd/home/whb/107/lesson1/test.c ->绝对路径
/home/whb/107/lesson2 ->当前路径
ls …/lesson1/test.c ->相对路径 此时表示的就是我在lesson2的路径下,…表示上一路径,也就是107目录下,所以就可以通过107目录找107目录中的lesson1和lesson1中的test.c
所以相对于绝对路径,相对路径更加的方便,所以我们以后大部分用的都是相对路径(并且相对的就是当前路径而已)
并且cd指令和我的路径结合使用,我就可以通过相对路径的方式,切换到任意的我想要的目录,然后获取目录中的具体内容
所以cd+路径=任意
cd的快捷操作
1.cd~:表示直接进入当前用户的家目录(就是自己目录的意思) => 并且在我们的Windows操作系统电脑中就是(用户)文件夹
whoami
pwd ->就是用来找我现在所处的路径
2.cd-:表示回到最近上一次所处的路径
3.Tab热键的使用(当我们不知道此时的目录中有什么其它目录的时候,我们就只要Tab就可以知道此时的目录中的其它所有的目录了,这样是非常的方便的)
并且当我忘记了我想要使用的命令指令的时候,我也可以使用我的Tab按键,它就会把所有的命令指令给我显示出来,我就可以选择出我要使用的那个命令键了
1.4(touch)
疯狂刷屏,使用Ctrl+C停止
并且此时当我们的Linux上没有一些指令的时候,就可以使用(yum install -y )去下载一个
例如:下载我的tree命令:yum install -y tree
touch指令的使用:
touch filename
表示:在当前的目录,也就是当前的路径下,创建出一个普通的文本文件
当然也可以:
touch …/filename
表示在上级目录下,创建一个普通的文本文件
1.5 代码的编写
我们先不使用vim,因为vim的操作难度比较大
我们使用一个叫 nano(记事本)就可以了
1.6 打印文件
cat test.c
表示:打印test.c的意思
1.7 编译文件
gcc test.c (不带命令选项)
表示:编译文件的意思
此时我的Linux中有了这条指令,我就可以形成一个 a.out 的新文件—> 就是一个可执行文件的意思
1.8 执行文件
就是利用刚刚形成的a.out文件
例: ./a.out ->这个就是执行a.out的指令 ->此时就可以执行我的代码了,我就可以得到我想要的代码程序
正规意思:. 表示当前路径,a.out表示可执行文件 => 和起来就是执行这个当前的可执行文件
1.9(stat)
表示:获取一个文本文件的所有属性
命令行:stat test.c
表示:获取test.c的所有属性(如:大小,文件名,时间,还有一大推看不懂的)
并且此时的这个时间一共有三种(简写:ACM时间)
如何创建一串路径(区别于一个一个的创建)
mkdir -p
表示:创建一串路径的指令
例:mkdir -p a1/a2/a3/a4/a5/a6
2.1 删除空目录
rmdir
表示:删除我不需要的文件夹(目录)
*注意:只能删除空文件夹(就是不可以删有文件或者文件夹的文件夹)
2.2 rmdir的老大rm
表示:删除我想删除的任何东西
指令表示:rm filename
注意:这个就是涉及到了权限的问题
并且注意:删普通文件和空文件夹时不需要特殊处理,但是删除非空的文件夹时,就要进行处理
删除非空文件夹:rm -r a1
表示递归删除a1文件夹(这样我就可以把a1这个文件夹给删掉了)
rm -rf ->表示强制删除 或者是 rm -f(区别是需不需要递归删除)
rm -rf ./ ->表示删除当前路径下的所有目录
2.3(man)
就是用来查看一系列的其它指令的具体信息和Linux中的一系列的系统调用的接口
例如:man man ->就是表示查找我的man手册(有了这个手册我就可以找到我需要使用的一系列的系统接口)
并且此时的printf在我们的Linux中也是一个指令,可以供我们直接使用
例如:printf “%d,%s\n” 10 “hello world” => 指令格式
man 1 printf
man 2 fork
man 3 printf
表示:使用man去查找对应的指令或者调用接口的对应的手册(几号手册 1->1号手册 2->2号手册)
2.4(cp)
拷贝指令
功能:复制源文件或者目录
复制源文件:直接cp + filename 就行
复制目录:cp -r + 目录
并且如果是把这个拷贝到上一目录:
则:
cp filename …
cp -r 目录 …
表示:将这个文件或者文件夹复制(到)上一目录中
当然这个更删除也是一样的道理的,也有强制性复制
cp -rf + 目录 => 表示强制性的复制目录(可以直接进行目录的覆盖)
2.5(mv)
剪切指令和重命名指令
剪切:
mv sre(文件或目录) dst(一定是一个目录)
mv lesson1 我的C语言
表示:将lesson目录剪切到我的C语言目录
重命名:
mv filename newfilename
表示:将原来的文件剪切(到)一个新的文件中(但是此时的这个文件是并不存在的,所以就等于是重命名了)
剪切重命名同时:
指令:mv filename.txt …/newfilename.txt
表示:将我的文件给剪切到上一目录的新文件之中
2.6 上述是一系列的对目录进行改变,现在是对文件中的内容进行操作
(cat)的详解
cat->对文本内容进行打印
echo “aaa bbb ccc” ->此时就会直接把 aaa bbb ccc 给输出在我的显示器上
类似于我们的cat打印文本中的内容-> 指令:cat test.txt
但是此时这里涉及一个新的概念:
输出重定向的概念:符号 => “>”
例:echo “aaa bbb ccc” > file.txt 意思:把我的 aaa bbb ccc 给存到我的file.txt文件中
此时的这个行为就叫做输出重定项,并且当我的目标文件不存在是,系统会自己创建一个文件来存放相关的信息
并把本来应该显示在显示器上的内容,写入到文件中---------输出重定项(覆盖式写入)
并且输出重定项是一种覆盖式写入
所以此时我的 file.txt 中就有了相应的内容
此时我就可以使用我的cat去进行打印了->指令:cat file.txt
并且此时我们学习了输出重定项,我们现在就相比较的来学习一下什么是追加重定项
追加重定项:
不断的向目标文件新增内容
指令:echo “aaa bbb ccc” >> file.txt
符号: “>>”
区别:一个是覆盖式的写入,一个是追加保留式的写入
并且还涉及一个输入重定项
输入重定项:
符号: “<”
指令:cat file.txt => cat < file.txt 过程有区别,但是答案是一样的
cat < file.txt 意思:把file.txt文件中的内容给读取到cat中,然后再进行打印->充分体现出了输入重定项的效果
相关的命令选项:
cat -b ->对非空输出行编号
cat -n ->对输出的所有行进行编号
cat -s ->不输出多行空行(只输出一行空行)
2.7(wc)
功能:统计我的文件中的内容
指令:wc file.txt
涉及命令选项则是:
wc -l file.txt -> 表示(只看)文件内容的(行数)
2.8
more / less
回车向下 / 上下键上下
功能:查看一个文件中的内容时使用(推荐使用less,less方便好用)
指令:more file.txt
less file.txt
前提是我的文件中有非常多的行
所以此时就涉及了一个循环指令
cnt=0; while [$cnt -le 1000 ]; do echo “hello bit $cnt”; let cnt++;done > file.txt
命令选项:
很多,可以不要求掌握,但是我们要知道怎么退出(q)表示退出
2.9 (head/tail)
功能:显示开头某个数量的文字区块
功能:显示结尾某个数量的文字区块
head就是用来显示开头至标准输出中(标准输出:屏幕)
tail就是用来显示结尾至标准输出中(标准输入:键盘)
指令:head file.txt (行数多就是10行,行数少就是有多少行就多少行)
指令:tail file.txt
特定行数:
指令:hand -n5 file.txt 或者 hand -5 file.txt
3.(|)
命令行管道
表示:用来连接两条指令,传输指令间的数据
指令:cat file.txt | wc -l
指令表示:(前提是可以把这个管道"|"看成是一个文件)将cat打印的file.txt中的文件内容给放到此时的这个管道(文件)中
然后传给wc -l,然后wc -l就可以直接进行打印了,就不需要写成wc -l file.txt
使用场景:当我想从一个有1000行的数据中拿到第500到520行的数据
方法一:先 head -520 file.txt ->意思:先拿出1000行数据中的前520行数据
然后head -520 file.txt > tmp.txt ->意思:将我的520行的数据给重定项到一个新创建的tmp.txt文件之中
最后tail -20 tmp.txt ->意思:打印tmp.txt文件中的最后20行数据
方法二:cat file.txt | head -520 | tail -20 ->意思:将file.txt中的文件打印后传到"|“中,然后head打印”|“中的前520行,然后再把520行传到第二个”|“中,然后tail再打印”|"中的后20行
3.1(时间指令)
(date)
但是这样的是没有格式的
格式化指令:date +%Y-%m-%d/%H:%M:%S
时间戳的转化:date +%Y-%m-%d/%H:%M:%S -d @时间戳 ->这样的指令就可以在Linux上把我对应的时间戳转化为对应的北京时间了
(cal)
显示日历
3.2(sort)
升序排序:sort file.txt
降序排序:sort -r file.txt
3.3(功能更加复杂的指令)
(find)重要
功能:在目录中搜索文件,并执行指定的操作(遍历查找)
Linux中的find指令有很多的查找条件,功能强大。由于find具有强大的功能,所以它的选项也很多
指令:find file.txt
涉及其它的一系列搜索指令:
which
whereis ->可以帮我们寻找一些文档和程序之类的
场景:涉及一个新的指令
(alias)
功能:起别名
例:alias myls=‘ls -a -l -i -n’
此时我运行myls指令就是在运行ls -a -l -i -n
所以当我过了一段时间后又想知道myls是什么意思,此时我就可以通过 which myls 指令来获得
3.4(grep)
功能:查找关键字
指令:grep ‘关键字’ file.txt
表示:在file.txt文件自中去找我的关键字,然后把找到的含有关键字的信息都给打印出来
区别于:
反向匹配,查找出关键字以外的所有数据
指令:grep -v ‘关键字’ file.txt
当然也可以和我的管道给结合在一起使用
指令:cat file.txt | grep “关键字” (双引号、单引号都行)
小技巧:清空一个文件
指令:>file.txt
表示:输出重定项的应用,将左边的空复制到file.txt文件中->这样就表示清空
命令选项:
grep -i ‘关键字’ file.txt ->忽略大小写
geep -ivn ‘关键字’ file.txt ->连起来理解->表示忽略大小写,然后反向匹配,然后把匹配上的数据给定行号
3.5 (uniq)
功能:去重,配合上sort使用
指令:sort file.txt | uniq
表示:把排好序的file.txt文件中的重复文件去掉
指令:sort file.txt | uniq | wc -l
表示:将去重后的文件进行单独行数的统计
3.6 (top)
功能:打开Linux中的资源任务管理器
指令小总结:sort(文本行排序)/uniq(相邻内容去重)/wc(统计行数)/which(查看指令路径)/whereis(搜索包含关键字的文档)/top(任务管理器)/alias(起别名)
3.7(zip/tar)
zip
功能:打包压缩
后缀为:zip和tgz的
指令:zip -r file.zip file/dir
表示:将我的文件或者目录压缩成以zip为后缀的文件或者目录(但是要记得加 -r ,表示递归压缩,不然就会只有属性没有内容)
解压:
指令:unzip -r file.zip
解压到指定路径下
指令:unzip -r file.zip -d ~(根目录)
tar
功能:既可以压缩,又可以解压
本质:可以传不同的命令选项
指令:
命令选项:
tar -x ->解开一个压缩文件的参数指令(说白了就是解压)
tar -c ->意思:创建一个新的归档文件(说白了就是:创建一个压缩包)
tar -C ->解压到指定的目录…
tar -v ->压缩过程中显示文件
tar -f ->使用文档名,注意在f之后需要立即跟上文档的名字,并且不允许再接参数
tar -t ->查看压缩包中的文件
tar -j ->是否具有bzip2属性(就是需不需要用bzip2压缩)(说白了就是压缩的意思)
tar -z ->是否具有gzip属性(就是需不需要用gzip压缩)(说白了就是压缩的意思)
tar使用的一般场景
指令:tar -czf dst src
表示:将源头的文件打包到目的地(说白了就是:将一个目标文件压缩成我要的文件)
后缀简称:tgz
标准指令:tar -czf tmp.tgz tmp 此时我就把我的tmp目录中的文件都给打包好了,此时的tmp.tgz 就是我的压缩包了
解压:
指令:tar -xzf tmp.tgz 其中x表示解压,但是还不够,因为我的文件还在压缩包中,所以依然需要加z和f
查阅我们压缩包中的内容
指令:tar -ztvf tmp.tgz
将一个压缩包解压到指定的路径下
指令:tar -xzf tmp.tgz -C ~
表示:将我的tmp.tgz解压到根目录下(~),当然这个是可以随便写的
打包:防止丢失
压缩:传送更多的东西,接收更快
3.8(bc)
命令行出不来了就是Ctrl+C(终止)
功能:计算器的功能
使用场景:echo “1+2+3+4” | bc
3.9 (uname -r、uname -a)
功能:uname用来获取电脑和操作系统的相关信息
热键:Ctrl+d 自动退出软件
上下可以翻阅历史指令
热键:Ctrl+r 在历史指令中进行自动搜索
指令:history 保存我们历史输入过的所有指令