一、Linux基础指令
1. ls
ls
:对于目录,列出该目录下的所有子目录与文件,对于文件,将列出文件名以及其他信息。
-a:列出目录下的所有文件,包含以.开头的隐藏文件
-l:列出文件的详细信息
-d:将目录像文件一样显示,而不是显示目录下的文件
-i:输出文件的索引信息
注:这些选项也可以混合使用
。
2. pwd
pwd
:显示用户当前所在的目录。
3. cd
在了解cd命令之前,需要对路径有一个初步的认识。
路径:绝对路径、相对路径。
/
:代表根目录。
家目录:/home/username或~
(一般是这样,root用户除外),指定用户登录的时候,默认所处的路径叫做家目录。
绝对路径
:一般从/(根目录)开始,不依赖于其他目录定位文件的方式。
相对路径
:相对于当前用户所处目录位置,定位文件的路径方式。
路径存在的意义:树状组织方式,为了保证快速定位查找到指定的文件,而定位文件就需要具有唯一性的方案来实现。其中任何一个节点(目录/文件)都只有一个父节点(父目录)并且在同一目录下不能有同名文件,所以,从根目录开始,路径具有唯一性
。
使用场景:绝对路径一般在配置文件中使用,相对路径在命令行中使用较多。
.
:表示当前目录。
..
:表示上一级目录。
cd
:改变工作目录。将当前工作目录改变到指定目录下。
目录名:绝对路径/相对路径
-:直接回退到最近一次所处的目录
~:快速进入家目录
跳转至最近一次路径
。
4. touch
touch
:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
-a:修改access time
-m:修改modify time
-c:修改modify time
文件名:创建文件
不同的系统会有差别,逻辑无法自洽。
access time包括访问文件内容和文件属性
修改modify time,所以change time也会修改,modify time也属于文件属性,所以access time也会修改
。
5. mkdir
mkdir
:在当前目录下创建目录。
-p:可以是一个路径名称。此时若路径中的某些目录不存在,加上此选
项后,系统将自动建立好那些不存在的目录,即一次可以创建多个目
录。
6. rmdir
rmdir
:删除空目录。
适用对象:具有当前目录操作权限的所有使用者。
-p:当子目录被删除后,如果父目录也变成空目录,就连带父目录一起
删除。
7. rm
适用对象:所有使用者。
rm
:删除文件或目录。
-f:直接删除
-i:删除前逐一确认
-r:删除目录及其下所有文件
8. man
man
:查看手册(就像字典一样)。
用法:man -k 查找内容
简单介绍一下man手册,分为9章:
1.普通命令
2.系统调用
3.库函数
4.特殊文件
5.文件格式
9. cp
cp
:复制文件或目录。
用法:cp 选项 源文件/目录 目标文件/目录
-f:强制复制文件或目录
-i:覆盖文件之前先询问
-r:递归处理,将指定目录下的文件与目录一并处理
如果目标文件存在就覆盖
递归强制拷贝整个目录
10. mv
mv
:用来移动文件或者将文件改名,经常用来备份文件或者目录。
用法:mv 选项 源文件/目录 目标文件/目录
-f:如果目标文件已存在,不会询问直接覆盖
-i:若目标文件已存在,就会询问是否覆盖
若存在相同文件,改名即覆盖
。
11. cat
cat
:查看目标文件的内容。
cat 选项 文件
-b:对非空输出行编号
-n:对输出的所有行编号
-s:不输出多行空行(多行空行压缩成一行空行)
12. more
more
:功能类似于cat,查看大文件,只能往下翻,不能往上翻。
-n:指定输出行数
q:退出
13. less
less
:与more类似,但less可以随意浏览文件,而且less在查看之前不会加载整个文件。
-i:忽略搜索时的大小写
-N:显示每行的行号
/关键词:向下搜索
?关键词:向上搜索
n:重复前一个搜索
N:反向重复前一个搜索
q:退出
14. head
head
:用来显示文件的开头至标准输出中,默认head命令打印其相应文件的开头10行。
-n:显示的行数
15. tail
tail
:用来显示指定文件末尾内容。不指定文件时,作为输入信息进行处理,常用来查看日志文件。
-f:循环读取
-n:显示行数
16. date
date
:显示时间。
%Y:年份
%m:月份
%d:日期
%H:小时
%M:分钟
%S:秒数
%X:相当于%H:%M:%S
%F:相当于%Y:%m:%d
%s:时间戳
17. cal
cal
:用来查看日历等时间信息,如只有一个参数,则表示年份,如有两个参数,则表示月份和年份。
-3:显示系统前一个月,当前月,下个月的日历
-j:显示在当年中的第几天(一年日期按天算,从一月一号开始算起,默
认显示当前月在一年中的天数)
-y:显示当前年份的日历
18. find
find
:在文件树中查找文件,并做出相应处理。
查找小于1M的文件
查找大于1M的文件
19. which
which
:搜索系统指定的命令。
20. whereis
whereis
:用于找到程序的源,二进制文件或手册。
21. alias
alias
:设置命令的别名。
22. grep
grep
:在文件中搜索字符串,将找到的行打印出来。
-i:忽略大小写的不同
-n:输出行号
-v:反向匹配
23. top
top
:查看和管理系统的进程资源占用情况。
-d:刷新的时间间隔
-n:刷新的次数
q:退出
24. zip、unzip
zip
:将目录或文件压缩成zip格式。
-r:递归处理,将指定目录下的所有文件和子目录一并处理。
unzip
:解压。
25. lsb_release
-a:查看当前操作系统发行版详细信息
26. rzsz
sz
:从远程服务器下载文件到本地计算机。
用法:sz 文件名
rz
:从本地计算机上传文件到远程服务器。
用法:rz
27. tar
tar
:打包/解包。
-c:建立一个压缩文件
-z:是否同时具有gzip的属性(即是否需要用gzip压缩)
-v:压缩的过程中显示文件
-f:使用档名,f之后要立即接档名,不要再加参数
-x:解开一个压缩文件
-C:解压到指定目录
28. bc
bc
:进行浮点运算。
29. uname
uname
:获取操作系统和电脑的相关信息。
-a:详细输出所有信息。
二、重要的几个热键
Tab按键
:具有命令补全和档案补齐的功能。
Ctrl+c按键
:让当前的进程停掉。
三、shell命令及运行原理
命令的本质:Linux系统中指定目录下的可执行文件
。
举一个简单的例子来理解一下外壳程序和操作系统的关系。
故事:有一个内向的男人小张,他喜欢一个女人如花,但是他并不善于和异性打交道,因此,需要一个媒婆去帮他说媒,所以,媒婆带着小张的需求去询问如花,媒婆说小张不仅条件好,而且长得帅,但是如花说不喜欢小张。于是媒婆带着结果找到了小张,告诉了小张。
看到这里,大家应该会有些问题。
1.为什么要有外壳?
小张是真心喜欢如花的,所以他还不想就这样放弃,于是让王婆再一次去帮他说媒,但是当王婆走到如花家门口的时候,看到如花家里坐着另一个男人李四,王婆一看到这个情况,连门都没进去直接就回去了,这样就保护了如花和李四的感情。
总结:为了保护操作系统
。
从这里就可以看出,小张虽然不善于和异性打交道,但是和王婆打交道还是可以的。
总结:方便用户操作,减少用户使用操作系统的成本
。
2.外壳是怎么工作的?
王婆一再将小张的要求搞砸了,这样下去会影响王婆的口碑啊,以后谁还敢找王婆说媒呢!于是王婆成立了一个媒婆婚介所,招了一批实习生,让实习生去说媒,这样即使搞砸了也不会影响自己的口碑。
总结:shell的子进程去解释执行的
。
shell是外壳程序的统称,在linux中叫做bash。
3.什么是操作系统?为什么要有操作系统?
先给结论:操作系统是一款进行软硬件资源管理的软件
。
计算机的软硬件体系结构是层状的,最底层往往是硬件,包括鼠标,硬盘,网卡,内存,cpu等各种设备,这些硬件都是需要对应的驱动程序的。举个例子,鼠标在连接计算机时,在一两秒内你去动鼠标可能会没有反应,等一会可能会在计算机右下角显示某某驱动程序已安装好,这个时候你去动鼠标他就会有反应。驱动程序就是用来控制硬件工作的。操作系统扮演的角色是管理者,它要进行内存管理,进程管理,文件管理,硬件管理等。操作系统为什么要进行管理呢?比如说,你在玩游戏时,总是动不动就黑屏,卡退,刷抖音时,总是闪退,重启,那么就会造成非常不好的体验,所以,操作系统进行管理就是为了给用户提供一个良好的运行环境。所以为什么要有操作系统呢?对下要做好软硬件的管理工作(手段),对上要提供一个良好的运行环境(目的)
。
如何定义什么是良好的运行环境呢?
1.稳定 2.高效 3.安全
四、Linux权限
在谈Linux权限之前,先来看看Linux中文件类型。
1.文件类型
在windows中,区分文件类型是根据文件名后缀来进行区分的。
Linux区分文件类型,是用文件的属性列区分的
。
-
:代表普通文件
d
:代表目录/文件夹
除此之外。还有许多文件类型。
软链接
块设备:支持随机读取,以块为单位
(磁盘)。
字符设备:不支持随机读取,按照字符为单位
(显示器,键盘)。
管道文件(用来实现进程间的通信
)
2.Linux用户
任何一款操作系统都叫做多用户操作系统。
那么,这些用户也有区分,Linux中用户被分为两类,root(Linux管理员,只能有一个),普通用户(可以有多个)
说到这里了,就不得不说一下,用户登录和切换问题了?
先来看以下几个命令。
adduser username:添加用户,创建家目录
userdel -r username:删除用户,并删除家目录
id username:检查用户是否被删除
用户切换
root用户切换普通用户,直接切换,不需要密码(root用户拥有操作Linux的最高权限
)
普通用户不能直接切换普通用户(需要密码)
su username:单纯的进行身份切换,但不会改变家目录
如果我要做一件提高权限的事情,但是不想变成root,怎么办呢?
sudo指令提权功能,以root身份运行该命令
sudo cp myfile.txt /usr/bin失败了,是因为默认新增的用户,无法执行sudo,不受系统信任
。那么该怎么办呢?这就相当于你进入了好友的黑名单了,你要在白名单里才可以使用sudo命令。这个时候就要以root身份去将你添加到系统的白名单里(/etc/sudoers)才可以
。
将新增的用户添加到白名单里。
3.权限的理论理解
结论:权限 = 人 + 事物属性
举个简单的例子:你想在爱奇艺上写代码,这是不可能的,爱奇艺是用来看电影的,它并不具备写代码的属性。
在linux上,一切皆文件
。
那么,文件权限 = 用户 + 文件权限属性
。
文件的权限属性包括r(读),w(写),x(可执行)
。
文件权限决定的是能不能干这件事情。
用下面的一张图来认识一下权限。
可以看到,文件权限拥有九个字符,而文件权限也就只包含了r(读),w(写),x(可执行),按理来说只需要三个字符就可以了呀,这是为什么呢?这是因为系统要对文件权限进行管理,一个文件可能会有很多用户去使用,系统对这些用户进行了管理,分为拥有者,所属组,other。而文件权限被划分为三组,三个为一组,分别代表拥有者,所属组,other
。那么在上面的图中,为什么没有显示other组呢?这是因为用户太多了,系统记不全,所以只要是除了拥有者,所属组之外的用户都属于other组的。
注:
r(具有读权限) / -(不具有读权限)
w(具有写权限) / -(不具有写权限)
x(具有可执行权限) / -(不具有可执行权限)
拥有者,所属组,other是三种角色,而root , lc等属于具体的人。是由具体的人来扮演角色的。
4.权限的操作实验
文件权限 = 用户 + 文件权限属性。所以,操作实验就是从两个方面来进行论证的。用户或者文件权限属性。
4.1 改变文件权限属性
方法一:
改变拥有者权限
改变所属组的权限
改变other的权限
同时对多人进行修改权限。
方法二:
有权限用1来表示,无权限用0来表示,所以也可以用8进制的方式来修改权限。
普通用户无法进入到root的目录里
root用户可以进入到普通用户的目录里
root用户(既不属于拥有者也不属于所属组)只有 r 权限,却可以向test.txt文件里写内容。这是为什么呢?因为root用户可以无视权限的约束
。
即使是拥有者自己,没有相应的权限也不允许执行相应的动作。
看到这里,大家应该会有一个问题。lc既是拥有者也是所属组,虽然拥有者没有相应的权限,但是所属组有权限啊,为什么还是会执行失败呢?
这是因为匹配身份的时候只会匹配成功一次,一旦匹配成功,执行失败,也不会再去匹配下一个角色身份了
。
4.2 改变用户
直接改变拥有者是不被允许的。
举个简单的例子:你有一个东西想要给别人,你可以给,但是别人有权利拒绝不要。所以,这种直接切换用户的操作是不被允许的。我们可以使用sudo来进行提权。
文件权限的修改只有root用户和文件拥有者可以修改,其他人不允许。可以使用sudo提权(相当于是以root的身份)来修改
。
更快捷的改变拥有者,所属组。
以上都是基于普通文件的权限实验。那如果是一个目录呢?
要进入目录,需要什么权限呢?
结论:通过对比可以得出,进入目录需要x权限
。
那么,r 权限和 w 权限又是影响什么的呢?
结论:是否允许查看指定目录下的文件信息,需要r权限
。
结论:指定目录下新建文件、删除文件,修改文件名需要w权限
。
大家此时有没有疑问呢?若是没有的话,我来提几个问题吧!
1.为什么新建一个文件或者目录的时候,缺省的权限,刚好是我们看到的样子?
这是因为权限掩码的缘故。
不同的系统,权限掩码默认值可能不一样。
普通文件的起始权限是666,目录的起始权限是777
。
什么是权限掩码?
权限掩码:过滤掉在权限掩码中出现的权限
。
所以,最终权限 = 起始权限 & (~umask)
如何证明呢?
我们只需要更改一下umask值,查看文件的最终权限是否和我们所预想的一致就可以得到答案了。
2.为什么普通用户可以删除root用户创建的文件呢?
文件可以读可以写是取决于文件本身的权限
,那么普通用户为什么可以删除root用户创建的文件呢?这是因为该文件是否可以被删除依赖于所处的目录是否具有w权限
。
到了这里,我们就能发现一个现象。root账号,凭什么在我的路径下新建文件。
普通用户的家目录,只有root和自己能进入
。
那如果我想让多个普通账号之间,进行文件或者数据共享呢?那就只能放在root账号公共目录下了,因为普通用户之间是无法进入到另一个普通用户的家目录去的,更无法进入到其它路径下
。
这种方法可以实现数据共享,但是也会存在互删的情况,避免引起混乱,所以有了粘滞位。
粘滞位只能对目录进行设置
,设置了粘滞位的目录,其下的文件只能由1.超级管理员删除 2.该目录的所有者删除 3.该文件的所有者删除
。
file命令:查看文件更详细的信息