Linux学习笔记(2)
知识点:
1.打包、压缩——是什么、为什么、怎么做?
什么是打包、压缩?
打包:把文件合并。
压缩:通过一定算法减少体积。
为什么要进行打包、压缩?
打包:防止文件丢失。本质是把多个文件变成一个文件。
压缩:打包后的大文件体积很大,需要减少体积。可以节省本地存储空间;网络传送时可以有效减少传送的时间。
怎么打包、压缩?(打包和压缩不作明显区分,作为整体看。)
Linux有两套最常用的打包压缩的方式(打包压缩形成的压缩文件的种类非常多): zip/unzip tar
(详见指令部分)
2.体系结构指的是芯片结构。
(uname指令)
x86_64和x64等价。
新老内核的问题(常识)
企业里面不会用新内核。怕有bug。一般使用经过五六年检验的。维持系统稳定性。
3.Linux系统会记录历史命令
history可以看历史命令。(有一定条数)
4.云服务器永不关机,除非维护或不用了。
因为一直在工作。
关机的指令有:
shutdown
halt
reboot
如果要进行云服务器关机,shutdown可以跟选项:
-h :将系统的服务停掉后,立即关机。
-r :在系统的服务停掉后就重新启动。
-t sec :-t后面加秒数,也就是过几秒后关机。
在Windows中也可以用shutdown关机。
Linux没有开机指令。
5.shell命令及其运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
[用户名@主机名 ~]# 这是命令行
~是当前所处的目录,#是提示符,分隔系统和自己的。普通用户的是$
ls -a -l这是命令
实际上命令行并不属于操作系统提供的功能,而是有一个外壳程序给我们打印的命令行。
我们输入的命令本质上是字符串,交给外壳程序,外壳程序把命令交给操作系统,让操作系统执行完把结果通过外壳程序返回给用户。
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)
主要包含:将使用者的命令翻译给核心(kernel)处理。
同时,将核心的处理结果翻译给使用者。
Linux中,命令行解释器统称为shell。
现在我们只是对shell进行感性的理解…
因为用户不擅长和操作系统内核直接打交道,所以必须存在外壳程序。
1.外壳程序方便用户操作;2.外壳程序可以保护内核。(指令明显不合法);3.外壳程序其实在系统层面是以进程形式呈现的。在新命令到来时往往是创建子进程然后让子进程去执行,如果挂了也不影响外壳程序。
bash
我们所采用的命令行解释器叫做bash,怎么理解shell和bash关系?shell是所有外壳程序的统称,Linux中具体的外壳程序的名字叫bash。
我们在Windows用的图形化界面其实也算是一种外壳程序;其实安卓系统内核也是Linux,而“安卓”是包裹在Linux外的shell,或者说图形化界面。
所以现在我们理解外壳程序,可以理解成,在Linux上是命令行、Windows上是命令行或图形化界面(centos、ubantu也有图形化界面,所有图形化界面都可以理解成外壳)。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
6.Linux权限的概念
1.Linux中的用户
Linux中用户分为两类。root用户(超级管理员)和普通用户。(Linux是多用户系统)
我们平时可能会遇到“以管理员身份运行”,Windows其实也是有管理员和普通用户的。
root用户的特点是权限很高,普通用户权限低,本质上受管控。比如有些东西删不掉。
俩用户可以身份切换。
怎么变成超级用户?
安装命令的本质就是把命令拷贝到/user/bin/
cp myprocess /usr/bin/
普通用户是不能拷贝的。
/user/bin/属于系统目录,不允许普通用户修改。
可以把自己变成超级用户:su
就会显式出Password:
这里要输入 root的密码
还有一种变成超级用户的办法:su -
也会显式出Password:
区别在于su不会让root重新登录,只是身份的切换。不影响当前所处目录。
su -其实是让root重新登录了。所以当前所处的路径会发生变化。
超级用户怎么变成普通用户?
(我们可以先新建一个普通用户)
adduser naruto
passwd naruto
然后设置密码
ls /home 我们就可以看到新建出来的普通用户
su 用户名
如su naruto
马上就可以变成这个普通用户,不需要输密码
指令:
grep
叫做行文本过滤工具。
上一篇学习笔记中提到了日志的概念,有时我们只想看错误日志,我们可以这样过滤:cat /var/log/messages | grep “err”
再比如我们现在以"Removed"为关键词搜索:cat /var/log/messages | grep “Removed”
还可以cat /var/log/messages | grep “Removed” | tail 查看最近的
这个过程是先把信息打出来然后交给grep然后再交给tail(上一篇笔记提过的“管道”的作用)
所以我们可以用来定期查看日志中的错误信息等
其实,grep本身就可以读取日志文件。
也就是说可以写成:grep “Removed” /var/log/messages | tail
第二种应用场景
以后可能我们想在系统里筛选出指定的进程:
ps ajx 我们就可以查到系统中所有启动的进程。
ps ajx | grep "myprocess"就可以去查myprocess这个进程
第三种应用场景
在一个文本中查找我们想要的行。
(*是通配符,表示我们匹配当前目录下的所有文件)
grep “int main” *
grep -n “int main” *带上-n选项,可以找到它在第几行。
脚本:cnt=0; while [ $cnt -le 100 ]; do echo "hello $cnt"; let cnt++; done > log.txt
我们将其重定向到log.txt中。
现在我们有了从0到100,101行的大文件log.txt
grep “9” log.txt
我们可以把包含9这个关键字的所有文本行全部找出来
-n选项
grep -n “9” log.txt我们可以把其在原始文件中的行数也显示出来:
-v选项
grep -v “9” log.txt
所以-v代表的是reverse,意思是匹配成功的不要,而保留没有与关键字匹配的。
-i选项
grep “hello” log.txt对于"Hello"这样的,匹配会不成功。
而grep -i “hello” log.txt,则会忽略大小写。i即ignore。
(可以组合)-vi则是忽略大小写,匹配到的全不要。
zip/unzip
zip --version 我们可以先看看zip命令有没有装
yum install -y zip unzip 就可以安装zip命令
现在假设我们刚才脚本重定向的log.txt在目录momo里,我们在momo里再创建一个目录:mkdir target
然后cp log.txt target/ 将log.txt拷贝到目录target里。
tree . 我们可以查看当前的结构:
假如我们现在想把momo整个打包压缩(打包单个文件和打包目录及其子目录子文件的做法一样)
zip momo.zip momo
然后看到:
ll之后看到:
确实形成了一个momo的压缩包,可以通过前缀-,看出是个普通文件
mkdir other
然后mv momo.zip other/ 我们把这个压缩包交给其他目录(模拟把压缩包给其他人)
然后我们可以把这个压缩包解压:
cd other
unzip momo.zip
ls进行查看:
然后我们tree一下momo看看是否解压成功:
可以发现我们打包了空目录。
这是因为我们没有携带选项-r
正确做法应该是这样:
zip -r momo.zip momo
mv momo.zip other/
cd other
unzip momo.zip
tree momo
可以看到,现在就成功打包压缩并解压了。
cat momo/log.txt
可以看到也成功得到了。
我们还可以不解压到当前目录下,而是解压到指定目录下:
unzip momo.zip -d /root
总结:zip -r dst.zip src和unzip XXX.zip(unzip XXX.zip -d 指定目录)
rz/sz
Linux和Windows压缩包互传
Linux传送压缩包到Windows
现在我们在other里,我们有momo.zip,我们现在想把它传到自己的Windows当中。
我们用到sz和rz,z代表zip,s代表send,r代表receive。
同样需要先安装这俩命令:yum install -y lrzsz(centos版本)
然后sz momo.zip
然后就会自动弹窗。(这里选择桌面)
然后我们的桌面上就多出了这个压缩包:
Windows传送压缩包到Linux
假设我们现在Windows上有一个nono.zip,我们想传到Linux上:
在Linux上输入rz然后回车就会弹出窗口,我们可以在窗口里选择要传到Linux的压缩包。
对于Xshell,还支持直接从Windows上拖拽到终端,直接传到Linux。
tar
tar 选项 XXX.tgz srcdir
tar的选项比较多
tar czf momo.tgz momo 是压缩
c代表创建一个打包文件,z是把这个打包文件压缩,f后面紧跟要创建的压缩包名称。
可以看到tar命令不用-r递归,默认就是全部打包。
tar xzf momo.tgz 是解压
x代表解包
总结:
tar czf XXX.tgz src
tar xzf XXX.tgz
-v
如果想看到解包的过程,可以带v选项:
tar xvzf XXX.tgz:
压缩的过程也可以带v选项进行详细查看:tar cvzf momo.tgz momo
-C
如果想解压到指定目录下,可以:tar xzf XXX.tgz -C /root
scp
Linux传送Linux
这个命令叫做远程拷贝
scp dst.tgz 用户名@你的公网IP(或者能访问的私有IP):目标机器指定的路径
比如scp momo.tgz root@123.45.678:/root/code (该IP为虚构)
bc
在我们输完bc并回车后就是这样:
可以去计算。
可以这样去使用:
echo “1+2+3+4+5+6+7” | bc
结果:28
这是一个低频指令。
uname
怎么在Linux环境查看你的体系结构和系统内核版本?
体系结构:CPU是什么架构的。
uname -a
可以查看系统中常见的所有东西,比如系统类别,主机名,内核版本,体系结构
uname -r
看的信息更少,如:
3.10.0-1160.119.1.el7.x86_64
Linux中重要的几个热键
1.ctrl+c——终止异常任务
有时候误写:ls \
不知道怎么退出(这其实是续行)
ctrl+c,终止前台的任务
2.上下键——查看历史命令
3.Tab键——命令补全
有时忘了指令怎么拼,可以输了wh然后快速按两下Tab键,就会把wh开头的指令都显示出来:
如果什么都没输,直接按两下Tab:
如果我们输入了whoam,再按一下Tab,就会补全为whoami
4.ctrl+r——搜索历史命令
输入ctrl+r会得到:
如果之前我们写过一个while循环的脚本,我们可以输个一个片段比如while,就可以找到历史命令。
5.ctrl+d——退出当前用户
身份切换可以用。
本文结束,敬请期待后文。