Linux基础指令及权限
文章目录
前言
一、Linux下基本指令
1.ls
2.pwd
3.cd
4.touch
5.mkdir
6.rmdir && rm
7.man
8.which
9.cp
10.mv
11.cat
12.more 和 less
13.head 和 tail
14.date
15.find
16.whereis
17.grep
18.top
19.zip/unzip
20.tar
21.bc
22.uname
23.file
24.热键
二、shell命令以及运行原理
三、Linux权限的概念
1.Linux文件类型
2.Linux用户(root/普通用户)
3.权限的理论解释
4.权限的操作实验
5.目录的权限
6.粘滞位
总结
前言
文章是本人学习过程中的一些记录、思考和参考大佬的文章后自己的理解。同时也希望自己以讲述的方式来呈现给大家,欢迎大家来指正交流
一、Linux下基本指令
1.ls
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
ls -l
列出文件的详细信息
当显示的文件前面是 d 开头的,这说明该文件为目录文件
当显示的文件前面是 - 开头的,这说明该文件为普通文件
ls -l -d
-d 表示不查看目录里面的内容,此时只查看目录本身的内容
2.pwd
功能:显示用户当前所在的目录
在Linux中路径用/:作为路径的分隔符,举个例子:
/root/zxc/lesson1
此时,lesson1为当前的工作目录,而zxc为上级目录
路径存在的价值,在于标识文件的唯一性和定位目标文件
3.cd
功能:改变工作目录。将当前工作目录改变到指定的目录下
cd . 表示进入当前目录
cd .. 表示返回上级目录
cd - 可以直接跳转至最近路径,也就是上次所处的路径
cd ~ 进去当前用户的家目录
如何知道当前用户:
而家目录就是指定用户,登录时默认所处的路劲,叫做家目录
无论是Linux还是window,其目录结构都是树状结构
其中 root后面的 / 不再是路径的分隔符,而是Linux的根目录,不行我们可以ls一下
通过树状图,我们可以明白,路上节点一定是目录,叶子节点一定是空目录或普通文件
下面我们来说说Linux的路径:
绝对路径:从根目录开始,定位一个文件的方式,即具有唯一性的路径
如这个路径: /root/zxc/lesson1
至于为什么绝对路径具有唯一性,这是因为任何一个节点,都只有一个父节点
相对路径:相对于当前用户所处目录,定位文件的路径方式
如这个文件: 假设当前所处路径为 /root/zxc/lesson1,那么../lesson2 就是个相对路径
也就是说相对于当前路径的路径,当然相对路径也是有唯一性的
综上所示:因为路径具有唯一性,所以Linux通常采用路径来定位文件
4.touch
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建⼀个不存在的文件。
我们知道 文件 = 文件内容 + 文件属性
在这里我们简单介绍一下ACM时间
Access(访问时间)、Modify(新建时间)、change(属性改变时间)
当文件内容发生改变,Modify会发生改变
当文件属性发生改变,Change会发生改变
stat指令可以查看不同文件的属性
5.mkdir
功能:在当前目录下创建目录
若当前目录为/root/zxc
mkdir lesson3 在/root/zxc目录下创建lesson3目录
其中使用 mkdir -p可以建立多个目录
如: mkdir -p lesson4/lesson4_1/lesson4_1_1/lesson4_1_1_1
6.rmdir && rm
功能:rmdir可以删除空目录, rm可以同时删除文件或目录
一般我们直接使用rm,不使用rmdir
当账户为root账号是,使用上述指令,系统会再次确定是否删除,如:
想要不再确定,可以加个 -f ,即强制删除
若系统显示"Is a directory" ,加个 -r 即可
rm * 表示删除该目录的所有文件,要是删不掉,可以加个 -rf,即 rm -rf *
当然普通账号想要安全点,可以加个 -i ,即删除前逐⼀询问确认
7.man
功能:Linux的命令有很多参数,我们不可能全记住,可以通过查看联机手册获取帮助
如: 我们想要知道ls指令的作用 ,我们就可以使用man, 即man ls
解释⼀下:man手册分为9章(不同系统可能会有差别)
• 1 是普通的命令
• 2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么
头文件)
• 3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
剩下的6章我们几乎不会用到,感兴趣可以自行查找
如: man 3 printf 即从第三章开始查找,若是不带数字,会从第一章开始依次查找
8.which
功能:查找系统可执行命令,对应的路径
- 所谓命令,其实就是Linux指定目录下的(/usr/bin)可执行文件.
- 指令:本质就是别人写的可执行程序或者某些脚本,被放在了系统的特定路径下(/usr/bin)
- 所谓的安装软件,核心其实就是把目标软件拷贝到系统认识的指定路径下
在介绍两个小命令,file指令:可以查看详细的文件类型
alias指令:对指令取个别名
alias bbc='ls'
他们的本质还是一样的
9.cp
功能: 复制文件或目录
在学习这个指令前,咱先认识一个思想:
Linux下,一切皆文件
echo指令的作用就是将后面的内容打印出来
转化成为理解对文件的操作
这步操作叫输出重定向(>),就是将本该写入显示器文件上的内容写入到hello.txt文件中
输出重定向特点:如果文件不存在,就会新建;如果存在,旧内容会被清空,从而写入新内容
也可以直接建立文件
追加重定向(>>),旧内容不会清除
输入重定向(<),
本来cat指令要从键盘文件读数据,但用了<,就从指定文件读数据
接下来给你们看个好玩的
当我们用Xshell建立一个终端时,我们所建立的终端也是一个文件
这里的0就是我们现在所处的终端,就叫0号终端吧,当我们再次新建终端就会再出现个1号终端
这里我们向0号终端输入内容,咱终端自然打出,若是向1号终端输出,那自然在1号终端显示,就像远程通信一样,很好玩吧.
好了,现在让我们回归指令学习
这里就将hello.txt文件拷贝到上级目录下的lesson2文件下
当然,我们也可以在拷贝的过程中将名字进行改变
这样拷过去的hello.txt文件会被重命名为line.txt文件
想要将一个文件下的所有内容进行拷贝,加上-r
-r 递归处理,将指定目录下的文件与子目录⼀并处理。若源文件或目录的形态,不属于目录或符
号链接,则⼀律视为普通文件处理
-f 强行复制文件或目录, 不论目的文件或目录是否已经存在
10.mv
功能: mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files,经常用来备份文件或者目录
这样我们就可以将hello.txt文件重命名成myhello.txt文件,当然目录也是如此.
将myhello.txt文件移动到lesson2中
另外mv和cp一样,当后面的文件不存在,移动后就会发生重命名
11.cat
功能: 查看目标文件的内容
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
再介绍一个指令:tac
它和cat一样都是打印内容,只不过tac是倒着打印,因为tac就是cat的倒写
12.more 和 less
再学这些指令时,我们再学一个理论
我们用cat打印文件内容时,我们只能打印一些小文件,毕竟大文件在打印时,会直接刷频了,不好观看.
对于大文件,我要提出一个,那就是日志.
每个大型软件都要有日志,日志用于记录软件的各种信息,对于维护软件的安全至关重要
像这种大型文件,自然不能使用cat和tac了
这时就需要more或less
不过我们一般使用less,因为more无法上翻,且less具有搜索功能
less的工具:
q : 退出
/key : 搜索key关键字
n : 下一个
13.head 和 tail
head的功能:显示文件开头,具体几行可以自己设置,默认是10行
那tail和head差不多,它是显示文件结尾
那我们要是想要中间的部分呢?
这里就要引入一个感念, | 管道 管道可以将指令进行连接
比如我们想要[20,30]这一区间的内容,那我们就可以这样写:
head -30 myhello.txt | tail 10
这样我们就可以查看这部分区间的内容了
14.date
功能: 指定格式显示时间: date +%Y:%m:%d
%H : 小时
%M : 分钟
%S : 秒
%X : 相当于 %H:%M:%S
%d : 日
%m: 月份
%Y : 完整年份
%F : 相当于 %Y-%m-%d
时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
时间->时间戳:date +%s
时间戳->时间:date -d@1508749502
这再说一个指令:cal
它查看日历等时间信息
15.find
功能:用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)
这里的意思是:在/root/lesson2路径下,查找名叫myhello.txt的文件
//Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选
项也很多,想要了解的可以通过大模型经行学习。
16.whereis
功能:用于找到程序的源、⼆进制文件或手册
17.grep
功能:在文件中搜索字符串,将找到的行打印出来,用于文本过滤
常用选项:
- -i :忽略大小写的不同,所以大小写视为相同
- -n :顺便输出行号
- -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那⼀行
18.top
功能:动态显示进程状态、CPU、内存等关键指标。
常用选项:
q:退出top
-d : 刷新的时间周期 如: top -d 2 每隔两秒刷新
-n: 刷新次数,次数一到自动退出 如 top -n 5
19.zip/unzip
在学之前我们先了解一下打包压缩.
打包压缩是把我们的文件数据进行归档,形成一个文件的过程
好处:网络发送方便,节省磁盘空间
zip:打包 unzip:解包 这两个指令需要下载一下
CentOS系统: yum install -y zip unzip
Ubuntu系统 : apt install -y zip unzip
这里就将hello.txt打包成hello.zip文件
解包更简单:
默认都在当先目录下打包压缩
-r:递归处理,将指定目录下的所有文件和子目录⼀并打包处理
-d: 可以自主选择解压到的目录
我们还可以通过lrzsz将打包文件发送到Windows下
下载方式: yum/apt install -y lrzsz
当然我们也可以接收Windows的文件
20.tar
功能:打包/解包,不打开它,直接看内容
-c :建立⼀个压缩文件的参数指令(create 的意思);
-x :解开⼀个压缩文件的参数指令!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
打包:
解包:
21.bc
功能:计算器,可进行浮点运算.标准输入键盘文件
22.uname
功能: uname用来获取电脑和操作系统的相关信息,可显示linux主机所用的操作系统的版本、硬件的名称等基本信息
还有一个可以用来查软件的指令:
23.file
功能:辨识文件类型。
语法: file [选项] 文件或目录...
常用选项:
- -c:详细显示指令执行过程,便于排错或分析程序执行的情形。
- -z:尝试去解读压缩文件的内容。
24.热键
- [Tab]按键---具有『命令补全』和『档案补齐』的功能
- [Ctrl]-c按键---让当前的程序『停掉』
- [Ctrl]-d按键---通常代表着:『键盘输⼊结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit
- [Ctrl]-r按键--对历史命令进行搜索
- !命令字符 -- 执行对应的命令
- history指令 --可以查看之前1000行命令
- reboot -- 重启系统
- shutdown -- 系统关机
二、shell命令以及运行原理
命令的本质,其实就是Linux系统中指定目录下的可执行程序
[root@iZ2ze83dph3c7mk6rs762eZ lesson1]# 这就是一个命令行
root : 用户名
iZ2ze83dph3c7mk6rs762eZ : 主机名
lesson1 : 当前工作目录
# : 提示符
Linux严格意义上说的是⼀个操作系统,我们称之为“核心(kernel)“ ,但我们⼀般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
从技术角度,Shell的最简单定义:命令行解释器主要包含:
- 将使用者的命令翻译给核心处理。
- 同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来⼀个应用程序)。 shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
操作系统(OS)是一款进行软硬件资源管理的软件(手段),是为了给用户提供一个良好(稳定,高效,安全)的运行环境(目的)
三、Linux权限的概念
1.Linux文件类型
Windows区分文件类型,是用文件名后缀区分的
Linux区分文件类型,是用文件的属性列区分的
虽然Linux不以文件后缀区分文件类型,但不代表用户不能使用后缀.
另外Linux不关心后缀,但用户使用的工具(如:gcc)是要关心后缀滴
文件类型:
- d:文件夹
- -:普通文件(源代码,文本文件,可执行文件,音视频,各种文档,库文件....)
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件 (pipe)
- c:字符设备文件(例如屏幕等串口设备,键盘)
- s:套接口文件
2.Linux用户(root/普通用户)
多用户操作系统:
root : Linux管理员(一个)
普通用户 : 可以有多个
用户登录和切换问题:
adduser ### 添加用户
passwd ### 设置密码
userdel -r ### 删除用户
普通用户->root:
su root 之后输入root密码 当前工作目录不变
su - root 之后输入root密码 重新登录,处于家目录中/root
普通用户->普通用户:
su ### 之后输入###密码
root->普通用户:
su ### 直接转换不用密码
用户权限提升:
指令前加上 sudo (指令提权功能,以root身份运行该命令)
默认新增用户,无法直接执行sudo,新用户不受系统信任
输出指令nano /etc/sudoers sudoers(相当于Linux系统的用户白名单)
找到这一行,将普通用户添加到root下
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
### ALL=(ALL) ALL
3.权限的理论解释
权限 = 人 + 事物属性 Linux 一切皆文件
文件权限 = 用户 + 文件属性(权限属性->r w x)
所以权限就是:能/不能干什么事情.
我们举个例子:
在现实生活中,人是由角色和真实的自己组成的 人 = 角色 + 真实的自己
角色带给人不同的权限,所以权限约束的永远是角色! 权限 = 角色 + 文件的权限属性
而Linux把角色分成三类:拥有者,所属组,other角色,三种角色要由Linux中具体的人来扮演
我们就这拥有者这个角色来说一下文件的权限属性(rwx):
有r代表可读,有w代表可写,有x代表可执行,有-代表相应权限没有. 即有无
4.权限的操作实验
方法一:
u是拥有者,g是所属组,o是other,a是所有(all)
给三个例子:
chmod u+x hello.txt 给拥有者加上x权限
chmod u-r,o-r hello.txt 给拥有者和other去掉r权限
chmod a+x hello.txt 给三位角色都加上x权限
方法二:
有代表1,无代表0,那rwx的二进制就是111,---的二进制就是000
chmod 八进制 filename
chmod 777 hello.txt 给三位角色都加上rwx权限
chmod 666 hello.txt 给三位角色都加上rw权限
权限的特点:
- 身份比配,只会从拥有者,所属组,other的顺序匹配成功一次
比如:一个文件的拥有者和所属组都是你自己,你给拥有者限制了读权限,但没有给所属组限制,此时你想:我的拥有者权限没了,但我还是所属组啊,依旧可以执行,但不行,因为身份只能匹配成功一次,你作为拥有者是没权限读这个文件的
- 可执行权限和能执行是两码事 可执行文件 = 可执行权限 + 本身能执行
- root超级管理员,无视权限,随意对文件读写执行修改权限.
- 拥有者是我自己,但我想把拥有者换成另一个人,此时我无法更改,因为这样的修改需征得另一个人的同意,毕竟不能什么东西都要,万一是个黑锅呢?也就是说需要root进行提权
- 改拥有者的指令chown 改所属组的指令chgrp
如: sudo chown zxc hello.txt sudo chgrp zxc hello.txt
合并->sudo chown zxc:zxc hello.txt 拥有者和所属组都变成zxc用户了
5.目录的权限
- r: 是否运行用户查看执行目录下的文件信息
- w: 该用户是否可以修改属性(文件名)或者删除/新建执行目录下的文件
- x:该用户是否可以进入目录
Linux的文件(普通或者目录),新建的时候,缺省的权限为什么是我们看到的样子?
普通文件: 起始权限 666
目录文件: 起始权限 777
这里提出一个新概念:权限编码 umask
权限编码:过滤掉在权限掩码中出现的权限
这种计算方法可不是减法,而是按位与,即起始权限 & (-umask)
所以最终权限 = 起始权限 去掉 umask
当然umask也是可以修改的 umask 777 这样umask就是从0002变成了0777
6.粘滞位
这里提出一个情景:
普通用户a创建了一个目录,此时root用户在这个目录里新建一个文件,a看不了该文件,但可以删除该文件,因为a用户在该目录里具有w权限,可以删除文件.
当然这种场景在普通用户间是不存在的,因为其他普通用户根本进不来该目录.
当然若是想让多个普通账户之间,进行文件或者数据共享,这时就需要root账户建立一个公共目录,普通账户以other身份进行数据共享.
但这有一个缺点,那就是所有普通账户都有w权限,那代表普通账户可以互删彼此的文件
那如何做到防止普通账户删彼此文件呢?
这就要引入一个新的权限:粘滞位 t
具有粘滞位的目录,那里面的文件只有文件的拥有者和root能删除了
如: chmod +t 目录
总结
学习Linux指令不用死记硬背,就像使用某种工具一样,多用就会了.
Linux权限重在理解,重点就在这句 权限 = 角色 + 文件的权限属性
简单介绍一些Linux指令和权限的知识,谢谢观看。