目录
- ls 指令
- pwd 命令
- cd 指令
- tree
- which
- ll
- whoami
- touch 指令
- stat
- mkdir 指令
- rmdir 指令 && rm 指令
- man指令
- cp指令
- mv 指令
- cat
- tac
- more
- less
- head指令
- tail 指令
- 问题:如何查看中间的某些?
- echo
- 时间相关的指令
- date
- 时间戳
- cal 指令
- find指令
- grep 指令
- ctrl + R
- zip/unzip指令 压缩和解压缩
- tar指令 打包
- bc 指令
- uname
- 重要的几个热键[Tab],[ctrl]-c, [ctrl]-d,[ctrl]-r
- file
- 关机
- shell命令以及运行原理
- Linux权限管理
- chmod (改变文件权限)
- chown 修改文件的拥有者
- chgrp 修改文件的所属组
- 粘滞位
- umask 权限掩码
- file指令:
初始状态:
建立了一个用户sakeww
在这个用户下创建了一个learn1 文件 和 learn2 文件
在learn1 里面 touch test.c
然后nano test.c 在里面写下一段代码
gcc test.c 生成 a.out
ls 指令
功能:
ls 查看当前目录下对应的文件
ls -a 列出目录下的所有文件
ls -l 列出文件的详细属性信息
ls -a -l 列出目录下文件的详细属性信息
延伸:
. 当前路径
… 上级路径
我们cd . . 跳转至上一目录 sakeww
ls -a -l learn1
便可查看 当前目录下的 learn1 中的 详细信息
上述两种输入,输出的结果都是一样的
默认情况下ls 目录,会显示目录里面的内容
–》目录就是文件
如何查看这个目录的相关属性,而不是目录里面的内容?
ls -a -l -n 和 ls -a -l 区别:
将我们的用户名和账号信息转换为数字
pwd 命令
功能:显示用户当前所在目录
cd 指令
功能:改变工作目录。将当前工作目录改变到指定的目录下。
上述操作详解:
pwd 先显示当前所在目录
cd . 跳转至当前目录(也就是在当前目录下蹦跶一下,具体详情不知,但结果就是没有结果)
cd . . 跳转至上一级目录
(从上面操作中,cd … 一直持续下去,就会到达 / (根目录) 就不会继续上去了)
返回至我们刚才所在的目录:
延伸:几乎所有的操作系统,管理文件的方式,基本都是采用多叉树的形式
因为组织文件的方式主要受目录约束
延伸:为什么我们可以‘采用路径’的方式,进行定位文件
/home/sakeww/learn1
因为具有唯一性 —>每一个节点,都只有一个父节点
即:我们从目标文件可以通过父节点返回至最后的根节点
即:我们也可以从根目录可以定位到我们的目标文件
我们将从根目录开始到目标文件 称为绝对路径
相对路径:
我们现在所处learn1 中,可以通过ls -a …/learn2
来查看learn1 的上级目录sakeww 的另一个文件: learn2
我们将…/learn2 这种不以绝对路径的方式打开或查看另一个文件的路径方式叫做:相对路径
相对路径不能唯一的表示一个文件
唯一标识文件:就是在任何情况下都能通过一定的路径打开或查看到这个文件
延伸:我们可以通过 ./a.out 运行代码,生成我们想要的东西
两种方式都是相同的,可以通过绝对路径和相对路径都可以执行代码
cd / 直接到达根目录
cd - 就会返回至我们最近的一次的目录
返回至当前用户对应的工作目录
tree
功能:将当前目录按照树形结构显示出来
我们先去返回至learn1 上级目录 cd . .
然后使用tree 就可以看见我们当前目录下的树形结构
注意:有些情况下你的tree运行不了
yum install -y tree (1)
yum install -y epel -release (2)
先运行(1),如果不行
运行(2),然后运行(1)
which
功能:查看特定指令的系统路径
查找可执行程序的命令
Linux本身是具有配色方案的,一般带色的就是不同的文件类型
一般情况下:
ls 是一个可执行程序,所以就是绿色的
learn1蓝色的 就是目录
结论:指令本质上也是linux上面的一些程序,本质上也就是叫做文件(.exe 文件 或者可以执行的程序)
延伸:
alias 别名
上述中: alias ls=‘ls --color=auto’
ls 就是 ‘ls --color=auto’ 的别名
我们也可以用alias起别名,但是不建议
这个别名的生命周期就只有你这个关机,关机后就结束了
(可以通过修改系统,使这个生命周期延长,但是强烈不建议)
ll
相当于: ls -l 就是一个别名
whoami
用来查看当前的登录linux的用户是谁?
touch 指令
功能: 创建文件,普通的文本文件
功能二:更新文件的最近创建时间,最近修改时间
则两次touch myfile.txt 修改了myfile.txt 的三个时间
也可以 touch -a 修改三个时间 touch -m修改后两个时间 touch -c 只修改最后一个时间
stat
功能:查看文件属性
Modify time
Modify 指最后一次修改数据的时间,当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性或权限。
Change time
Change 指最后一次修改元数据的时间 ,当该文件的“状态”改变时,就会更新这个时间,也就是说,当文件的权限与属性被更改时,就会更新这个时间。
Access time
Access 指最后一次读取的时间,当“该文件的内容被取用”时,就会更新这个读取时间。举例来说,我们使用cat去读取一个文件时,就会更新该文件的Access time。
mkdir 指令
功能:在当前目录下创建一个名为 “xxxxx”的目录
相当于我们创建一个文件夹
创建多级目录
先用rm -r 删除learn3 这个目录
然后:通过 mkdir -p learn3/a/b 创建多级目录
也可以用tree来看这个目录
mkdir -p xxx 创建一条路径
mkdir xxx 默认创建一个空目录
本质是在路径树中,新增路径或者节点
rmdir 指令 && rm 指令
rmdir通常删除的是空目录
删除目录需要 rm -r 目录名
rm -f xxx 强制删除,但也受权限限制,
延伸:
当你电脑卡的时候(xiang yao shan ku pao lu),在root权限下输入:
rm -rf /
man指令
man 1 xxx 查看普通命令
man 2 xxx 查看系统调用函数
man 3 xxx 查看c语言的一些库函数相关信息(相当于MSDN)
。。。。。。
默认情况下man xxx 查看的是1 里面的内容
也可以通过 man man 来进行查看这个man如何使用
按 q 就可以退出我们查看的文件
延伸:安装man
yum install -y man-pages
cp指令
功能: 复制文件或目录
如图在learn1 中,将test.c 拷贝一份至cp.c中
也可以拷贝到指定目录中去
拷贝一个目录至一个新目录
总结:
拷贝普通文件 cp
拷贝目录 cp -rf
mv 指令
功能1:相当于剪切功能
将learn_backup 中的test.c 文件传进learn2中
功能2:重命名
cp一个cp.c 然后通过mv 将其改变为copy.c
也可以通过此方法改变文件名
mv 指定文件路径 指定地点路径
cat
先写一个脚本
然后进入脚本: vim file.txt
cat : 查看文件内容(只是查看文件内容)
nano vim 也可以
如果用cat -n file.txt 可以直接查看至最后一行脚本,并且不用通过 :wq 来退出脚本
可以通过 cat -n xxx 查看文件并给文件前面标记目录行
tac
tac 输出的内容和 cat 输出的内容正好相反
tac逆序输出文件内容
cat正序输出文件内容
cat 后面不跟路径
默认从键盘读取内容
我们将键盘这样的设备叫做:标准输入
我们将显示器叫做:标准输出
两种都可以输出
< 输入重定向
把文件的内容作为原始数据的内容传给对应的程序,让该程序处理该数据
more
功能: more命令,功能类似 cat
结果:
第一行开始把屏幕显示满后就不再显示
按 回车 就可以继续往下看
按q 就可以退出
只看前五行 按回车就可以继续
查看100行左右的脚本
直接在输出后结果中输入 : /100 回车即可
less
相当于more
只不过比more功能强大
可以按 ↑ ↓ 键进行上下翻
同理:有more的q /100 等功能
延伸:
显示行号 less -N xxx
延伸:
如果查看大文件,不想打开他,more/less
推荐用 less
什么叫做大文件?
1.日志 .log文件
系统中,是存在各种日志的,就是一些保存软件运行过程中对应的运行数据
软件都需要有日志信息
2.别人写好的代码
head指令
head 默认打开前面十行
head -number 打开前面number行
tail 指令
和head类似,这个是查看后十行
总结:
head 和tail 是 文本文件的局部查看从头,从尾
问题:如何查看中间的某些?
问题:查找【100,120】
方法一:
将file.txt 的前一百二十行 写入 temp.txt 中
步骤二:
提取后二十行
方法二:
我们将 | 称为 管道 (管道是一种文件)
运行特征:将file.txt 的前120 行提取出来,经过管道将数据流入到 tail中,然后提取后二十行
也可以类似这样:
延伸:使用管道的时候,默认印是的发生了重定向
echo
专业:将输出字符串,显示到标准输出
默认输出空行
也可以后跟字符串,输出字符串
再次echo 重新输入的字符串就会覆盖原字符串
我们echo 一个字符串至一个没有的文件里
结果:创建文件log.txt 然后在里面写入了 echo 后的字符串
这种技术就叫做 重定向
echo “hello” > log.txt 叫做输出重定向,目标不存在,会自动创建之
输出重定向:本来应该显示到显示器的内容,重定向写入目标文件中
当我们重新echo 字符串至特定路径 会修改里面的内容
输出重定向,会清空原始文件内容,然后重新写入
两个> 便会补充新的字符串至目标文件
叫做:追加重定向,本质上也是写入
时间相关的指令
date
也可以选择直输出特定需要的,按照自己想要的方式输出
具体可查看:
时间戳
可以从时间戳反推 具体时间
延伸:
也就是1970年1月1日到00:00 到现在所经过的毫秒
部分有北京时间,所以我们中国的是1970年1月1日到08:00至今
上面的-d 可以写成我们想要的格式: +%Y/%m/%d 等等
延伸:
在日志中,会涵盖时间信息
时间信息分为普通时间和 时间戳
普通时间是给人看的
时间戳是给机器看的
cal 指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。 “阳历”又名“太阳
历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
查看当前月份的日历
cal 加年份 直接显示当年所有日历
cal -y 2022 -y可以省略
cal -3 显示上一个月,本月,下一个月的日历信息显示出来
find指令
功能:是一条在linux命令中,查找指定文件的命令
延伸:在vs2019下写的C/C++代码最终写的是文本类代码,
实际上这些代码经过编译之后,最终会形成 .exe 文件
这个.exe 就是写的代码经过编译形成的目标可执行程序
也就是写代码的目的
即:在linux中,我们也会用C/C++写代码,形成的程序也就是Linux下的可执行程序
即:命令,本质上在系统中,也是一个可能用C/C++等脚本语言,所写的基本命令,工具,程序,指令,这些都是我们在磁盘中的一些文件
即:指令,程序,命令,工具等,本质 都是可执行程序
用法: find 某一路径 -name 文件名
从这个路径指定的地点开始查找 (文件名)是文件名的 文件
返回所有地址
延伸:
当我们查找的文件比较多时,我们第一遍查找的时间会很长,第二遍就会很快了
grep 指令
问题:如何把我们的目标文件中所有关于‘9’的每一行显示出来?
行过滤工具
同理可以把 ‘99’的过滤出来
也可以:
cat file.txt | grep -v ‘9’ 将含有 ‘9’的剔除然后输出
延伸:
-i:忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
-i 演示
grep ‘hello 99[0-5]’ file.txt 匹配hello 99 这个一定要有 后面的【0-5】只要有就出来,没有就算了
对比显示test.txt 里面的内容
将 A 开头的全部显示出来
即:grep是支持正则表达式的
ctrl + R
第三行的比较长,但是我们以前写过,我们知道这个一行里面有个while
所以: ctrl+ R 然后输入while 按回车就会形成上面的命令
CTRL + R 就是上图效果,
可以使用 CTRL+ C 返回我们正常的操作
zip/unzip指令 压缩和解压缩
功能:将目录或问价压缩成zip格式
常用:-r 递 归处理,将指定目录下的所有文件和子目录一并处理
用法演示:
第一步创建一个文件夹learn3 里面放入四个文件 file1234 然后给file1 里面输入一些字符串,返回我们的上一目录
在命令行上输入 zip 回车
查看时候装有zip 如果没有,自己安装一下
创建一个test 文件
可以通过 tree查看一下
进入test中
我们发现这样只是将 learn3 这个文件目录压缩了,里面的内容没有被压缩
即:默认情况下,zip只会默认对默认的文件进行压缩,里面的不会进行
压缩一个文件我们直接 zip加文件
压缩目录及目录里面的所有东西,zip -r + 文件
解压:
也可以解压到指定目录 -d
tar指令 打包
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
后面加上-C 加 指定路径 就可以解压到指定路径
延伸:打包和压缩
打包:将所有东西 分文别类 的放在一起
压缩:以减少空间为目的的一种压缩方案
bc 指令
ctrl + C 返回我们正常操作台
也可以利用管道进行计算
uname
uname 可以直接查看我们Linux的一些属性信息
VM-24-4-centos 当前的主机名
3.10.0-1160.45.1.el7.x86_64 当前的内核版本
3 主版本 10次版本(偶数为稳定版本,奇数为测试版本) 0修正信息
el7 代表centos7
x86_64属于计算机的体系结构,计算机所采用的cpu平台
inter对应的pc端的cpu就算是 X86
SMP 表示我们cpu支持多道处理
延伸:
一般电脑的X64 就代表 x86_64
如果只有x86 那就代表:x86_32
重要的几个热键[Tab],[ctrl]-c, [ctrl]-d,[ctrl]-r
[Tab]按键—具有『命令补全』和『档案补齐』的功能
[Ctrl]-c按键—让当前的程序『停掉』(不想继续执行这个命令 代码死循环 )
[Ctrl]-d按键—通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit
我们在指令行第一次输入就会退出我们这个用户,在按一次就会直接退出xshell
[ctrl]-r输入我们的历史相似命令
history显示我们输入的历史指令
file
查看某个文件的具体信息
关机
语法: shutdown [选项] ** 常见选项: **
-h : 将系统的服务停掉后,立即关机。
-r : 在将系统的服务停掉之后就重新启动
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
shell命令以及运行原理
当我们打开xshell 输入我们的用户名sakeww和密码后会:
这个整体我们称之为:命令行
后面写的内容叫做:命令+选项
问题:我们输入命令,这个命令是如何跑起来的
延伸:
广义上,linux发行版 = Linux内核 + 外壳程序
用图像表示:外壳程序包含了内核os
外壳程序在Linux下,叫做 shell 常用的是bash
外壳程序在windows下 相当于 gui
gui 简单介绍:图形化界面,就是看到的各种窗口图形
狭义上,Linux = Linux内核
shell :命令行解释器
一般情况下,作为一个普通用户,是不能直接合操作系统沟通的,因为操作系统是什么,操作系统有什么功能,操作系统的基本特征是什么我们一点也不清楚,所以我们让用户直接和操作系统沟通前提条件是:我们的用户要了解操作系统,对于普通用户,成本太高,所以我们要有一个外壳程序来帮助我们进行,某种命令的解释,其中外壳程序在Linux上就是所谓的shell,用来和我们的操作系统沟通
为什么不能直接使用内核?内核的使用成本很高,而且用户和操作系统沟通权限约束的问题,对我们来讲你直接让操作系统办事,万一这件事是有问题的,是一件错误的事情,直接让他办理,有可能出现各种问题
所以我们直接和外壳程序进行沟通也就是 shell和bash
shell命令行解释器 他的核心作用就是:把用户的命令翻译给操作系统,让操作系统去执行处理
操作系统执行完后,就会把结果翻译给用户
为什么要存在 shell?
1.因为他要帮助我们和 操作系统之间的命令进行传递,直接或者间接的保护操作系统
2. 我们的命令行解释器:shell直接帮助我们和操作系统之间进行传递交换信息
或者创建子进程bash 用于我们和操作系统之间的信息传递和交换信息
延伸:
关于 shell和bash
shell是所有的bash的一个统称
Linux权限管理
Linux中,默认两类用户:
root :超级管理员,具有非常高的权限
普通用户:具有一般权限,需要受权限约束的
切换用户:
whoami查看当前用户是谁?
su -
然后输入你的root 密码
返回我们的sakeww用户
在root的情况下:
我们可以su - 加用户名
到达我们指定用户(因为我之创建一个用户所以只能这样)
这个方式我们不建议
我们建议:exit 或者 CTRL+ d
为什么?
我们先切换几次用户
对比我们之前的这个操作,我们会发现多了很多bash 子进程
即:每切换一次多一行bash
提升某一文件的权限:
图示为提升失败,我们的sakeww没有在 /etc/sudoers 添加信任关系
正确的应为:root.txt的第二个sakeww应为root
什么是权限:
权限约束的是人和人的操作,文件本身具有天然的权限属性:r + w + x(读写执行)
一件事情是否允许被特定的人做, 权限等于人加事物的属性
权限的操作:修改人或者修改属性
随便打开一份文件,用ll打开
中间有两个sakeww
第一个sakeww是文件的拥有者,第二个是所属组
linux中的用户类别:
1.拥有者 owner 即:我们这个用户创建的文件
2.所属组 group
3.其他 other 即:除了我之外的所有人
所属组:一个服务器下有两个小组,两个小组共同竞争,你是a组的人,那么这个文件就只能让你的小组进行操作。
拥有者所属组,other指的是一种角色身份
root和普通用户指的是具体一个人
这一列一共有十个字符
第一个字符用来标识文件类型,Linux系统中,不以文件后缀作为区分文件类型的方式
(-)普通文件【文本,各种静态库,可执行程序,源程序】
(d)目录文件
(c)字符设备文件:键盘与显示器
(b)块设备文件:磁盘
(p)管道文件:通信
(l)链接文件:软链接
Linux一切皆文件
延伸:我们将test.c改为test
我们gcc test会发现运行不了
我们cat test 此时显示的就是我们输入的代码
我们再将test改为test.c
然后gcc 这样是可以运行的
为什么?
gcc 等一系列编译器都是系统上的命令,
linux是这样认为的,但是gcc是另外的一种认为法
这个第一列一共有十个字符(第二个到最后一个)
用户分为三类:拥有者,所属组,其他人
三三为一组,依次按照顺序,分配给这三类
r 读 w写 x执行 -不具有这个权限
问题:这十个字符是否为对应文件的属性?拥有者,所属组,其他人是否为特定的人群
是,是
属性和特定的人群对应起来,约束了指定人群拥有的属性,这就叫做权限约束人,约束人的一些行为
chmod (改变文件权限)
修改某一用户的特定权限
文件和文件目录的所有者: u—User(中国平民 法律问题)
文件和文件目录的所有者所在的组的用户: g—Group(不多说)
其它用户: o—Others (外国人)
修改root.txt的r读权限,然后测试是否能读取
恢复root.txt的读取功能,然后读取,因为里面没有任何内容,所以,,,
问题:我们给root.txt增加x执行权限,为什么不能执行?
文本文件执行不了,相当于我们在windows下可以将txt文件改成exe文件,但是执行不了
问题二:这种修改的时限是多少?
永久修改
chomd g-rw root.txt 删除g 的两个权限
chomd a+rwx root.txt 给所有人加上三个权限,
也可以 chomd u+rwx,g+rwx,o+rwx 给所有人加上权限,(可以用逗号表达时进行同时操作)
延伸:
删除这个root.txt文件,登录root账户,然后进入这个learn4,创建一个root.txt文件,如下过程
此时test.txt是用户sakeww这个用户的,我们的root对于test.txt来说是一个o (other)的身份
我们从上图中可以看出,我们root对于这个test.txt没有w写 权限,但是我们的操作是可以写进去的
即:这个权限限制的只是别的用户,root除外
我们用root的身份在root.txt文件里面写入一段话,然后我们切回我们的sakeww身份
此时我们的sakeww用户对于root这个用户来说就是一个other用户
延伸:
文件的最开始十个字符中,后面九个是分为三三一组
可以用111 表示rwx 000表示—
这三个数字用二进制表示就是7和0
那么我们可以用数字来直接对其进行修改权限
chown 修改文件的拥有者
可以直接使用sudo 在sakeww用户下进行修改
也可以切换用户身份至root,对其进行修改
如图即将test.txt文件的拥有者改为root
延伸:
也可以通过
chown root:root test.txt
一次性将文件的拥有者和所属组都改变
chgrp 修改文件的所属组
用法和chown 一样,修改的是第二个sakeww
用法如下:
切回用户sakeww,然后使用chgrp 发现可以修改这个所属组?
文件是你的,所以你可以修改这个文件的所属组
即:root.txt的拥有者是root.txt你就不能修改这个文件的所属组
延伸:
other包括root和other
当我们修改拥有者和所属组的时候
当我们的拥有者和所属组都是root时,那么other就是除了root之外的人
否则就是root和other
粘滞位
引入:—》我们用root用户在learn4创建一个test文件
然后用root用户和sakeww用户在test下创建一些txt文件
sakeww用户在root_file文件的权限来说就是other 我们只拥有:r权限
我们在root权限下修改这些文件的权限
问题:sakeww用户在root_file1 文件下没有任何权限,为什么可以删除这个文件?
我们退回上一路径
test的普通用户对于test是具有 rwx权限的,所以可以删除
当我们没有w权限时我们是不可以删除这个root_file1 的
我们有一个需求:
other可以在特定目录下创建文件,并写入
但是不像让任何人删除自己的文件
创建和删除是w权限,但是我们只想创建,不能删除--------引入粘滞位
此时我们的test 的other有了t权限
此时我们用root用户进入test是不能删除这个文件的
总结:粘滞位
chmod o+t 目录
1.粘滞位只能对目录设置
2.一般是限制other权限的
3.对设置了粘滞位的目录,在该目录下,只能文件的拥有者和root可以删除,其他人不可以删除
延伸:
为什么系统中的文件,创建出来的默认权限是,固定的?
默认权限:
普通文件:666
目录文件:777
umask 权限掩码
功能:
查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到
umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
file指令:
功能说明:辨识文件类型。
语法: file [选项] 文件或目录…
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容