设计公司网站设计详情,公司搭建网站步骤,珠海网站制作案例,医疗行业网站怎么做目录 Linux背景
1. 发展史
UNIX发展的历史
Linux发展历史
2. 开源
3. 官网
4. 企业应用现状
• Linux在服务器领域的发展
• Linux在桌面领域的发展
• Linux在移动嵌入式领域的发展
• Linux在云计算/大数据领域的发展
5. 发行版本
• DebianDbian运行起来极其稳定…目录 Linux背景
1. 发展史
UNIX发展的历史
Linux发展历史
2. 开源
3. 官网
4. 企业应用现状
• Linux在服务器领域的发展
• Linux在桌面领域的发展
• Linux在移动嵌入式领域的发展
• Linux在云计算/大数据领域的发展
5. 发行版本
• DebianDbian运行起来极其稳定这使得它非常适合用于服务器。 debian这款操作系统无疑并不适合新手用户而是适合系统管理员和高级用户。
• Ubuntu
• 红帽企业级Linux
• CentOS
• Fedora
• Kali Linux 认识Linux的内核版本名称
6. os概念定位
使用 XShell 远程登录 Linux
关于 Linux 桌面
下载安装 XShell
查看 Linux 主机 ip
使用 XShell 登陆主机
XShell 下的复制粘贴
Linux下基本指令
ls 指令
pwd 命令
cd 指令
touch 指令
mkdir 指令
rmdir 指令 rm 指令
man 指令
cp 指令
mv 指令
cat 指令
more 指令
less 指令
head 指令
tail 指令
date 指令
cal 指令
find 指令
which 指令
whereis 指令
alias 指令
grep 指令
zip/unzip 指令
tar 指令重要 bc 指令
uname –r 指令
重要的几个热键 [Tab], [ctrl]-c, [ctrl]-d
关机
以下命令作为扩展
shell命令以及运行原理
Linux权限的概念
Linux权限管理
文件访问权限的相关设置方法
1. chmod
2. chown
3. chgrp
目录的权限
4. umask
file 指令
关于权限的总结
粘滞位 Linux背景
1. 发展史
对于Linux你可能要问Linux从哪里来它是怎么发展的在这里简要介绍Linux的发展史。要说Linux还得从UNIX说起。
UNIX发展的历史 • 1968年一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫 Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念。 • 19691970年ATT的贝尔实验室研究人员Ken Tompson和Dennis Ritchie在采用很多 Multics特点的基础上开发了UINX系统。它运行在小型机上满足了系统对科研环境的要求。从产生开始UNIX就是一个有价值的、高效的、多用户和多任务的操作系统。 • UNIX从满足个人的设计需求开始逐步成长为由许多不同开发商所支持的标准软件产品。 • 第一个UNIX版本是免费给许多知名大学的计算机系使用的。 • 1972年贝尔实验室开始发放商业版本并且给不同的用户授权使用这个系统使用者之一是加州大学伯克莱分校的计算机系。伯克莱给系统增加了许多新的特点后来成为了标准。 • 1975年伯克莱由下属部门BSD发行了自己的UNIX版本。UNIX的BSD版本成为ATT贝尔实验室版本的主要竞争者而其它的独立开发出的UNIX版本也开始萌生。 • 1980年微软公司开发了叫做Xenix的UNIX PC版本。ATT发行了第一个商业版本。名叫SystemⅢ后来被成为对商用软件产品良好支持的System Ⅴ所替代。 • 同时UNIX的BSD版本不断发展在70年代末期BSD UNIX成为了国防部的高科技研究机构科研项目的基础。其结果伯克莱发行了一个叫做BSD Release 4.2的有效版本。 • 它包括了高级的文件管理器和基于TCP/IP网络协议的网络特点。现在TCP/IP被Internet所使用。BSD Release 4.2被许多厂商所采用例如SUN Microsystem。 • UNIX不同版本的出现导致了UNIX标准的需要软件开发商不知道他们的程序运行在哪些版本上比较合适。 • 到80年代中期两个竞争的标准出现了一个是基于ATT的UNIX版本另一个是BSD版本。在今天的书店里你能发现分别适用于这两个版本的不同的UNIX的书一些是System V另一些集中在BSD UNIX。 • ATT建立了一个叫UNIX系统实验室的新组织它的作用就是综合UNIX的不同版本集中开发一个标准系统。 • 1991年UNIX综合实验室综合了System V Release3SUN OS和Xenix的所有特点发行了System V Release 4。为了与System V Release 4 竞争一些其它公司如IBM和惠普OpenSoftware FoundationOSF去产生自己的UNIX标准版本继而出现了两个标准商业版本OSF版本和System Release 4。 • 1993年ATT把它的UNIX转卖给Novell公司。UNIX系统实验室成为了Novell的UNIX系统小组的一部分。Novell发行了基于System V Release 4的自己的UNIX版本UNIXWare它可以和Novell公司的Netware系统相联。SUN公司已经把System V Release 4 融进了它的SUN OS发行了Solaris。两个相互竞争的UNIX使用的图形用户界面一个叫Motif另一个叫Openlook已经合并为一个新的工作平台标准叫做通用平台环境CDE。 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 Again Shell(bash)和GNU的C编译程序gcc以及为数不多的其它语言。Torvalds绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生这就是人们所称的Linux。 • Linux发布时的版本是0.02后来又有0.03版然后又跳到0.10版。因为世界各地越来越多的程序员都开始开发Linux它已经达到0.95版。这就意味着正式公布1.0版本的时间已经为期不远了。正式的1.0版本是在1994年公布的 • 对比一下 Windows 发展史 2. 开源
• Linux是一种自由和开放源代码的类UNIX操作系统该操作系统的内核由林纳斯托瓦兹在1991年首次发布之后在加上用户空间的应用程序之后就成为了Linux操作系统。严格来讲Linux只是操作系统内核本身但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统它包括GUI组件和许多其他实用工具。 • GNU通用公共许可协议GNU General Public License简称GNU GPL或GPL是一个广泛被使用的自由软件许可协议条款最初由理查德斯托曼为GNU计划而撰写GPL给予了计算机程序自由软件的定义 任何基于GPL软件开发衍生的产品在发布时必须采用GPL许可证方式且必须公开源代码 • Linux是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证任何个人和机构都可以自由地使用Linux的所有底层源代码也可以自由地修改和再发布。随着Linux操作系统飞速发展各种集成在Linux上的开源软件和实用工具也得到了应用和普及因此Linux也成为了开源软件的代名词。
3. 官网
• kernel官网
4. 企业应用现状
• Linux在服务器领域的发展
随着开源软件在世界范围内影响力日益增强Linux服务器操作系统在整个服务器操作系统市场 格局中占据了越来越多的市场份额已经形成了大规模市场应用的局面。并且保持着快速的增长 率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外考虑到Linux的快速成长性 以及国家相关政策的扶持力度Linux服务器产品一定能够冲击更大的服务器市场。 据权威部门统计目前Linux在服务器领域已经占据75%的市场份额同时Linux在服务器市场 的迅速崛起已经引起全球IT产业的高度关注并以强劲的势头成为服务器操作系统领域中的中 坚力量。
• Linux在桌面领域的发展
近年来特别在国内市场Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红 旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统目前已经在政府、企业、 OEM等领域得到了广泛应用。另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统特别是 Ubuntu Linux已经积累了大量社区用户。但是从系统的整体功能、性能来看Linux桌面系 统与Windows系列相比还有一定的差距主要表现在系统易用性、系统管理、软硬件兼容性、软 件的丰富程度等方面。
• Linux在移动嵌入式领域的发展
Linux的低成本、强大的定制功能以及良好的移植性能使得Linux在嵌入式系统方面也得到广泛 应用目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设 备上广泛使用的Android操作系统就是创建在Linux内核之上的。目前Android已经成为全球最 流行的智能手机操作系统据2015年权威部门最新统计Android操作系统的全球市场份额已达 84.6%。此外思科在网络防火墙和路由器也使用了定制的Linux阿里云也开发了一套基于Linux的操作系统“YunOS”可用于智能手机、平板电脑和网络电视常见的数字视频录像机、舞台灯光控制系统等都在逐渐采用定制版本的Linux来实现而这一切均归功与Linux与开源的力量。
• Linux在云计算/大数据领域的发展
互联网产业的迅猛发展促使云计算、大数据产业的形成并快速发展云计算、大数据作为一个 基于开源软件的平台Linux占据了核心优势据Linux基金会的研究86%的企业已经使用 Linux操作系统进行云计算、大数据平台的构建目前Linux已开始取代Unix成为最受青睐的云 计算、大数据平台操作系统。
5. 发行版本
不同种类的Linux是由使用它的大量用户进行区分的。
技术方面的版本主要是指的内核版本2.6.32 2.6.16这种
而商业角度本指的是如ubuntukailmcentos/redhat红旗这些。基于使用的人群不同不同商业上的Linux细化迭代、一些处理策略等等都会有所不同比如面向企业的Linux版本操作往往会更加保守确保程序员知道自己在做什么而面向学生的Linux往往社区内各种入门文档较多对新手友好。
• DebianDbian运行起来极其稳定这使得它非常适合用于服务器。 debian这款操作系统无疑并不适合新手用户而是适合系统管理员和高级用户。
• Ubuntu
Ubuntu是Debian的一款衍生版也是当今最受欢迎的免费操作系统。Ubuntu侧重于它在这个市 场的应用在服务器、云计算、甚至一些运行Ubuntu Linux的移动设备上很常见。Ubuntu是新 手用户肯定爱不释手的一款操作系统。
• 红帽企业级Linux
这是第一款面向商业市场的Linux发行版。它有服务器版本支持众多处理器架构包括x86和 x86_64。红帽公司通过课程红帽认证系统管理员/红帽认证工程师RHCSA/RHCE对系统管 理员进行培训和认证。
• CentOS
CentOS是一款企业级Linux发行版它使用红帽企业级Linux中的免费源代码重新构建而成。这 款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。有些人不想支付一大 笔钱又能领略红帽企业级Linux对他们来说CentOS值得一试。此外CentOS的外观和行 为似乎与母发行版红帽企业级Linux如出一辙。 CentOS使用YUM来管理软件包。
• Fedora
小巧的Fedora适合那些人想尝试最先进的技术等不及程序的稳定版出来。其实Fedora就是 红帽公司的一个测试平台产品在成为企业级发行版之前在该平台上进行开发和测试。Fedora 是一款非常好的发行版有庞大的用户论坛软件库中还有为数不少的软件包。
• Kali Linux
Kali Linux是Debian的一款衍生版。Kali旨在用于渗透测试。Kali的前身是Backtrack。用于 Debian的所有Binary软件包都可以安装到Kali Linux上而Kali的魅力或威力就来自于此。此 外支持Debian的用户论坛为Kali加分不少。Kali随带许多的渗透测试工具无论是Wifi、数据 库还是其他任何工具都设计成立马可以使用。Kali使用APT来管理软件包。 毫无疑问Kali Linux是一款渗透测试工具或者是文明黑客我不想谈论恶意黑客青睐的操 作系统。 • ... ... 认识Linux的内核版本名称 Linux的版本也并不是越新越好往往越新的版本虽然会有新增的功能但是也会有更多的bug导致我们原有的程序出现问题遇到问题后社区中也更难找到解决办法。
6. os概念定位
使计算机更好用! 这是操作系统的根本要义!!随着后面的介绍大家会对下图有越来越深的认识。 使用 XShell 远程登录 Linux
关于 Linux 桌面
很多人接触更多的可能是Windows的图形化界面其实一开始不管什么样的操作系统都是黑屏终端指令的操作形式之后才出现图形化界面并以此PC推广到普通人。图形化操作确实非常方便但是图形化本身需要占用系统的资源影响效率针对服务器我们也并不需要图形化并且图形化将系统的很多概念都抽象化了不利于我们对于底层的理解。
处于效率、理解上的考量后文中使用Linux使用终端指令进行操作。
下载安装 XShell
XShell 是一个远程终端软件. 下载官网https://www.netsarang.com/products/xsh_overview.html 下载安装的时候选择 home/school 则为免费版本.
查看 Linux 主机 ip
在终端下敲 ifconfig 指令, 查看到 ip 地址.
使用 XShell 登陆主机
在 XShell 终端下敲 ssh [ip] ip 为刚才看到的 ifconfig 结果。 如果网络畅通, 将会提示输入用户名密码。输入即可正确登陆。
XShell 下的复制粘贴
复制: ctrl insert (有些电脑的 insert 需要配合 fn 来按) 粘贴: shift insert ctrl c / ctrl v 是不行的.
Linux下基本指令
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 一行只输出一个文件。 pwd 命令 语法: pwd 功能显示用户当前所在的目录 常用选项 无 理论知识
ls是显示当前目录下的文件当前目录即当前我这个用户所处的目录其中用户可以用whoami
查看所处的目录可以用pwd打印而这里我们所属的目录就等于文件夹。 上图ls -l 中ls称为命令-l称为命令行选项命令行选项可以有一个或者多个命令与命令行选项件以空格间隔。
ls我们发现显示的显示的是文件的内容而ls -l 还显示了更多的内容。 Windows先常可以看到所谓的0KB大小的文件那对于这样的文件需要存储空间吗
其实想文件的大小、位置、占用空间等属性也是文件的数据文件并不是真的0KB。
所以如果我们创建了一个0KB大小的文件我们也需要空间来存储它实际文件的大小也包括文件的属性。
所以我们可以说文件内容属性。所以我们学习文件要么是对文件的内容做操作要么是对文件的属性做操作。
而ls -l指令所显示的更多内容其实就是显示一个文件的属性。 mkdir可以创建目录mkdir后面跟的是文件名指令与文件名中间用用空格分隔。
这里我们看到创建的目录是蓝色的在Windows中可以通过后缀.png、.txt区分但是在Linux操作系统中,区分文件的并不是通过颜色区分的这只是一种配色方案也不是通过后缀区分的。 ls -l显示的属性后面的是文件创建的日期、时间而最前面的这个d就代表当前这个文件是一个目录即文件夹 touch命名是创建一个普通文件而这里我们看到test.c开头是-这就代表这是一个普通文件。 上图我们可以看到Linux中命名后面的选项的形式非常自由多个选项可以直接相连、可以分隔。
而这里的-a是all的意思ls -a即显示所有的文件 使用-a后我们发现可以看到多出来了.、..两个文件我们把这种以.开头的文件叫做隐藏文件 所以-a即显示隐藏文件功能类似于Windows中上图。 通过前面加.我们也可以主动创造隐藏文件。 pwd是显示我们当前所处的路径Win中我们可以像上图取到当前的路径这里介绍的是对于/或者\隔开的中间部分我们可以肯定一定是一个目录即文件夹而对于路径尾端的这是一个目录或者文件。 cd 指令 语法: cd 目录名 功能改变工作目录。将当前工作目录改变到指定的目录下 举例 理论知识 虽然我们可以创建隐藏文件但是.和..又是从何而来的呢
在任何一个目录即使是空目录也会自带.和...是当前目录..是上级目录。 我们用cd改变当前的目录cd .时我们发现当前的路径没有变化这就说明.就是当前目录cd ..时我们的路径会一直往上级目录回退这说明..就是上级目录。
但是当我们一直往上回退我们又发现回退到/就回退不了了。
/在Linux中我们叫做根目录 这里我们在输出一个小结论ls -l 默认显示的是当前目录下的文件ls -l 指定目录 显示的是指定目录中的文件而目录本身也是一个文件如果我们只是想查看目录本身需要使用-d 经过上面的学习我们发现目录里面可以放文件目录里面还可以放目录目录里面再放文件....所以Linux的文件结构是一颗从根目录/开始的多叉树它的叶子一定是普通文件或者空目录非叶子节点一定是一个非空目录。 如上图根据之前的学习我们可以根据路径找到test.c但是为什么我们可以找到呢
现在我们可以回答树状组织方式都是为了保证快速定位查找到指定的文件而定位文件就需要具有唯一性的方案来进行定位文件。其中任何一个节点都只有一个父节点所以从根目录开始定位指定文件路径具有唯一性。
我们把一般从/开始不依赖其他目录的定位文件的路径叫做绝对路径。
以非/、相对于当前用户所处目录或者其他目录定位文件的路径方式叫做相对路径。 绝对路径一般不会随着用户的路径变化而丧失唯一性并且是从根目录开始我们不需要考虑其他系统不存在根目录的情况所以绝对路径一般在特定服务的配置文件中经常被使用。
而相对路径因为它是可以指定从某一路径开始的路径一般比较短使用便捷一般在命令行中使用较多。
而任何一个目录即使是空目录系统也会自动生成.和..现在我们也可以理解了其中.相当于指向当前文件的指针..相当于指向上级目录的指针/都指向自己我们把这种叫做线索化过的。
cd ~ 可以进入到当前用户的家目录下那么什么叫做家目录呢
如下图当我们分别以root和普通用户登录我们所处的默认目录就是当前用户的家目录。 cd - 命令可以在最近的两个路径之间相互切换 touch 指令 Linux理论知识文件类型的认识 语法: touch [选项]... 文件... 功能touch命令参数可更改文档或目录的日期时间包括存取时间和更改时间或者新建一个不存在 的文件。 常用选项 • -a : change only the access time • -c : change only the modification time 举例
touch出了可以创建普通文件还可以修改文件的时间。 系统中时间非常重要时间乱了可能会导致整个系统的混乱我们可以通过stat查看时间 mkdir 指令 语法 mkdir [选项] dirname... 功能在当前目录下创建一个名为 “dirname”的目录 常用选项 • -p/--parents: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录 举例 rmdir 指令 rm 指令 rmdir是一个与mkdir相对应的命令mkdir是建立目录而rmdir是删除命令 语法 rmdir [-p] [dirName] 适用对象具有当前目录操作权限的所有使用者 功能删除空目录 常用选项 • -p 当子目录被删除后如果父目录也变成空目录的话就连带父目录一起删除。 举例
rmdir只能删除空目录 知识 创建完后如果我们想查看可以使用tree 目录名 会将目录中所有文件及目录以树形形式展开。 查看对应指令我们发现对应指令在系统中都可以查到这里要说明的是命令其实就是文件并且是-开头的普通文件。 我们创建一个文件mycmd,并且编译我们发现通过./mycmd,我们也可以运行它因为要运行文件就要先找它而文件在当前路径下所以./而对于ls我们发现通过路径下文件形式也可以运行。所以命令就是可执行文件就等同于我们写的C/C代码。
所以如下图当我们将mycmd也拷贝到/user/bin下也可以不带路径直接使用了。
所以我们所谓的安装指令其实就是将对应的文件拷贝到指定目录下如/user/bin 所以回归到ls -l 和ll 其实这两个就是同一个指令ll就是ls -l 起的别名。
使用alias就可以为指令起别名--colorauto是命令行选项可以使ls显示的文件按照系统方案显示颜色。使用alias起得别名只在当前会话有效除非我们修改配置文件。 rm 命令可以同时删除文件或目录 语法 rm [-f-i-r-v] [dirName/dir] 适用对象所有使用者 功能删除文件或目录 常用选项 • -f 即使文件属性为只读(即写保护)亦直接删除 • -i 删除前逐一询问确认 • -r 删除目录及其下所有文件 举例
普通用户使用rm删除文件如果当前文件是自己创建的系统不会过问但是因为当前是root用户所以系统会询问是否删除。y表示yes,n表示no。 rm -f强制删除文件系统不会过问 rm 的-r选项表示递归删除rm -r可以用来删除目录 *表示通配符可以用来匹配任意字符code.*表示文件名中有code.都可以匹配上。
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 指令 从默认从一号手册中查找指令man 数字 指令 默认从对应号手册查询指令。
cp 指令 语法 cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: • cp指令用于复制文件或目录 • 如同时指定两个以上的文件或目录且最后的目的地是一个已经存在的目录则它会把前面指定的所有文件或目录复制到此目录中 常用选项 • -f 或 --force 强行复制文件或目录 不论目的文件或目录是否已经存在 • -i 或 --interactive 覆盖文件之前先询问用户 • -r 递归处理将指定目录下的文件与子目录一并处理。若源文件或目录的形态不属于目录或符号链接则一律视为普通文件处理 mv 指令 mv命令是move的缩写可以用来移动文件或者将文件改名move (rename) files,经常用来备份文件或者目录 语法: mv [选项] 源文件或目录 目标文件或目录 功能: 1. 视mv命令中第二个参数类型的不同是目标文件还是目标目录mv命令将文件重命名或将其 移至一个新的目录中。 2. 当第二个参数类型是文件时mv命令完成文件重命名此时源文件只能有一个也可以是源目录名它将所给的源文件或目录重命名为给定的目标文件名。 3. 当第二个参数是已存在的目录名称时源文件或目录参数可以有多个mv命令将各参数指定的源文件均移至目标目录中。 常用选项 • -f force 强制的意思如果目标文件已经存在不会询问而直接覆盖 • -i 若目标文件 (destination) 已经存在时就会询问是否覆盖 cat 指令 语法 cat [选项] [文件] 功能 查看目标文件的内容 常用选项 • -b 对非空输出行编号 • -n 对输出的所有行编号 • -s 不输出多行空行 同一目录下不能有同名文件 cp拷贝是如果后面不跟文件名cp就会将文件原名拷贝至其他目录下 目录的拷贝cp需要-r,表示递归式拷贝 cp 如果是将目录拷贝到目录中如果目标目录不存在会创建存在会将拷贝目录拷贝至目标目录内。 如果目标目录内已经有拷贝目录那么cp会覆盖式拷贝-f强制拷贝系统不再询问不过由于这里是root用户所以系统依然询问 echo 与cat类似都可以直接打印不过cat是显示指定文件名里面的内容echo是将后续的内容作为字符串显示。 知识
在Linux中一切皆文件对于操作系统来说用户新建的文件、键盘、显示器等都是文件。
C语言中我们学习过。如果想要对某一个文件进行操作必须先打开它所以如果我们想要使用printf/scanf、cout/cin之类也必须打开对应键盘、显示器的文件才行即下图这三个文件 但是实际使用我们有没有打开过这其实是因为系统默认为我们打开了之所以会默认打开三个文件而不是其他文件是因为三个文件我们程序会经常使用。 上图中我们发现使用,echo将原本应该显示到显示器上面的内容显示到了一个文件中对于这种操作我们叫做输出重定向。 输出重定向的特点是后续的文件不存在则创建如果存在会先清空再写入。而这种特点就意味着利用可以直接创建一个文件也可以直接清空一个文件echo本质上所谓的显示就是向显示器这个文件写入数据重定向之后就是向hello.txt文件写入。 而使用,与不同的是对于已有的文件不会清空内容而是会在文件原本内容上追加新的内容我们把这个叫追加重定向。
通过,我们可以把文件内容写入到显示器文件上我们把这个叫做输入重定向 重定向的特点正好与我们文件打开模式类似所以随着深入学习就可以发现上述操作都可以转换为C语言操作
因为一切皆文件所以我们XShell远端登录时所产生的文件就存储在下面的路径中因为对于终端我们既要能显示也要能从键盘输入所以系统一定要将终端能以文件的形式往里输入 我们多打开几个终端可以发现对应文件也增加了。既然终端也是文件我们输出重定向发现我们也可以往其他终端上写入信息了。 所以终端本质上就是Linux /dev/pts上的文件当我们打开终端就会打开对应的文件我们就可以在终端上进行各种输入输出操作了。
在Linxu上我们区分文件类型不靠后缀而是靠文件信息开头的字母 -普通文件如文本、可执行文件、库、图片、视频
d:目录文件
c:字符文件、键盘、显示器、终端这一类文件输入的数据具有顺序性
b:块设备文件如磁盘
I:连接文件
p:管道文件。
需要注意的是即使Linxu系统本身不关心后缀但是工具如gcc还是关心文件的后缀的。 mv 可以将文件转移至指定目录如果目录存在默认递归的但是如果该目录名不存在那么mv就是将文件名修改成指定文件名。 之前我们所介绍的cat主要是查看短文件的-n显示文件行数从前往后显示文件内容而tac正好相反将文件内容从后往前显示的。
cat本身并不是专门打印文件内容的主要是当我们想查看一些配置项但是又不想打开文件所以我们会使用cat 打印系统的log信息我们发现我们在终端所做的所有信息都被记录下来的专门存储这些信息的就是日志软件领域凡是大型项目必有日志主要用于记录信息方便后续出现问题便于排查如果我们使用tac打印就可以看到最新系统的消息了。 more 指令 语法 more [选项] 功能more命令功能类似 cat 常用选项 • -n 指定输出行数 • q 退出more 举例: more主要就是用于查看日志的如果使用cat、tac那么全部信息都打印不方便排查问题。 morer然后就会把一整屏打满信息按回车就可以不断往下翻但是more不支持往上翻所以实际使用中也被less代替了。 在实际使用中输入/后面输入对应字符就可以自动筛选出对应的内容
less 指令 • less 工具也是对文件或其它输出进行分页显示的工具应该说是linux正统查看文件内容的工具功能极其强大 • less 的用法比起 more 更加的有弹性在 more 的时候我们并没有办法向前面翻 只能往后面看 • 但若使用了 less 时就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件更 容易用来查看一个文件的内容 • 除此之外在 less 里头可以拥有更多的搜索功能不止可以向下搜也可以向上搜。 语法 less [参数] 文件 功能less与more类似但使用less可以随意浏览文件而more仅能向前移动却不能向后移动而且less在查看之前不会加载整个文件。 选项 • -i 忽略搜索时的大小写 • -N 显示每行的行号 • /字符串向下搜索“字符串”的功能 • ?字符串向上搜索“字符串”的功能 • n重复前一个搜索与 / 或 ? 有关 • N反向重复前一个搜索与 / 或 ? 有关 • q:quit 举例 less与more非常类似不过less支持上翻。
head 指令 head 与 tail 就像它的名字一样的浅显易懂它是用来显示开头或结尾某个数量的文字区块head 用来显示档案的开头至标准输出中而 tail 想当然尔就是看档案的结尾。 语法 head [参数]... [文件]... 功能 head 用来显示档案的开头至标准输出中默认head命令打印其相应文件的从开头指定行的内容。 选项 • -n行数 显示的行数 举例
head 可以按照-510参数从头将对应行数的内容显示出来。 tail 指令 tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容. 语法 tail 必要参数 [文件] 功能用于显示指定文件末尾内容不指定文件时作为输入信息进行处理。常用查看日志文件。 选项 • -f 循环读取 • -n行数 显示行数 举例
tail就是从文件尾部开始拿出指定行数的内容显示 知识
这里的|我们叫做管道上一条指令处理的结果可以通过|,交给下一条指令继续处理
比如下图中可以先从log.txt中拿出钱510行内容再通过管道把这些交给tail -10拿出后10条 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 -d1508749502 • Unix时间戳英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp是从1970年1月1日UTC/GMT的午夜开始所经过的秒数不考虑闰秒 4. 举例 时间戳的有个用途就是转换成正常的时间用来进行日志对应时间段的区间式查找 cal 指令 cal命令可以用来显示公历阳历日历。公历是现在国际通用的历法又称格列历通称阳历。“阳历”又名“太阳历”系以地球绕行太阳一周为一年为西方各国所通用故又名“西历”。 命令格式 cal 参数 [年份] 功能用于查看日历等时间信息如只有一个参数则表示年份(1-9999)如有两个参数则表示月份和年份 常用选项 • -3 显示系统前一个月当前月下一个月的月历 • -j 显示在当年中的第几天一年日期按天算从1月1号算起默认显示当前月在一年中的天数 • -y 显示当前年份的日历 举例 find 指令 • Linux下find命令在目录结构中搜索文件并执行指定的操作。 • Linux下find命令提供了相当多的查找条件功能很强大。由于find具有强大的功能所以它的选项也很多其中大部分选项都值得我们花时间来了解一下。 • 即使系统中含有网络文件系统( NFS)find命令在该文件系统中同样有效只你具有相应的权限。 • 在运行一个非常消耗资源的find命令时很多人都倾向于把它放在后台执行因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。 语法 find pathname -options 功能用于在文件树中查找文件并作出相应的处理可能访问磁盘 常用选项 • -name 按照文件名查找文件 • 其他选项需要在查这个命令其实比较复杂 which 指令 功能在指定的目录下取查找指定的命令 举例 whereis 指令 功能用于找到程序的源、二进制文件或手册 举例 alias 指令 功能设置命令的别名 举例 grep 指令 语法 grep [选项] 搜寻字符串 文件 功能行文本过滤工具在文件中搜索字符串将找到的行打印出来可以理解为根据关键字将其他信息过滤 常用选项 • -i 忽略大小写的不同所以大小写视为相同 • -n 顺便输出行号 • -v 反向选择亦即显示出没有 搜寻字符串 内容的那一行 举例
针对上文提到的日志我们可以使用grep将带Removed的信息过滤出来 结合上文的tail以及|管道我们就可以将最近的removed信息筛选出来方便我们排查问题。 随着后面的学习grep也可以帮助我们筛选出对应的进程 grep也可以直接从我们的文件中直接筛选出对应的文本内容比如我们想查看一段程序的入口函数 grep使用-n选项我们不光可以筛选出文件中符合条件的行文本还可以查看在文件中对应的行 grep -v选项将不匹配条件的文本都筛选出来如下图筛选的行文本都没有9 grep -i选项是忽略大小写匹配注关键词的可以加可不加不过如果关键字内有空格建议加上 zip/unzip 指令 语法 zip 压缩文件.zip 目录或文件 功能将目录或文件压缩成zip格式 常用选项 • -r递归处理将指定目录下的所有文件和子目录一并处理 • 递归处理将指定目录下的所有文件和子目录并处理 举例
知识
在日常我们下载一款软件不光要下载软件本身还要下载软件各种依赖库文件如果我们是分散的一个一个下载最终我们因为各种原因导致一两个文件缺失进而软件就无法运行了所以为了避免这种情况我们可以将多个文件合并成一个文件这就是我们所说的打包这样我们最终只需要下载一个文件避免文件丢失的情况而为了打包后文件的体积往往很大我们就需要将文件包压缩这样不光减少体积节省存储空间而且可以有效减少网络传送的时间。
zip 压缩文件夹需要-r,才能将文件夹中所有文件都打包不然只能打包一个空目录unzip解压缩可以直接解压缩 unzip -d选项可以让我们将压缩包解压到指定路径下 Linux下还有sz命令sz 压缩包名 可以支持我们将压缩包传送到Windows上 rz命令可以支持我们将压缩包从Windows上传到Linux。 在安装完sz命令后我们也可以以直接拖拽的方式将Windows上的压缩包上传到Linux上
tar 指令重要 打包/解包不打开它直接看内容 语法 tar [-cxtzjvf] 文件与目录 .... 参数 • -c 建立一个压缩文件的参数指令(create 的意思) • -x 解开一个压缩文件的参数指令 • -t 查看 tarfile 里面的文件 • -z 是否同时具有 gzip 的属性亦即是否需要用 gzip 压缩 • -j 是否同时具有 bzip2 的属性亦即是否需要用 bzip2 压缩 • -v 压缩的过程中显示文件这个常用但不建议用在背景执行过程 • -f 使用档名请留意在 f 之后要立即接档名喔不要再加参数 • -C 解压到指定目录 tar使用时多个选项组合使用简单理解c表示创建一个文件包z表示将目标文件包压缩f表示使用指定的压缩包文件名czf搭配使用就创建了一个tar后缀的文件名。tar打包目录默认是递归将所有文件都打包 解压缩是将上面的选项c改为x就行了x表示解包 加上v选项就可以展示压缩和解压缩的整个过程 scp按照上图中的格式就可以实现不同主机间的压缩包互传 bc 指令
bc命令可以很方便的进行浮点运算是一个简便的计算器 正常来说我们想要知道一些数据的和,比如配置文件的一些项就可以使用bc uname –r 指令
语法uname [选项] 功能 uname用来获取电脑和操作系统的相关信息。查看体系架构和内核版本。 补充说明uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。 常用选项 • -a或–all 详细输出所有信息依次为内核名称主机名内核版本号内核版本硬件名处理 器类型硬件平台类型操作系统名称 uname -r 可以查看内核版本、体系结构 注体系结构其实就是知道芯片结构一般有X86_32、X86_64(也叫X64)。
对于内核版本问题一般来说在实际的开发过程中公司内部使用版本往往会最新几个版本这是因为新版本往往存在未知的bug没有解决方案非常不可控而老版本的bug往往都踩过了有成熟的解决方案风险可控所以公司会倾向于使用老版本即稳定的版本。
重要的几个热键 [Tab], [ctrl]-c, [ctrl]-d
• [Tab]按键---具有『命令补全』和『档案补齐』的功能使用时需要快速摁两下
当忘记具体的指令使用Tab可以快速匹配对应的命令 • [Ctrl]c按键---让当前的程序『停掉』可以终止异常任务或者有点时候误触发一些操作也可以使用这个进行终止 • [Ctrl]d按键---退出当前用户方便进行用户切换另外他也可以用来取代exit [Ctrl]r按键--Linux系统会记录输入的历史命令存在上限我们输入代码的片段就会从历史命令进行匹配 关机
语法shutdown [选项] 常见选项 • -h将系统的服务停掉后立即关机。 • -r在将系统的服务停掉之后就重新启动 • -t sec-t 后面加秒数亦即『过几秒后关机』的意思
注一般云服务器一上线是一致运行的不会主动关机持续性的提供服务
以下命令作为扩展
• 安装和登录命令login、shutdown、halt、reboot、install、mount、umount、chsh、 exit、last • 文件处理命令file、mkdir、grep、dd、find、mv、ls、diff、cat、ln • 系统管理相关命令df、top、free、quota、at、lp、adduser、groupadd、kill、crontab • 网络操作命令ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、 mail、 nslookup • 系统安全相关命令passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、 who • 其它命令tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
shell命令以及运行原理 我们上面使用的XShell命令行左边的显示的信息含义如上这种命令行是有XShell这个外壳程序提供的并不是操作系统提供的。
Linux严格意义上说的是一个操作系统我们称之为“核心kernel“ 但我们一般用户不能直接使用kernel。而是通过kernel的“外壳”程序也就是所谓的shell来与kernel沟通。 如何理解为什么不能直接使用kernel 从技术角度Shell的最简单定义命令行解释器command Interpreter主要包含 • 将使用者的命令翻译给核心kernel处理。 • 同时将核心的处理结果翻译给使用者。
对比windows GUI我们操作windows 不是直接操作windows内核而是通过图形接口点击从 而完成我们的操作比如进入D盘的操作我们通常是双击D盘盘符.或者运行起来一个应用程序。 shell 对于Linux有相同的作用主要是对我们的指令进行解析解析指令给Linux内核。反馈结果在通过内核运行出结果通过shell解析给用户。通过shell,作为用户我们不在需要关心如何kernel的复杂接口如何交互我们只需要将对应的指令交给外壳程序所以shell简化了我们的操作同时如何我们输入一些错误、非法的指令shell也可以将这些指令拦截在系统之外保护了内核的安全。 • 帮助理解如果说你是一个闷骚且害羞的程序员那shell就像媒婆操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花但是有不好意思直接表白那就让你你家人找媒婆帮你提亲所有的事情你都直接跟媒婆沟通由媒婆转达你的意思给小花而我们找到媒婆 姓王所以我们叫它王婆它对应我们常使用的bash。
shell作为命令行解释器需要解释命令所以作为进程来说不能挂不然后面的命令会都解释不了所以新命令到来shell会创建子进程将命令交由子进程执行。
而在Centos下具体的shell程序是bash,每一次登录都会常见一个bash进程。shell是一个抽象概率bash则是基于这个概念的具体实体所以其他版本的系统也存在sh等其他命令行解释器 Linux权限的概念
Linux下有两种用户超级用户root、普通用户。 • 超级用户权限高可以再linux系统下做任何事情不受限制 • 普通用户权限低受管控在linux下做有限的事情。
• 超级用户的命令提示符是“#”普通用户的命令提示符是“$”。
当我们安装某一个指令我们需要将对应文件拷贝至系统/user/bin目录下但是我们发现普通用户是无法拷贝到这个目录下的 命令su [用户名] 功能切换用户。 针对上面需要安装软件的情况我们就需要从普通用户user切换到root用户使用 su rootroot可以省略此时系统会提示输入root用户的口令口令不回显输入完则切换成功可以安装指令了。 使用exit就可以退出root用户变成普通目录 之后我们想切换root也可以使用su -与su相比su -相当于以root重新登录会导致所处路径变化su切换前后路径不变。 root切换普通用户只需要root 普通用户不需要输入密码 如下图当我们想要以root身份创建文件但又不想切换用户通过常规手段我们发现文件的拥有者和所属组依然是普通用户所以这里我们就需要sudo 命令形式执行这里需要普通用户的密码 sudo可以用来短暂的提权当面临一些特殊情况将软件按照到系统中供大家共同使用系统中其实只会按照一份供大家使用我们就可以使用sudo短暂提权,sudo的提权一般只有几分钟超过这个时间需要重新输入密码。 既然可以使用sudo提权那是否意味着人人都可以是管理员呢
其实并不是Linux中存在一份类似白名单的文件在sudoers中记录了谁可以sudo提权我们发现这个文件拥有者和所属组都是root,这就意味着只有root可以决定谁可以使用sudo提权在实际开发中这就意味着想要sudo必须线下真人找管理员沟通拥有权限的必然是管理员可以信任的人。 Linux权限管理
那么再次回到权限本身权限的本质是能或不能做某事权限控制着用户的行为防止错误的发生。
其次在日常中就好像非VIP不能看VIP视频一般学生不能随便进校长办公室一样张三不能看VIP视频并不是因为他是张三而是因为他不是VIP。
所以权限限制的并不是具体的人而是一个人担任的角色。
其次就好像leetcode上不能追剧爱奇艺上不能刷题在谈论权限之前权限要求目标本身具有对应的属性比如爱奇艺可以追剧我们才能来区分VIP和非VIP所看到视频的区别。
所以综上权限角色目标属性
而在Linux中一切皆文件面对的一切问题也都是文件所以Linux下的目标属性就是针对的文件即读、写、可执行三类。
而角色分为拥有者、所属组、other三类在文件的信息中可以看到。 这里谈论的角色与之前的用户的概念并不冲突这里角色就是用户所担任的角色root和普通用户是具体的人角色是他们担任的角色用来区分对应的权限。
上面文件信息中只有拥有者和所属组两栏之所以没有other是因为相比较拥有者和所属组而言对于文件的other可以有很多个不好记录并且比较完拥有者和所属组之后如果都不是就是other所以没必要单独记录other。
其次这里的所属组的概念这要针对一个公司内同一个开发小组下的多个人这些人在同一个小组内都可以查看同一个所属组内的文件而其他小组就看不到这种更精细化的角色划分有利于更加精细化的权限管理不过实际公司中往往是一人一台主机系统上是一人一组。
1. 文件访问者的分类人 • 文件和文件目录的所有者u---User • 文件和文件目录的所有者所在的组的用户g---Group • 其它用户o---Others 外国人 2. 文件类型和访问权限事物属性 • 文件类型 ◦ d文件夹 ◦ -普通文件 ◦ l软链接类似Windows的快捷方式 ◦ b块设备文件例如硬盘、光驱等 ◦ p管道文件 ◦ c字符设备文件例如屏幕等串口设备 ◦ s套接口文件 • 基本权限分为rwx ◦ 读r/4Read对文件而言具有读取文件内容的权限对目录来说具有浏览该目录信息 的权限 ◦ 写w/2Write对文件而言具有修改文件内容的权限对目录来说具有删除移动目录内 文件的权限 ◦ 执行x/1execute对文件而言具有执行文件的权限对目录来说具有进入目录的权 限 ◦ “—”表示不具有该项权限
在查看文件信息左边去掉第一个位身下9个位三三为一组对应拥有者权限位、所属组权限位、other权限位一组的顺序是固定的即rwx,每个位置上要么是字母要么是-表示没有 在介绍完角色、目标属性之后我们再来理解一个文件权限角色目标属性的含义。
如下图的my.txt文件对应拥有者来说可读、可写、不可执行;对于所属组来说可读、可写、不可以执行对于所属组来说可读不可写、不可执行。
所以当我们描述一个文件权限时必须是角色目标属性才能完整描述好一个权限 文件访问权限的相关设置方法
1. chmod 功能设置文件的访问权限 格式chmod [参数] 权限 文件名 常用选项 • R - 递归修改目录文件的权限 • 说明只有文件的拥有者和root才可以改变文件的权限 chmod命令权限值的格式 • 用户表示符/-权限字符 ◦ :向权限范围增加权限代号所表示的权限 ◦ -:向权限范围取消权限代号所表示的权限 ◦ :向权限范围赋予权限代号所表示的权限 ◦ 用户符号 ◦ u拥有者 ◦ g拥有者同组用 ◦ o其它用户 ◦ a所有用户 这里需要说明的是对于普通用户来说只能改自己的文件权限但是root不受限制 其次当文件失去对应权限比如r我们就不能在查看文件内容失去w我们就不能再向文件中写入数据 其次系统在确定用户权限是会先确定用户的的角色拥有者、所属组还是other角色确定好后在Centos系统下会按照拥有者、所属组、other顺序确定权限且只确定一次。
如下图当我们将whb拥有者的rwx权限去掉即使我们所属组也是whb,具有对应的权限但是我们依然不能读写这是因为系统会按照顺序确认角色whb与拥有者比对成功就按照拥有者权限不会继续比较其他角色权限了。 其次root用户所具有的权限不受到上述权限规则的限制想怎么做就怎么做。 对于可执行来说会特殊一点我们上面我们所添加的X可执行权限只是一种资格即使不是可执行文件我们依然可以添加x但是由于文件本身不具备可执行的能力即使有这个可执行的权限依然无法执行 2. chown 功能修改文件的拥有者 格式chown [参数] 用户名 文件名 实例 3. chgrp 功能修改文件或目录的所属组 格式chgrp [参数] 用户组名 文件名 常用选项-R 递归修改文件或目录的所属组 其次系统默认是不允许我们将文件随便给别人想要将文件给别人也必须高权限需要使用sudo
其次对于系统权限的表示方式还有进制表示方法如下图对于每一组权限位上的每一个都只有两台即字母或者-对应1或者0表示有或者无所以按照这个思路rw-rw-r--可以表示成110110100而每三位再按照8进制算成一个数字则变成664而这就是权限的8进制表示方式 所以我们现在可以按照上面8进制表示方式修改文件权限了比如444,4对应的是100所以会给每一组权限位加上r权限 目录的权限 • 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中. • 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件. 通过下面实验我们发现对于目录来说想要进入目录需要的是x权限 如果没有r权限就无法查看文件内的内容 如果没有w权限就无法删除或新增文件 所以默认情况下为了支持对目录的一系列操作新建目录默认rwx都要有
所以我们现在再回头理解Linux下的多用户隔离特性
当我们新增一个普通用户都会在home目录下新增一个同名家目录而我们发现对于这个目录只有拥有者有rwx对于其他人没有任何权限这样Linux下对于普通用户来说就无法对其他用户做任何事情root除外 那么问题再次回到文件权限本身为什么创建的新目录和文件权限是这样的呢如下图 在系统中对于普通文件来说其实权限是666不带可执行对于目录文件来说默认权限是777默认带x,但是我们发现上面的权限并不是这样这是因为系统中存在umask的原因
4. umask 功能 • 查看或修改文件掩码 • 新建文件夹默认权限0666 • 新建目录默认权限0777 • 但实际上你所创建的文件和目录看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask则实际创建的出来的文件权限是: 最终权限 mask ~umask 格式umask 权限值 说明将现有的存取权限减去权限掩码后即可产生建立文件时预设权限。超级用户默认掩码值为0022普通用户默认为0002。根据系统不同默认umask也会不同。 umask的目的就是希望凡是在umask中出现的权限都不应该在最终权限中出现而umask的出现让系统可配置可以根据需要灵活修改os自主决定的权限不至于出现无法再创建前修改系统默认配置的情况其次在特殊情况下umask的出现可以让我们控制文件的默认权限让我们的代码是可控的
file 指令 功能说明辨识文件类型。 语法 file [选项] 文件或目录... 常用选项 • -c详细显示指令执行过程便于排错或分析程序执行的情形。 • -z尝试去解读压缩文件的内容。 使用 sudo 分配权限 1修改/etc/sudoers 文件分配文件 # chmod 740 /etc/sudoers
# vi /etc/sudoer 格式接受权限的用户登陆的主机 执行命令的用户 命令 2使用 sudo 调用授权的命令 sudo –u 用户名 命令
实例 sudo -u root /usr/sbin/useradd u2
关于权限的总结 • 目录的可执行权限是表示你可否在目录下执行命令。 • 如果目录没有 -x 权限则无法对目录执行任何命令甚至无法 cd 进入目, 即使目录仍然有 -r 读权限这个地方很容易犯错认为有读权限就可以进入目录读取目录下的文件 • 而如果目录具有 -x 权限但没有 -r 权限则用户可以执行命令可以 cd 进入目录。但由于没有目录的读权限 • 所以在目录下即使可以执行 ls 命令但仍然没有权限读出目录下的文档。 重新回到目录权限的问题上通过上图我们发现只要对一个文件能否被删除与文件本身无关而与文件所处目录所处目录w权限有关
于是, 问题来了~~ 换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限. 这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?
但其实这个问题不算问题因为首先关键在于为什么别人的文件会在我的目录下既然在我的目录下作为我“家”当然有权利删除文件了
但是问题又来了既然一个文件在其他人目录下可以被删除那么如果多个用户之间要进行文件级别的协同操作呢
所以一定不能放在一个私人账号下/home下我们应该将这个文件放在系统根目录下的某个文件系统为我们提供了tmp文件。 但是还存在的一个问题是根目录下的文件已经可以和别人共享了但是文件依然可以被随便删除所以为了解决这个不科学的问题, Linux引入了粘滞位的概念.
粘滞位
[rootlocalhost ~]$ chmod t /home/ # 加上粘滞位
[rootlocalhost ~]$ ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[rootlocalhost ~]$ su - litao
[litaolocalhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm是否删除有写保护的普通空文件 /home/abc.cy
rm: 无法删除/home/abc.c: 不允许的操作 当一个目录被设置为粘滞位(用chmod t),则该目录下的文件只能由 1. 超级管理员删除 2. 该目录的所有者删除 3. 该文件的所有者删除 而由于根目录下的目录所有者是root所以当为了文件共享将文件放在根目录下的某一个目录内此时只有root和文件所有者可以删除其他人可以读写但是不能删除文件。
所以最终为了文件级的系统操作我们可以将文件放在根目录下的tmp