Linux系统学习【Linux基础指令以及权限问题】


🔥承渊政道: 个人主页
❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法初阶》

《C++初阶知识内容》《Linux系统知识》

✨逆境不吐心中苦,顺境不忘来时路! 🎬 博主简介:

引言:Linux 是一套开源、多用户、多任务的操作系统,广泛用于服务器、嵌入式设备、编程开发等场景,也是计算机相关专业的核心学习内容之一.学习Linux系统知识对于我们以后未来方向的选择和发展有很大的必要,能提高竞争能力.那么Liunx系统又有哪些方面的知识是需要学习和掌握的呢?废话不多说,带着这些疑问,下面跟着小编的节奏🎵一起学习吧!

目录

  • 1.Linux发展史背景
  • 2.Linux系统最大特点---开源
  • 3.Linux官方网站
  • 4.Linux应用场景---企业应用现状
  • 5.Linux发行版本
  • 6.Linux系统搭建学习环境
  • 7.Linux系统中的基本指令
    • [7.1 ls指令](#7.1 ls指令)
    • [7.2 pwd指令](#7.2 pwd指令)
    • [7.3 cd指令](#7.3 cd指令)
    • [7.4 touch指令](#7.4 touch指令)
    • [7.5 mkdir指令](#7.5 mkdir指令)
    • [7.6 rmdir指令&&rm指令](#7.6 rmdir指令&&rm指令)
    • [7.7 man指令](#7.7 man指令)
    • [7.8 cp指令](#7.8 cp指令)
    • [7.9 mv指令](#7.9 mv指令)
    • [7.10 cat指令](#7.10 cat指令)
    • [7.11 more指令](#7.11 more指令)
    • [7.12 less指令](#7.12 less指令)
    • [7.13 head指令](#7.13 head指令)
    • [7.14 tail指令](#7.14 tail指令)
    • [7.15 date指令](#7.15 date指令)
    • [7.16 cal指令](#7.16 cal指令)
    • [7.17 find指令](#7.17 find指令)
    • [7.18 which指令](#7.18 which指令)
    • [7.19 whereis指令](#7.19 whereis指令)
    • [7.20 alias指令](#7.20 alias指令)
    • [7.21 grep指令](#7.21 grep指令)
    • [7.22 zip/unzip指令](#7.22 zip/unzip指令)
    • [7.23 tar指令(重要)](#7.23 tar指令(重要))
    • [7.24 uname ‒r指令](#7.24 uname ‒r指令)
    • [7.25 重要的⼏个热键](#7.25 重要的⼏个热键)
    • [7.26 关机指令](#7.26 关机指令)
    • [7.27 扩展命令](#7.27 扩展命令)
  • 8.shell命令以及运⾏原理
  • 9.Linux权限的概念和管理
    • 9.1权限的核心主体
    • [9.2 文件类型和三种基础权限类型](#9.2 文件类型和三种基础权限类型)
    • [9.3 权限的表示方式](#9.3 权限的表示方式)
    • [9.4 查看文件/目录权限](#9.4 查看文件/目录权限)
    • [9.5 ⽂件访问权限的相关设置⽅法](#9.5 ⽂件访问权限的相关设置⽅法)
    • 9.6⽬录的权限
    • [9.7 粘滞位](#9.7 粘滞位)
    • [9.8 权限的总结](#9.8 权限的总结)

1.Linux发展史背景

1991年10⽉5⽇,赫尔⾟基⼤学的⼀名研究⽣Linus Benedict Torvalds在⼀个Usenet新闻组(comp.os.minix)中宣布他编制出了⼀种类似UNIX的⼩操作系统,叫Linux.新的操作系统是受到另⼀个UNIX的⼩操作系统--- Minix的启发,该系统是由⼀名叫Andrew S Tanenbaum的教师开发的.读者也许猜想所发布的这个系统应该是Linux的0.01版本,实际上不是这样.真正的Linux 0.01版本并没有被发布,原因是0.01版本不实⽤.Linus仅仅在第⼀个Linux的FTP站点(ftp://nic.funet.fi)上提供过这个版本的的源代码.
Torvalds于10⽉5⽇发布的这个Linux版本被称为0.02版,它能够运⾏GNU Bourne AgainShell(bash)和GNU的C编译程序(gcc)以及为数不多的其它语⾔.Torvalds绝对没有想到他设想的⼀种能够针对⾼级业余爱好者和⿊客们的操作系统已经产⽣,这就是⼈们所称的Linux.Linux发布时的版本是0.02,后来⼜有0.03版,然后⼜跳到0.10版.因为世界各地越来越多的程序员都开始开发Linux,它已经达到0.95版.这就意味着正式公布1.0版本的时间已经为期不远了.正式的1.0版本是在1994年公布的


2.Linux系统最大特点---开源

1️⃣Linux是⼀种⾃由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托⽡兹在1991年
⾸次发布,之后在加上⽤⼾空间的应⽤程序之后,就成为了Linux操作系统.严格来讲,Linux只是操作系统内核本⾝,但通常采⽤"Linux内核"来表达该意思.⽽Linux则常⽤来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实⽤⼯具.
2️⃣GNU通⽤公共许可协议(GNU General Public License,简称GNU GPL或GPL),是⼀个⼴泛被使⽤的⾃由软件许可协议条款,最初由理查德斯托曼为GNU计划⽽撰写,GPL给予了计算机程序⾃由软件的定义,任何基于GPL软件开发衍⽣的产品在发布时必须采⽤GPL许可证⽅式,且必须公开源代码.
3️⃣Linux是⾃由软件和开放源代码软件发展中最著名的例⼦.只要遵循GNU通⽤公共许可证,任何个⼈和机构都可以⾃由地使⽤Linux的所有底层源代码,也可以⾃由地修改和再发布.随着Linux操作系统⻜速发展,各种集成在Linux上的开源软件和实⽤⼯具也得到了应⽤和普及,因此,Linux也成为了开源软件的代名词.


3.Linux官方网站

kernel官网


4.Linux应用场景---企业应用现状

1️⃣Linux在服务器领域的发展
随着开源软件在世界范围内影响⼒⽇益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了⼤规模市场应⽤的局⾯.并且保持着快速的增⻓率.尤其在政府、⾦融、农业、交通、电信等国家关键领域.此外,考虑到Linux的快速成⻓性以及国家相关政策的扶持⼒度,Linux服务器产品⼀定能够冲击更⼤的服务器市场.据权威部⻔统计,⽬前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器市场的迅速崛起,已经引起全球IT产业的⾼度关注,并以强劲的势头成为服务器操作系统领域中的中坚⼒量.

2️⃣Linux在桌⾯领域的发展
近年来,特别在国内市场,Linux桌⾯操作系统的发展趋势⾮常迅猛.国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件⼚商都推出的Linux桌⾯操作系统,⽬前已经在政府、企业、OEM等领域得到了⼴泛应⽤.另外SUSE、Ubuntu也相继推出了基于Linux的桌⾯系统,特别是Ubuntu Linux,已经积累了⼤量社区⽤⼾.但是,从系统的整体功能、性能来看,Linux桌⾯系统与Windows系列相⽐还有⼀定的差距,主要表现在系统易⽤性、系统管理、软硬件兼容性、软件的丰富程度等⽅⾯.

3️⃣Linux在移动嵌⼊式领域的发展
Linux的低成本、强⼤的定制功能以及良好的移植性能,使得Linux在嵌⼊式系统⽅⾯也得到⼴泛应⽤,⽬前Linux以⼴泛应⽤于⼿机、平板电脑、路由器、电视和电⼦游戏机等领域.在移动设备上⼴泛使⽤的Android操作系统就是创建在Linux内核之上的.⽬前,Android已经成为全球最流⾏的智能⼿机操作系统,据2015年权威部⻔最新统计,Android操作系统的全球市场份额已达84.6%.此外,思科在⽹络防⽕墙和路由器也使⽤了定制的Linux,阿⾥云也开发了⼀套基于Linux的操作系统"YunOS",可⽤于智能⼿机、平板电脑和⽹络电视;常⻅的数字视频录像机、舞台灯光控制系统等都在逐渐采⽤定制版本的Linux来实现,⽽这⼀切均归功与Linux与开源的⼒量.

4️⃣Linux在云计算/⼤数据领域的发展
互联⽹产业的迅猛发展,促使云计算、⼤数据产业的形成并快速发展,云计算、⼤数据作为⼀个基于开源软件的平台,Linux占据了核⼼优势;据Linux基⾦会的研究,86%的企业已经使⽤Linux操作系统进⾏云计算、⼤数据平台的构建,⽬前,Linux已开始取代Unix成为最受⻘睐的云计算、⼤数据平台操作系统.


5.Linux发行版本

1️⃣Debian
Debian运⾏起来极其稳定,这使得它⾮常适合⽤于服务器.debian这款操作系统⽆疑并不适合新⼿⽤⼾,⽽是适合系统管理员和⾼级⽤⼾.

2️⃣Ubuntu
Ubuntu是Debian的⼀款衍⽣版,也是当今最受欢迎的免费操作系统.Ubuntu侧重于它在这个市场的应⽤,在服务器、云计算、甚⾄⼀些运⾏Ubuntu Linux的移动设备上很常⻅.Ubuntu是新⼿⽤⼾肯定爱不释⼿的⼀款操作系统.

3️⃣红帽企业级Linux
这是第⼀款⾯向商业市场的Linux发⾏版.它有服务器版本,⽀持众多处理器架构,包括x86和x86_64.红帽公司通过课程红帽认证系统管理员/红帽认证⼯程师(RHCSA/RHCE),对系统管理员进⾏培训和认证.

4️⃣CentOS
CentOS是⼀款企业级Linux发⾏版,它使⽤红帽企业级Linux中的免费源代码重新构建⽽成.这款重构版完全去掉了注册商标以及Binary程序包⽅⾯⼀个⾮常细微的变化.有些⼈不想⽀付⼀⼤笔钱,⼜能领略红帽企业级Linux;对他们来说,CentOS值得⼀试.此外,CentOS的外观和⾏为似乎与⺟发⾏版红帽企业级Linux如出⼀辙.CentOS使⽤YUM来管理软件包.

5️⃣Fedora
⼩巧的Fedora适合那些⼈:想尝试最先进的技术,等不及程序的稳定版出来.其实,Fedora就是红帽公司的⼀个测试平台;产品在成为企业级发⾏版之前,在该平台上进⾏开发和测试.Fedora是⼀款⾮常好的发⾏版,有庞⼤的⽤⼾论坛,软件库中还有为数不少的软件包.

6️⃣Kali Linux
Kali Linux是Debian的⼀款衍⽣版.Kali旨在⽤于渗透测试.Kali的前⾝是Backtrack.⽤于Debian的所有Binary软件包都可以安装到Kali Linux上,⽽Kali的魅⼒或威⼒就来⾃于此.此外,⽀持Debian的⽤⼾论坛为Kali加分不少.Kali随带许多的渗透测试⼯具,⽆论是Wifi、数据库还是其他任何⼯具,都设计成⽴⻢可以使⽤.Kali使⽤APT来管理软件包.毫⽆疑问,Kali Linux是⼀款渗透测试⼯具,或者是⽂明⿊客(恶意⿊客除外)⻘睐的操作系统.


6.Linux系统搭建学习环境

| 方案 | 优点 | 缺点 | 适合人群 |
| 虚拟机 | 完全模拟 Linux 系统,环境独立 | 占用电脑资源(需分配内存/硬盘) | 新手、想深入学习系统配置 |
| Windows Subsystem for Linux(WSL2) | 与 Windows 无缝衔接,无需重启 | 部分系统功能不完整(如少数硬件驱动) | Windows 用户、快速上手命令行 |

云服务器(如阿里云/腾讯云) 真实服务器环境,可远程操作 需付费(学生有优惠套餐) 学习服务器配置、网络相关

以上是小编提供的三个方案,如果让我说推荐用哪一个?我只能说我目前使用的是云服务器-->有华为云、腾讯云、阿里云等等;学生优惠完的价格大概一年不到100元的价格还是能接受的,但这不是重点.
对于windows用户来说: 使用云服务器+Xshell配合使用
对于mac用户来说:使用云服务器+Xterminal配合使用


7.Linux系统中的基本指令

7.1 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 ⼀⾏只输出⼀个⽂件.
Linux任何目录下,都要隐藏存在.和...
Linux系统中,可以存在隐藏文件,隐藏文件往往以"."开头.
Linux系统中,一个"."表示当前路径.两个"..."通常表示上级路径


7.2 pwd指令

语法: pwd
功能:显⽰⽤⼾当前所在的⽬录


7.3 cd指令

语法: cd ⽬录名
功能:改变⼯作⽬录.将当前⼯作⽬录改变到指定的⽬录下
Linux理论知识:路径的认识

1️⃣Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件

2️⃣其中普通⽂件⼀定是⽬录树的叶⼦节点

3️⃣⽬录可能是叶⼦(空⽬录),也可能是路上节点

4️⃣理解路径存在的意义: 树状组织⽅式,都是为了保证快速定位查找到指定的⽂件,⽽定位⽂件就需要具有唯⼀性的⽅案来进⾏定位⽂件.其中任何⼀个节点,都只有⼀个⽗节点,所以,从根⽬录开始,定位指定⽂件,路径具有唯⼀性

5️⃣绝对路径:⼀般从/开始,不依赖其他⽬录的定位⽂件的⽅式

6️⃣相对路径:相对于当前⽤⼾所处⽬录,定位⽂件的路径⽅式

7️⃣绝对路径⼀般不会随着⽤⼾的路径变化⽽丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤

8️⃣相对路径因为它的便捷性,⼀般在命令⾏中使⽤较多

①Linux整个文件结构是树状结构!---多叉树---任何一个节点,都只有一个父节点.
②Linux根目录本质是树形结构的基础!---推导到根目录就不能再退了!
③这颗多叉树,叶子节点,一定是普通文件或者空的文件夹;路上节点(非叶子节点),本质就是文件夹或者目录!
④标识文件唯一性,是通过路径进行标识的!路径为什么具有唯一性?
任何一个多叉树节点,都只有一个父节点从/目标文件定位的时候,路径就是唯一的!



7.4 touch指令

语法::touch [选项]... ⽂件...
功能:touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在的⽂件.
Linux理论知识:⽂件类型的认识
常⽤选项:
-a : change only the access time
-c : change only the modification time


7.5 mkdir指令

语法:mkdir [选项] dirname...
功能:在当前⽬录下创建⼀个名为 "dirname"的⽬录
常⽤选项:
-p/--parents: 可以是⼀个路径名称.此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录.


7.6 rmdir指令&&rm指令

rmdir是⼀个与mkdir相对应的命令,mkdir是建⽴⽬录,⽽rmdir是删除命令
语法:rmdir [-p] [dirName]
适⽤对象:具有当前⽬录操作权限的所有使⽤者
功能:删除空⽬录
常⽤选项:
-p 当⼦⽬录被删除后如果⽗⽬录也变成空⽬录的话,就连带⽗⽬录⼀起删除.
rm命令可以同时删除⽂件或⽬录
语法:rm [-f-i-r-v] [dirName/dir]
适⽤对象:所有使⽤者
功能:删除⽂件或⽬录
常⽤选项:
-f 即使⽂件属性为只读(即写保护),亦直接删除
-i 删除前逐⼀询问确认
-r 删除⽬录及其下所有⽂件


7.7 man指令

Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助
语法: man [选项] 命令
常⽤选项:
-k 根据关键字搜索联机帮助
num 只在第num章节查找
-a 将所有章节的都显示出来,⽐如 man printf 它缺省从第⼀章开始搜索,知道就停⽌,⽤a选项,当按下q退出,他会继续往后⾯搜索,直到所有章节都搜索完毕
解释⼀下:man⼿册分为9章(不同系统可能会有差别)
1️⃣是普通的命令
2️⃣是系统调⽤,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么头⽂件)
3️⃣是库函数,如printf,fread4是特殊⽂件,也就是/dev下的各种设备⽂件
4️⃣略
5️⃣是指⽂件的格式,⽐如passwd,就会说明这个⽂件中各个字段的含义
6️⃣是给游戏留的,由各个游戏⾃⼰定义.
7️⃣是附件还有⼀些变量,⽐如像environ这种全局变量在这⾥就有说明.
8️⃣是系统管理⽤的命令,这些命令只能由root使⽤,如ifconfig.
9️⃣略
man fork--->查看系统调⽤,默认没有这个指令,man就⾃动去2号⼿册查找指令
man 2 frok--->查看系统调⽤
man 3 printf--->查看C库函数
man 7 signal--->查看变量
man man--->查看man⼿册⾃⼰


7.8 cp指令

语法:cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:复制⽂件或⽬录
说明:
cp指令⽤于复制⽂件或⽬录
如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中.
常⽤选项:
-f 或--force 强⾏复制⽂件或⽬录,不论⽬的⽂件或⽬录是否已经存在
-i 或--interactive 覆盖⽂件之前先询问⽤⼾
-r 递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理.若源⽂件或⽬录的形态,不属于⽬录或符号链接,则⼀律视为普通⽂件处理.


7.9 mv指令

mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move (rename)files,经常⽤来备份⽂件
或者⽬录
语法: mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:
1️⃣视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中.
2️⃣当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名.
3️⃣当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源
⽂件均移⾄⽬标⽬录中.
常⽤选项:
-f :force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖
-i :若⽬标⽂件 (destination) 已经存在时,就会询问是否覆盖!


7.10 cat指令

语法:cat [选项] [⽂件]
功能:查看⽬标⽂件的内容
常⽤选项:
-b 对⾮空输出⾏编号,空⾏不做编号
-n 对输出的所有⾏编号
-s 不输出多⾏空⾏


7.11 more指令

语法:more [选项]
功能:more命令,功能类似 cat
常⽤选项:
-n 指定输出⾏数
q 退出more


7.12 less指令

1️⃣less⼯具也是对⽂件或其它输出进⾏分⻚显示⼯具,应该说是linux正统查看⽂件内容的⼯具,功能极其强⼤
2️⃣less 的⽤法⽐起 more 更加的有弹性,在 more 的时候,我们并没有办法向前⾯翻,只能往后⾯看
3️⃣但若使⽤了 less 时,就可以使⽤ [pageup] [pagedown] 等按键的功能来往前往后翻看⽂件,更容易⽤来查看⼀个⽂件的内容
4️⃣除此之外,在 less ⾥头可以拥有更多的搜索功能,不⽌可以向下搜,也可以向上搜.
语法:less [参数] ⽂件
功能:less与more类似,但使⽤less可以随意浏览⽂件,⽽more仅能向前移动,却不能向后移动,⽽且less在查看之前不会加载整个⽂件.
选项:
-i 忽略搜索时的⼤⼩写
-N 显示每⾏的⾏号
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前⼀个搜索(与 / 或 ? 有关)
N:反向重复前⼀个搜索(与 / 或 ? 有关)
q:quit


7.13 head指令

head 与 tail 就像它的名字⼀样的浅显易懂,它是⽤来显示开头或结尾某个数量的⽂字区块,head ⽤来显示档案的开头⾄标准输出中,⽽ tail 想当然尔就是看档案的结尾.
语法:
head [参数]... [⽂件]...
功能:
head ⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏.
选项:
-n<⾏数> 显示的⾏数


7.14 tail指令

tail命令从指定点开始将⽂件写到标准输出.使⽤tail命令的-f选项可以⽅便的查阅正在改变的⽇志⽂件,tail -f filename会把filename⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容.
语法:tail 必要参数 [⽂件]
功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理.常⽤查看⽇志⽂件.
选项:
-f 循环读取
-n<⾏数> 显⽰⾏数


7.15 date指令

指定格式显⽰时间:date +%Y:%m:%d
⽤法: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
②时间戳->时间:date -d@1508749502
③Unix时间戳(英⽂为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1⽉1⽇(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒


7.16 cal指令

cal命令可以⽤来显示公历(阳历)⽇历.公历是现在国际通⽤的历法,⼜称格列历,通称阳历."阳历"⼜名"太阳历",系以地球绕⾏太阳⼀周为⼀年,为西⽅各国所通⽤,故⼜名"西历".
命令格式:cal 参数 [年份]
功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表示年份(1-9999),如有两个参数,则表示⽉份和年份
常⽤选项:
-3 显示系统前⼀个⽉,当前⽉,下⼀个⽉的⽉历
-j 显示在当年中的第⼏天(⼀年⽇期按天算,从1⽉1号算起,默认显示当前⽉在⼀年中的天数)
-y 显示当前年份的⽇历


7.17 find指令

1️⃣Linux下find命令在⽬录结构中搜索⽂件,并执⾏指定的操作.
2️⃣Linux下find命令提供了相当多的查找条件,功能很强⼤.由于find具有强⼤的功能,所以它的选项也很多,其中⼤部分选项都值得我们花时间来了解⼀下.
3️⃣即使系统中含有⽹络⽂件系统(NFS),find命令在该⽂件系统中同样有效,只你具有相应的权限.
4️⃣在运⾏⼀个⾮常消耗资源的find命令时,很多⼈都倾向于把它放在后台执⾏,因为遍历⼀个⼤的
⽂件系统可能会花费很⻓的时间(这⾥是指30G字节以上的⽂件系统).
语法:find pathname -options
功能:⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘)
常⽤选项
-name 按照⽂件名查找⽂件
其他选项需要在查,这个命令其实⽐较复杂


7.18 which指令

功能:搜索系统指定的命令


7.19 whereis指令

功能:⽤于找到程序的源、⼆进制⽂件或⼿册.


7.20 alias指令

功能:设置命令的别名


7.21 grep指令

语法:grep [选项] 搜寻字符串⽂件
功能:在⽂件中搜索字符串,将找到的⾏打印出来
常⽤选项:
-i :忽略⼤⼩写的不同,所以⼤⼩写视为相同
-n :顺便输出⾏号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那⼀⾏


7.22 zip/unzip指令

语法:zip 压缩⽂件.zip ⽬录或⽂件
功能:将⽬录或⽂件压缩成zip格式
常⽤选项
-r:递归处理,将指定⽬录下的所有⽂件和⼦⽬录⼀并处理


7.23 tar指令(重要)

打包/解包,不打开它,直接看内容
语法:tar [-cxtzjvf] ⽂件与⽬录 ...
常用选项
-c :建⽴⼀个压缩⽂件的参数指令(create 的意思)
-x :解开⼀个压缩⽂件的参数指令!
-t :查看 tarfile ⾥⾯的⽂件!
-z :是否同时具有 gzip 的属性?亦即是否需要⽤ gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要⽤ bzip2 压缩?
-v :压缩的过程中显示⽂件!这个常⽤,但不建议⽤在背景执⾏过程!
-f :使⽤档名,请留意,在 f 之后要⽴即接档名喔!不要再加参数!
-C :解压到指定⽬录
例子1️⃣将整个 /etc ⽬录下的⽂件全部打包成为 '/tmp/etc.tar'

root@linux \~\]$ tar -cvf /tmp/etc.tar /etc\<==仅打包,不压缩! \[root@linux \~\]$ tar -zcvf /tmp/etc.tar.gz /etc\<==打包后,以 gzip 压缩 \[root@linux \~\]$ tar -jcvf /tmp/etc.tar.bz2 /etc\<==打包后,以 bzip2 压缩 特别注意,在参数 f 之后的⽂件档名是⾃⼰取的,我们习惯上都⽤ .tar 来作为辨识. 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file 〜 如果加 j 参数,则以 .tar.bz2 来作为附档名啊〜 上述指令在执⾏的时候,会显示⼀个警告讯息: 『\`tar: Removing leading \`/" from member names\`』那是关于绝对路径的特殊设定. 例子2️⃣查阅上述 /tmp/etc.tar.gz ⽂件内有哪些⽂件? \[root@linux \~\]$ tar -ztvf /tmp/etc.tar.gz 由于我们使⽤ gzip 压缩,所以要查阅该 tar file 内的⽂件时,就得要加上 z 这个参数了!这很重要的! 例子3️⃣将 /tmp/etc.tar.gz ⽂件解压缩在 /usr/local/src 底下 \[root@linux \~\]$ cd /usr/local/src \[root@linux src\]$ tar -zxvf /tmp/etc.tar.gz 在预设的情况下,我们可以将压缩档在任何地⽅解开的!以这个范例来说,我先将⼯作⽬录变换到/usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,则解开的⽬录会在 /usr/local/src/etc 呢!另外,如果您进⼊ /usr/local/src/etc则会发现,该⽬录下的⽂件属性与 /etc/ 可能会有所不同喔! 例子4️⃣在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开⽽已 \[root@linux \~\]$ cd /tmp \[root@linux tmp\]$ tar -zxvf /tmp/etc.tar.gz etc/passwd 我可以透过 tar -ztvf 来查阅 tarfile 内的⽂件名称,如果单只要⼀个⽂件,就可以透过这个⽅式来下达!注意到!etc.tar.gz 内的根⽬录 / 是被拿掉了! 例子5️⃣将 /etc/ 内的所有⽂件备份下来,并且保存其权限! \[root@linux \~\]$ tar -zxvpf /tmp/etc.tar.gz /etc 这个 -p 的属性是很重要的,尤其是当您要保留原本⽂件的属性时! 例子6️⃣在 /home 当中,⽐ 2005/06/01 新的⽂件才备份 \[root@linux \~\]$ tar -N "2005/06/01" -zcvf home.tar.gz /home 例子7️⃣我要备份 /home, /etc ,但不要 /home/dmtsai \[root@linux \~\]$ tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/\* /etc 例子8️⃣将 /etc/ 打包后直接解开在 /tmp 底下,⽽不产⽣⽂件! \[root@linux \~\]$ cd /tmp \[root@linux tmp\]$ tar -cvf - /etc \| tar -xvf -


7.24 uname ‒r指令

语法:uname [选项]
功能:uname⽤来获取电脑和操作系统的相关信息.
补充说明:uname可显⽰linux主机所⽤的操作系统的版本、硬件的名称等基本信息.
常⽤选项:
-a或‒all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
lsb_release -a:查看操作系统版本


7.25 重要的⼏个热键

Tab\]按键---具有『命令补全』和『档案补⻬』的功能 \[Ctrl\]-c按键---让当前的程序『停掉』 \[Ctrl\]-d按键---通常代表着:『键盘输⼊结束(End Of File, EOF 戒 End OfInput)』的意思;另外,它也可以⽤来取代exit


7.26 关机指令

语法:shutdown [选项]
常⻅选项:
-h:将系统的服务停掉后,⽴即关机.
-r:在将系统的服务停掉之后就重新启动
-t sec:-t 后⾯加秒数,亦即『过⼏秒后关机』的意思


7.27 扩展命令

1️⃣安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last.
2️⃣⽂件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln.
3️⃣系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab.
4️⃣⽹络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup.
5️⃣系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who.
6️⃣其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode


8.shell命令以及运⾏原理

Linux严格意义上说的是⼀个操作系统,我们称之为"核⼼(kernel)" ,但我们⼀般⽤⼾,不能直接
使⽤kernel.⽽是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通.如何理解?为什么不能直接使⽤kernel?从技术⻆度,Shell的最简单定义:命令⾏解释器(command Interpreter)
主要包含:
1️⃣将使⽤者的命令翻译给核⼼(kernel)处理.
2️⃣同时,将核⼼的处理结果翻译给使⽤者.
对⽐windows GUI,我们操作windows 不是直接操作windows内核,⽽是通过图形接⼝,点击,从⽽完成我们的操作(⽐如进⼊D盘的操作,我们通常是双击D盘盘符.或者运⾏起来⼀个应⽤程序).
shell 对于Linux,有相同的作⽤,主要是对我们的指令进⾏解析,解析指令给Linux内核.反馈结果在通过内核运⾏出结果,通过shell解析给⽤⼾.


9.Linux权限的概念和管理

Linux 权限是操作系统对文件和目录的访问控制机制,核心目的是保障不同用户、用户组对系统资源的访问安全,避免未授权的读取、修改或执行操作.
Linux下有两种⽤⼾:超级⽤⼾(root)、普通⽤⼾.
1️⃣超级⽤⼾:可以再linux系统下做任何事情,不受限制
2️⃣普通⽤⼾:在linux下做有限的事情.
3️⃣超级⽤⼾的命令提示符是"#",普通⽤⼾的命令提示符是"$".
命令:su [⽤⼾名]
功能:切换⽤⼾.
例如,要从root⽤⼾切换到普通⽤⼾user,则使⽤ su user.
要从普通⽤⼾user切换到root⽤⼾则使⽤ su root(root可以省略),此时系统会提示输⼊root⽤⼾的⼝令.


9.1权限的核心主体

Linux 系统中,每个文件/目录都关联三类主体,权限的分配也是围绕这三类主体展开:
1️⃣所有者(User, 缩写 u
指文件或目录的创建者,默认拥有该文件的最高管理权限.
可通过 chown 命令修改所有者,例如 chown user1 test.txttest.txt 的所有者改为 user1
2️⃣所属组(Group, 缩写 g
每个用户至少属于一个用户组,文件会关联一个用户组,组内用户共享该文件的组权限.
可通过 chgrp 命令修改所属组,例如 chgrp group1 test.txt 将文件所属组改为 group1.
3️⃣其他用户(Other, 缩写 o
既不是文件所有者,也不在文件所属组中的所有系统用户,权限通常是三类主体中最低的.
4️⃣补充:所有人(All, 缩写 a
包含 ugo 三类主体,修改权限时用 a 可一次性设置所有主体的权限.

9.2 文件类型和三种基础权限类型

⽂件类型:
d:⽂件夹
-:普通⽂件
l:软链接(类似Windows的快捷⽅式)
b:块设备⽂件(例如硬盘、光驱等)
p:管道⽂件
c:字符设备⽂件(例如屏幕等串⼝设备)
s:套接⼝⽂件
Linux 对文件和目录定义了 读、写、执行 三种基础权限,不同权限对文件和目录的作用不同

权限符号 权限名称 文件的作用 目录的作用
r(read) 读权限 可查看文件内容(如 catless 命令) 可列出目录内的文件(如 ls 命令)
w(write) 写权限 可修改文件内容(如 vim 编辑) 可在目录内增删文件/重命名(如 touchrmmv 命令)
x(execute) 执行权限 可将文件作为程序/脚本运行(如 ./test.sh 可进入该目录(如 cd 命令)

注意:目录必须同时拥有 x(进入)和 r(查看)权限,才能使用ls列出内容;必须拥有xw权限,才能在目录内操作文件. "---"表⽰不具有该项权限


9.3 权限的表示方式

Linux 权限有两种常用的表示形式:符号表示法数字表示法.
1️⃣符号表示法
格式:[所有者权限][所属组权限][其他用户权限],共 9 位字符.
示例:rwxr-xr-- 表示
所有者(u):rwx → 读、写、执行权限
所属组(g):r-x → 读、执行权限,无写权限
其他用户(o):r-- → 仅读权限
无权限的位置用 - 填充.
2️⃣数字表示法(八进制)
原理:将 rwx 分别映射为固定数值,权限组合的数值为对应权限值之和.
r = 4,w = 2,x = 1,无权限 = 0
计算方式:每类主体的权限值相加,最终生成 3 位数字(对应 u、g、o).
示例:
rwx → 4+2+1 = 7
r-x → 4+0+1 = 5
r-- → 4+0+0 = 4
因此 rwxr-xr-- 对应的数字表示为 754.


9.4 查看文件/目录权限

使用 ls -l 命令可以查看当前目录下文件的详细权限信息,示例输出如下:

复制代码
-rwxr-xr-- 1 user1 group1  1024  1月 12 10:00 test.sh
drwxr-xr-x 2 user1 group1  4096  1月 12 11:00 test_dir

第1列的 10 位字符:第 1 位是文件类型 (- 表示普通文件,d 表示目录),后 9 位是权限位 (对应 u、g、o 的 rwx 组合).第 3、4 列分别是所有者所属组.

9.5 ⽂件访问权限的相关设置⽅法

1️⃣ chmod:修改文件/目录的权限
说明:只有⽂件的拥有者和root才可以改变⽂件的权限
符号模式格式 chmod [主体][+/-/=][权限] 文件名
+添加权限 -移除权限 =设置固定权限
示例: chmod u+x test.sh给所有者添加执行权限
示例: chmod a-w test.txt移除所有用户的写权限
数字模式格式 chmod [3位数字] 文件名
示例: chmod 754 test.sh直接设置权限为 rwxr-xr--

2️⃣ chown:修改文件/目录的所有者
格式: chown [新所有者]:[新所属组] 文件名
示例: chown user2:group2 test.txt把文件所有者改为 user2,所属组改为 group2

3️⃣chgrp:修改⽂件或⽬录的所属组
格式: chgrp [参数] ⽤⼾组名 ⽂件名
示例: chgrp users /abc/f2

4️⃣umask:①查看或修改⽂件掩码②新建⽂件夹默认权限=0666③新建⽬录默认权限=0777
④但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值.原因就是创建⽂件或⽬录的
时候还要受到umask的影响.假设默认权限是mask,则实际创建的出来的⽂件权限是:mask &~umask
格式: umask 权限值
将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限.超级⽤⼾默认掩码值为0022,普通⽤⼾默认为0002.
示例: umask 755 umask→查看. umask 044→设置

5️⃣file:辨识⽂件类型.
格式: file [选项] ⽂件或⽬录...
-c:详细显⽰指令执⾏过程,便于排错或分析程序执⾏的情形.
-z:尝试去解读压缩⽂件的内容.
①使⽤sudo分配权限→修改/etc/sudoers ⽂件分配⽂件
chmod 740 /etc/sudoers
vi /etc/sudoer

格式: 接受权限的⽤⼾登陆的主机 =(执⾏命令的⽤⼾)命令

②使⽤ sudo 调⽤授权的命令
$ sudo -u root /usr/sbin/useradd u2
格式: $ sudo --u ⽤⼾名 命令


9.6⽬录的权限

1️⃣可执⾏权限:如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中.
2️⃣可读权限:如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容.
3️⃣可写权限:如果⽬录没有可写权限,则⽆法在⽬录中创建⽂件,也⽆法在⽬录中删除⽂件.
于是,问题来了~~ 换句话来讲,就是只要⽤⼾具有⽬录的写权限,⽤⼾就可以删除⽬录中的⽂件,⽽不论这个⽤⼾是否有这个⽂件的写权限.这好像不太科学啊, 我张三创建的⼀个⽂件, 凭什么被你李四可以删掉? 我们⽤下⾯的过程印证⼀下.

powershell 复制代码
[root@localhost ~]$ chmod 0777 /home/
[root@localhost ~]$ ls /home/ -ld
drwxrwxrwx. 3 root root 4096 1⽉ 13 13:00 /home/
[root@localhost ~]$ touch /home/root.c
[root@localhost ~]$ ls -l /home/
总⽤量 4
-rw-r--r--. 1 root root 0 1⽉ 13 13:01 abc.c
drwxr-xr-x. 27 lisi lisi 4096 1⽉ 13 13:00 lisi
-rw-r--r--. 1 root root 0 1⽉ 13 13:02 root.c
[root@localhost ~]$ su - lisi
[lisi@localhost ~]$ rm /home/root.c #lisi可以删除root创建的⽂件
rm:是否删除有写保护的普通空⽂件 "/home/root.c"?y
[lisi@localhost ~]$ exit
logout

为了解决这个不科学的问题, Linux引⼊了粘滞位的概念.

powershell 复制代码
[root@localhost ~]$ chmod +t /home/ # 加上粘滞位
[root@localhost ~]$ ls -ld /home/
drwxrwxrwt. 3 root root 4096 1⽉ 13 13:21 /home/
[root@localhost ~]$ su - lisi
[lisi@localhost ~]$ rm /home/abc.c #litao不能删除别⼈的⽂件
rm:是否删除有写保护的普通空⽂件 "/home/abc.c"?y
rm: ⽆法删除"/home/abc.c": 不允许的操作

9.7 粘滞位

粘滞位(Sticky Bit)是 Linux 中三种特殊权限之一 ,仅对目录生效 ,核心作用是保护公共目录中的文件不被非所有者删除 ,常用于多人共享的目录(如 /tmp).
1️⃣粘滞位的核心作用
在 Linux 中,默认情况下,若一个目录对其他用户(o) 开放了写权限(w) ,那么任何用户都可以删除该目录下的文件,无论自己是不是文件所有者.
粘滞位的作用就是打破这个规则
当目录被设置粘滞位后,只有三类用户可以删除该目录下的文件
①文件的所有者
②目录的所有者
超级管理员root 用户
2️⃣粘滞位的表示方式
粘滞位有符号表示法数字表示法 两种形式,与基础权限(rwx)结合使用.
①符号表示法
粘滞位的符号是t,占用其他用户(o) 权限位的执行权限(x) 位置:
若目录对其他用户开放了执行权限(x) ,则显示为 t(小写)
若目录对其他用户无执行权限(x) ,则显示为 T(大写)

权限示例 含义
rwxrwxrwt 其他用户有 x 权限,粘滞位生效(显示 t
rwxrwxrwT 其他用户无 x 权限,粘滞位标记为 T(实际功能受限)

提示:目录的 x 权限是进入目录的基础,因此设置粘滞位的目录通常会保留其他用户的 x 权限,即显示为 t.
②数字表示法
Linux 特殊权限对应固定的八进制数值,粘滞位的数值为 1 ,另外两种特殊权限的数值为:
SUID(Set User ID):4
SGID(Set Group ID):2
粘滞位(Sticky Bit):1
数字表示权限时,特殊权限的数值需要放在基础权限三位数字的前面 ,格式为 [特殊权限值][基础权限值].
例如:
1777 → 特殊权限为粘滞位(1),基础权限为 rwxrwxrwx
1755 → 特殊权限为粘滞位(1),基础权限为 rwxr-xr-x
3️⃣粘滞位的设置与取消
使用 chmod 命令即可设置或取消目录的粘滞位,两种表示法对应的命令如下:
①符号表示法
设置粘滞位chmod o+t 目录名
示例:给 public_dir 目录添加粘滞位
chmod o+t public_dir
取消粘滞位chmod o-t 目录名
示例:取消 public_dir 目录的粘滞位
chmod o-t public_dir
②数字表示法
设置粘滞位 :chmod 1[基础权限值] 目录名
示例:将 public_dir 权限设置为 1777(粘滞位 + 所有用户 rwx 权限)
chmod 1777 public_dir
取消粘滞位 :去掉前缀的 1,直接设置基础权限
示例:取消粘滞位,权限改为 777
chmod 777 public_dir
4️⃣典型应用场景
系统默认目录 /tmp 是粘滞位的典型应用,执行 ls -ld /tmp 查看权限:
ls -ld /tmp
输出示例:drwxrwxrwt 12 root root 4096 1月 13 10:00 /tmp
权限位 rwxrwxrwt:其他用户权限位为 rwt,表示粘滞位生效
所有用户都可以在 /tmp 中创建、读取文件,但只能删除自己创建的文件 ,避免恶意删除他人文件.
5️⃣关键注意事项
仅对目录生效 :粘滞位作用于文件时无效,Linux 会直接忽略文件的粘滞位设置.
依赖基础权限 :粘滞位需要配合目录的 w 权限使用,若目录对其他用户无 w 权限,设置粘滞位无实际意义.
与 SGID/SUID 区别:SUID/SGID 主要用于提升执行程序时的权限,而粘滞位专注于目录的文件删除权限控制.


9.8 权限的总结

1️⃣⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令.
2️⃣如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法 cd 进⼊⽬,即使⽬录仍然有 -r 读权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)
3️⃣⽽如果⽬录具有 -x 权限,但没有 -r 权限,则⽤⼾可以执⾏命令,可以 cd 进⼊⽬录.但由于没有⽬录的读权限
4️⃣所以在⽬录下,即使可以执⾏ ls 命令,但仍然没有权限读出⽬录下的⽂档.
思考几个问题?
①如果要进入一个目录需要什么权限?
r:用户是否有权查看指定目录下的文件属性
w:决定了特定用户是否有特权在该目录下,能否新增、删除文件和修改文件名
x:这是决定要进入一个目录的关键权限!
②为什么我们新建的目录和普通文件的权限是我们所看到的样子?
对于普通文件,起始权限是从:666开始
对于目录文件,起始权限是从:777开始
凡是出现在权限掩码中的权限,最终都应该在起始权限中去掉
最终权限=起始权限&(~umask)
③- - -,可以删除吗?
指定目录下,一个其他人新建的文件(即便是root),不让rw,但是可能我们普通用户可以删掉!!取决于在谁的目录下!


敬请期待下一篇文章内容-->Linux基础开发工具!


相关推荐
一个人听秋雨2 小时前
speedtest-x脚本优化
linux·运维
Engineer邓祥浩2 小时前
设计模式学习(11) 23-9 组合模式
学习·设计模式·组合模式
食咗未2 小时前
Linux SSH工具的使用
linux·网络·测试工具·ssh·远程登陆
专注于大数据技术栈2 小时前
java学习--什么是线程安全和不安全
java·学习·安全
HalvmånEver2 小时前
Linux:深入剖析 System V IPC下(进程间通信九)
linux·运维·服务器·c++·system v·管道pipe
Engineer邓祥浩2 小时前
设计模式学习(13) 23-11 享元模式
学习·设计模式·享元模式
week_泽2 小时前
第3课:构建AI代理系统面临的挑战 - 学习笔记_3
人工智能·笔记·学习·ai agent
AI+程序员在路上2 小时前
Linux网桥内核配置与使用
linux·网络
week_泽2 小时前
第8课:LangGraph Memory管理机制与实现方案 - 学习笔记_8
java·笔记·学习·ai agent