4.Linux初识指令
指令操作
既然指令操作使用成本高,那么为什么要学指令操作呢?现在已经有了那么精致便捷的图形化界面,为什么还要用麻烦的指令操作呢?相信这是很多朋友刚刚接触linux时都会发出的疑问。
这要从操作系统的历程说起,图形化界面不是操作系统一诞生就有的,所有的操作系统,一开始的时候都只支持指令操作,图形化界面的诞生是为了用户更方便、便捷而设计出来的,没错这确实是让我们使用计算机的成本变低了,但却让我们忽略了图形化界面之下的原理。
当然,指令操作对于非专业技术人员不是必须的,甚至对于专业技术人员也不是必需,但是对于学习OS原理,指令操作是必要的,这对于OS的学习者来说意义非凡。
通过一些专业人员的操作可以看到,顶尖技术的大佬们貌似很少使用鼠标,而是五指游走在键盘上就可以完成许多操作,并且非常快速。的确,鼠标是后来出现的,在图形化界面出现之前都是依靠指令完成对计算机的操作。
然而图形化界面的操作实际上还是指令操作,经过层层包装,通过视觉传达给我们,让我们感觉更直观、清晰,而不是再是一行行的指令生硬地呈现在我们面前。不过,也正是图形化界面是指令操作套了一层“外壳”,离OS也就更远,因此学习OS原理,学习指令是更好的选择,指令距离OS更近,便于我们更好的掌握OS。
创建用户
首先用root用户登陆系统,但一般不建议在root下使用,可以新建一个用户。
# 查看系统信息
uname -a
uname -r
# 新建用户
adduser sx
# 设置密码
passwd sx
# 删除用户
userdel -r sx
Linux基本指令
下面介绍一些基本的指令,粗体的选项是最常用的,属于要记忆的。
ls 指令
语法: ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
-a 列出目录下的所有文件,包括以 . 开头的隐藏文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-l 列出文件的详细属性信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表
示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。(递归)
-1 一行只输出一个文件。
ls -al
一个问题:空目录是否占据磁盘空间?
在我们熟悉的Win10上,当我们查看目录(文件夹)属性时,如果是空目录,大小显示的是0kb,可真的如此吗?
相信你也注意到了,这个显示给我们的0kb就是其属性信息,我们想要获取信息,那也必须得有地方保存其信息,属性信息的数据就保存在磁盘中。目录下的确是空的,但是即使是空目录,也会保存着其属性信息,例如:大小,创建时间,修改时间等等。
所以,答案是肯定的,空目录的文件属性信息也是数据,被保存在磁盘中,占据磁盘空间。
任何文件有两部分组成:
- 文件内容
- 文件属性
无论是学过的文件操作还是将要学习的文件操作,无非就是两类操作:
- 对文件内容进行操作
- 对文件属性进行操作
使用ls - a命令时,可以看到在任意目录下,都存在着两个隐藏文件 :
- . 当前目录
- .. 上级目录
..可以让我们进入上级目录,. 当前路径有什么用呢?
通常对于可执行程序,例如a.out,我们想要执行它就必须输入./a.out才可以。
pwd命令
语法: pwd
功能:显示用户当前所在的目录路径
pwd的用法很简单,就是打印出当前路径,并且没有选项。
唯一需要注意的是Linux下的路径分隔符是/,而Windows下的路径分隔符是\。
cd 指令
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语法: cd 目录路径
功能:改变工作目录。将当前工作目录改变到指定的目录下。
举例:
cd .. # 返回上级目录
cd /home/litao/linux/ # 绝对路径
cd ../day02/ # 相对路径
cd ~ # 进入当前用户家目录,即用户登录时的初始目录
cd - # 返回上一个访问的目录
说到cd 命令就一定要说几个概念:
- /根目录:整个目录树的根目录。
- 绝对路径:某个目录相对于/根目录的路径。
- 相对路径:某个目录相对于当前目录的路径。
要改变工作目录,那么就需要对新目录进行定位,有两种方式:1. 绝对路径 2. 相对路径。
Linux目录结构本质是一棵多叉树,通过二叉树的性质可以类比出多叉树的性质,那就是每一个节点的绝对路径是唯一的(每个节点都有唯一的父节点)。
相对路径就不存在这种说法了,因为对于不同的工作目录,相同的目录相对于当前目录的路径都是不同的。
例如,有如下目录结构:
/home/sx/test1/test2
无论是home、sx、test1、test2中哪一个目录,它们相对于根目录的路径都是唯一的、确定的。
当我们想用相对路径对test2进行定位,如果在test1目录下,其相对路径为./test2,如果在sx目录下,其相对路径为./test1/test2,就和物理学当中的参考系一样,参考系的选取的不同会影响研究对象的坐标,即使研究对象的位置并没有发生改变。
不只是linux如此,只要是目录树其本质都是一棵多叉树。
如果是日常使用,推荐使用相对路径,方便快捷。
如果是进行添加配置文件之类的,推荐使用绝对路径,不会出错。
目录树的性质:
Linux入口目录是/根目录,使用cd ..回退到/根目录的时候,就不能再进行回退了。
目录树多叉树结构,那么每个子节点,既可以是一个目录(放有新的根目录或者普通文件,递归定义),也可以是普通文件。
目录树的叶子节点,一定是一个普通文件或者空目录。
touch指令
语法:touch [选项]... 文件...
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项:
-a 或--time=atime或--time=access或--time=use只更改存取时间。
-c 或--no-create 不建立任何文档。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m 或--time=mtime或--time=modify 只更改变动时间。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间>
touch指令目前只需要了解其一个用法,即创建一个普通文件(普通文件一定是目录树结构的叶子节点)。
touch test.c
mkdir指令(重要)
语法:mkdir [选项] dirname...
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
-p, 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
mkdir sx # 创建一个目录
mkdir -p sx/code/2022/8_18 # 创建一串路径
rmdir指令 & rm 指令(重要)
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令。
语法:rmdir [-p] [dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
常用选项:
-p 删除一串路径中的空目录,如果当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除,否则会报错。
rmdir -p /home/sx/code/2022 # 如果2022目录为空,则删除,删除后如果其父目录code也变成空目录,就删除code,递归地进行删除
rm命令可以同时删除文件或目录
语法:rm [-f-i-r-v] [dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项:
-f 即使文件属性为只读(即写保护),亦直接强制删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
rm -rf code # 强制递归地删除code目录
man指令(重要)
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是:
man 语法: man [选项] 命令
常用选项:
- -k 根据关键字搜索联机帮助
- num 只在第num章节找
- -a 显示所有匹配的手册页而不是仅显示第一个匹配的手册页,比如 man printf 它缺省从第一章开始搜索,找到就停止,若使用a选项,他会继续往后面搜索,直到所有章节都搜索完毕。
解释一下,面手册分为9章:
1 是标准命令(未指定选项时默认为1)
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
4 是Special devices (设备说明)
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是杂项,包括附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfig
9 是其他(Linux特定的), 用来存放内核例行程序的文档。
若无法使用man指令
报错:No manual entry for xxx in section x
尝试root下:
yum install -y man-pages
cp指令(重要)
语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息,这时,源文件只能有一个。如果目的地和源都不是目录而是普通文件,则会拷贝源文件地内容到目的地文件。
用法:
- 视cp命令中第二个参数类型的不同(目标文件是已存在的目录还是已存在目录下的目标文件),cp命令将拷贝一个新文件并命名或将其拷贝到另一个目录下。
- 当第二个参数类型不是已存在的目录而是已存在目录下的文件(可以存在也可不存在的文件)时,cp命令完成拷贝文件后命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录拷贝后命名为给定的目标文件名。
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,cp命令将各参数指定的源文件均拷贝至目标目录下。
常用选项:
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
默认cp命令不能拷贝目录,如果需要拷贝目录,应该加上选项 -r。
cp不能复制到当前源文件目录下。
更详细的:
-
当源文件是普通文件时
- 如果目标文件是已存在的目录,则会拷贝到该目标目录下
- 如果目标文件是不存在的文件,则会拷贝到目标文件的上级目录重命名为指定文件名的新普通文件
- 如果目标文件是已存在普通文件,则会拷贝源文件内容到目标文件
-
当源文件是目录时
- 如果目标文件是已存在的目录,则会拷贝到该目标目录下
- 如果目标文件是不存在的目录,则会拷贝到目标目录的上一级目录命名为一个指定名称的新目录。
注意:如果目标路径不存在,必须上一级路径是存在的才能正常拷贝。
mv指令(重要)
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
-
视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
-
当第二个参数类型不是已存在的目录而是已存在目录下的文件(可以存在也可不存在的文件)时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
-
当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录下。
常用选项:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
将rm改造成mv
vim ~/.bashrc #修改这个文件
mkdir -p ~/.trash
alias rm=trash
alias ur=undelfile
undelfile() {
mv -i ~/.trash/\$@ ./
}
trash() {
mv $@ ~/.trash/
}
通常用于剪贴文件和重命名文件。
更详细的:
-
当源文件是普通文件时
- 如果目标文件是已存在的目录,则会移动到该目标目录下
- 如果目标文件是不存在的文件,则会移动到目标文件的上一级目录重命名为一个指定文件名的新普通文件
- 如果目标文件是已存在普通文件,则会移动源文件并重命名为指定为文件名覆盖目标文件
-
当源文件是目录时
- 如果目标文件是已存在的目录,则会移动到该目标目录下
- 如果目标文件是不存在的目录,则会移动到目标目录的上一级目录重命名为一个指定名称的新目录。
注意:如果目标路径不存在,必须上一级路径是存在的才能正常mv。
cat&tac
语法:cat [选项] [文件]
功能: 查看(打印)目标文件的内容
常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
tac用法和cat一样,功能是反向打印文件内容。
-
cat不适合查看大文本文件
-
cat会默认(不指定文件名时)从键盘(标准输入)读入
more指令
语法:more [选项] [文件]
功能:more命令,功能类似 cat
常用选项:
-n 对输出的所有行编号
q 退出more
回车下翻文本
[atong@LiWenTong ~]$ ls -l / | more
total 162
drwxr-xr-x 2 root root 4096 Apr 25 05:39 bin
drwxr-xr-x 4 root root 1024 Apr 25 04:11boot
drwxr-xr-x 9 root root 3820 May 4 23:20 dev
drwxr-xr-x 84 root root 4096 May 5 00:37 etc
less指令(重要)
-
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
-
less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻,只能往后面看。
-
但若使用了 less 时,就可以使用 [pageup] [pagedown] [上] [下] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!可用于日志查看。
-
除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜,因此与more相比,更推荐使用less。
语法: less [参数] 文件
功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
选项:
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit
重定向
输出重定向
把本来应该输出到显示器上的内容,将他输出到文件中。
echo "hello sx" > hello.txt
输出重定向会清空原始文件,进行输出重定向。
追加重定向
同上
echo "hello sx" >> hello.txt
不会清空原始内容,追加重定向在原始文件结尾追加写入。
输入重定向
把本来应该从你键盘上文件中读取数据的方式,改成从指定文件中读取。
cat < hello.txt
以上输入重定向功能上和cat hello.txt一样。
Ctrl + C/Z
ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.
ctrl+c
是强制中断程序的执行,进程已经终止。
ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务。
jobs
查看当前在后台运行的任务
fg
将后台中的命令调至前台继续运行
bg
将一个在后台暂停的命令,变成继续执行 (仍在后台执行)
[sx@VM-4-9-centos test]$ cat # cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
^Z # ctrl 中断任务
[1]+ Stopped cat
[sx@VM-4-9-centos test]$ cat # cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
^Z # ctrl 中断任务
[2]+ Stopped cat
[sx@VM-4-9-centos test]$ jobs # 查看当前在后台运行的任务
[1]- Stopped cat
[2]+ Stopped cat
[sx@VM-4-9-centos test]$ fg 2 # fg 将后台任务进程调至前台继续运行
cat
^C # 中止任务
[sx@VM-4-9-centos test]$ fg 1 # fg 将后台任务进程调至前台继续运行
cat
^C # 中止任务
[sx@VM-4-9-centos test]$ jobs # 查看当前终端放入后台的工作
可以看到,当前终端有两个后台工作:第一个和第二个都是 cat 命令,第一个工作号为 1,状态是暂停,标志是"-";第二个工作号为 2,状态是暂停,标志是"+"。"+"号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作。"-"号代表倒数第二个放入后台的工作,而第三个以后的工作就没有"+-"标志了。
一旦当前的默认工作处理完成,则带减号的工作就会自动成为新的默认工作,换句话说,不管此时有多少正在运行的工作,任何时间都会有且仅有一个带加号的工作和一个带减号的工作。
小Tips:所以阻碍你命令行操作,无脑Ctrl + C。
linux下皆文件
一切外设(键盘、网卡……除了CPU和内存),都被当作文件。
优点:看待事物的方式变得简单,处理事务的方式变得单一。
head指令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。
语法: head [参数]... [文件]...
功能:
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
选项:
-n ,< n >为要显示的行数
tail指令
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容.
语法: tail[必要参数] [选择参数] [文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
-f 循环读取
-n ,< n >为要显示的行数
管道
来解决一个问题,我们如何打印出一个有100000行文本文件的1000-1020行?
有一个文件共有100000行内容,请取出第1000到1020行内容
# 方法1 临时文件
[sx@VM-4-9-centos test]$ cnt=1; while [ $cnt -le 100000 ]; do echo "hello sx $cnt"; let cnt++; done > test.txt
[sx@VM-4-9-centos test]$ head -1020 test.txt > tmp
[sx@VM-4-9-centos test]$ tail -20 tmp
hello sx 1001
hello sx 1002
hello sx 1003
hello sx 1004
hello sx 1005
hello sx 1006
hello sx 1007
hello sx 1008
hello sx 1009
hello sx 1010
hello sx 1011
hello sx 1012
hello sx 1013
hello sx 1014
hello sx 1015
hello sx 1016
hello sx 1017
hello sx 1018
hello sx 1019
hello sx 1020
# 方法2 管道
[sx@VM-4-9-centos test]$ head -1020 test.txt | tail -20
hello sx 1001
hello sx 1002
hello sx 1003
hello sx 1004
hello sx 1005
hello sx 1006
hello sx 1007
hello sx 1008
hello sx 1009
hello sx 1010
hello sx 1011
hello sx 1012
hello sx 1013
hello sx 1014
hello sx 1015
hello sx 1016
hello sx 1017
hello sx 1018
hello sx 1019
hello sx 1020
管道:级联多个命令,来完成流水线式的数据处理工作。
可以想一下方法一的精髓是什么?
是不是就是用被head -1020处理过的数据,存储到tmp文件里,从而使得能让tail -20去处理加工已经被 head -1020处理过的数据,达到二次加工的目的呢?
方法一的两次加工的媒介是临时文件tmp,那方法二的媒介是不是应该也差不多呢,结果是当然的。不过没关系我们目前仅理解应用后面再理解其原理。
时间相关的指令
date显示
date 指定格式显示时间: date +%Y:%m:%d
date 用法:date [OPTION]... [+FORMAT]
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
%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
2.在设定时间方面
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
4.转换时间戳
时间戳->时间:date -d@1508749502
可以自定义格式:
[sx@VM-4-9-centos test]$ date -d@10
Thu Jan 1 08:00:10 CST 1970
[sx@VM-4-9-centos test]$ date +%Y-%m-%d -d@10
1970-01-01
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
Cal指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式: cal [参数] [月份] [年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项:
-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
cal -y 2018 # 查看2018年的日历
find指令(灰常重要) -name
-
Linux下find命令在目录结构中搜索文件,并执行指定的操作。
-
Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。
-
即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
-
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
语法: find pathname -options
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
常用选项:
-name 按照文件名查找文件。
find /home/usr -name test.c # 在/home/usr目录下找所以名为test.c的文件
grep指令
linux grep命令详解 - ggjucheng - 博客园
语法: grep [选项] 搜寻的字符串 文件
功能: 在文件中搜索字符串,将找到的行打印出来(行文本过滤工具)
说明:匹配行文本中的关键字,如果一行中有匹配的,这整行都保留。
常用选项:
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻的字符串' 内容的那些行
zip/unzip指令:
语法: zip 压缩文件.zip 目录或文件
功能: 将目录或文件压缩成zip格式
常用选项:
-r 递归处理,将指定目录下的所有文件和子目录一并处理
# 将test2目录压缩:
zip test2.zip test2/*
# 解压到tmp目录:
unzip test2.zip -d /tmp
*
是通配符,可代指所以文件。
若不适用-d选项,则默认解压缩到当前工作目录。
优点:
- 节约本地磁盘空间
- 开发人员开发出的软件项目不止一个文件,因此要打包压缩,并且可以在部署项目时加快上传和下载速网络传输速度
- 将需要的文件打包,可以保证包的完整性(不完整解压时会error)
压缩的过程:
- 打包
- 压缩
tar指令(重要):打包/解包,不打开它,直接看内容
tar [-cxtzjvf] 文件与目录 .... 参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :目标(使用)档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
[sx@VM-4-9-centos test]$ ls
pakage test.txt
[sx@VM-4-9-centos test]$ tar czf test.tgz pakage # 组合命令可不带-
[sx@VM-4-9-centos test]$ ls
pakage test.tgz test.txt
[sx@VM-4-9-centos test]$ mv pakage ../
[sx@VM-4-9-centos test]$ ls
test.tgz test.txt
[sx@VM-4-9-centos test]$ tar xzf test.tgz -C ./ # 解压缩到指定目录(默认解压到工作目录)
[sx@VM-4-9-centos test]$ ls
pakage test.tgz test.txt
tar命令会对目录下所有文件和子目录一并处理。
解压缩命令会基本使用即可,不需要深入研究,没有那个必要。
默认情况下,几乎所有工具都会默认解压缩至工作目录。
linux下支持的压缩包
linux几乎支持所有种类的压缩包,所有互联网公司后台都是linux系统,开发人员开发的软件,将来都是要部署到linux系统上得,开发出的软件被打包在一起并压缩,因此部署在linux上时就一定得先上传这些压缩包到linux平台,不同的开发平台可能压缩工具和算法都不同,例如Windows,MacOS等等,要将不同环境下开发的项目部署在linux,那就必须能够正确解压这些不同种类压缩包。
bc指令
bc命令可以很方便的进行浮点运算(不常用)
[sx@VM-4-9-centos pakage]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+1
2
3*9
27
uname –r指令:
语法:uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:
-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
-r或--release 显示操作系统的发行编号。
[sx@VM-4-9-centos test]$ uname -a
Linux VM-4-9-centos 3.10.0-1160.66.1.el7.x86_64 #1 SMP Wed May 18 16:02:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[sx@VM-4-9-centos test]$ uname -r
3.10.0-1160.66.1.el7.x86_64
x86_32就是32位平台,简称x86
x86_64就是64位平台,简称x64
重要的几个热键[Tab],[ctrl]-c, [ctrl]-d
-
[Tab]按键---具有『命令补全』和『档案补齐』的功能(一下不行就两下)
-
[Ctrl]-C按键---让当前的程序『停掉』
-
[Ctrl]-D按键---快速推出账户,通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit
-
[Ctrl]-R按键—搜索历史命令
关机
语法:shutdown [选项] ** 常见选项:**
-h : 将系统的服务停掉后,立即关机。
-r : 在将系统的服务停掉之后就重新启动
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
以下命令作为扩展:
◆ 安装和登录命令: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、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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具