linux鸟哥私房菜

鸟哥私房菜官网
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

第六章 Linux的文件属性与目录配置

6.2.1 Linux文件属性

图5.2.1、档案属性的示意图

图5.2.2、档案的类型与权限之内容

6.2.2改变文件属性和权限

*chgrp :*更改文件所属组

  • 语法与范例
[root@study ~]# chgrp [-R] dirname/filename ...
選項與參數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案、目錄
     都更新成為這個群組之意。常常用在變更某一目錄內所有的檔案之情況。
範例:
[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May  4 18:01 initial-setup-ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group:  `testing' <== 發生錯誤訊息囉~找不到這個群組名~

*chown :*改变文件所有者

  • 语法与范例
[root@study ~]# chown [-R] 帳號名稱 檔案或目錄
[root@study ~]# chown [-R] 帳號名稱:群組名稱 檔案或目錄
選項與參數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都變更

範例:將 initial-setup-ks.cfg 的擁有者改為bin這個帳號:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin  users 1864 May  4 18:01 initial-setup-ks.cfg

範例:將 initial-setup-ks.cfg 的擁有者與群組改回為root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May  4 18:01 initial-setup-ks.cfg
  • 复制文件给其他人
[root@study ~]# cp 來源檔案 目的檔案

假设你今天要将.bashrc这个文件拷贝成为.bashrc_test文件名,且是要给bin这个人,你可以这样做


[root@study ~]# cp .bashrc .bashrc_test
[root@study ~]# ls -al .bashrc*
-rw-r--r--. 1 root root 176 Dec 29  2013 .bashrc
-rw-r--r--. 1 root root 176 Jun  3 00:04 .bashrc_test   <==新檔案的屬性沒變

由于复制行为(cp)会复制执行者的属性与权限,所以! 怎么办?.bashrc_test还是属于root所拥有, 如此一来,即使你将档案拿给bin这个用户了,那他仍然无法修改的(看属性/权限就知道了吧), 所以你就必须要将这个档案的拥有者与群组修改

*chmod :*更改文件的权限, SUID, SGID, SBIT 等等的特性

数字类型改变档案权限

各权限的分数对照表如下:
r:4
w:2
x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= — = 0+0+0 = 0

  • 语法与范例

更改权限的命令chmod的语法是这样的:

[root@study ~]# chmod [-R] xyz 檔案或目錄
選項與參數:
xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更

举例来说,如果要将.bashrc这个档案所有的权限都设定启用,那么就下达:


[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29  2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29  2013 .bashrc

那如果要将权限变成『 -rwxr-xr-- 』呢? 那么权限的分数就成为[4+2+1][4+0+1][4+0+0]=754啰! 所以你需要下达’chmod 754 filename’。
另外,在实际的系统运作中最常发生的一个问题就是,常常我们以vim编辑一个shell的文字文档后,他的权限通常是 -rw-rw-r-- 也就是664, 如果要将该文件变成可执行文件,并且不要让其他人修改此一档案的话, 那么就需要-rwxr-xr-x这样的权限,此时就得要下达:’ chmod 755 test.sh ‘的指令啰!
另外,如果有些档案你不希望被其他人看到,那么应该将档案的权限设定为例如:’-rwxr-----’,那就下达’’'740 filename '吧!
注:只写一个数字是其他用户者的

符号类型改变文件

一个改变权限的方法呦! 从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others三种身份啦! 那么我们就可以借由 u, g, o来代表三种身份的权限! 此外, a则代表 all 亦即全部的身份! 那么读写的权限就可以写成r, w, x啰! 也就是可以使用下面的方式来看:
表6-1

  • 如我们要’设定’一个文件的权限成为’-rwxr-xr-x’时
root@study ~]# chmod  u=rwx,go=rx  .bashrc
# 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空白字元!
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29  2013 .bashrc
  • 那么假如是’ -rwxr-xr-- 』这样的权限呢? 可以使用’ chmod u=rwx,g=rx,o=r filename '来设定。 此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29  2013 .bashrc
[root@study ~]# chmod  a+w  .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29  2013 .bashrc
  • 而如果是要将权限去掉而不更动其他已存在的权限呢? 例如要拿掉全部人的可执行权限,则:
[root@study ~]# chmod  a-x  .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29  2013 .bashrc
[root@study ~]# chmod 644 .bashrc  # 測試完畢得要改回來喔!

知道 +, -, = 的不同点了吗? 对啦! + 与 – 的状态下,只要是没有指定到的项目,则该权限’不会被变动’, 例如上面的例子中,由于仅以 – 拿掉 x 则其他两个保持当时的值不变! 多多实作一下,你就会知道如何改变权限啰!

6.23 目录和文件的权限意义

r (read contents in directory)

  • 以查询该目录下的文件名资料。 所以你就可以利用 ls 这个命令将该目录的内容列表显示出来!

w (modify contents of directory)

  • 建立新的文件与目录;
  • 删除已经存在的文件与目录(不论该档案的权限为何! )
  • 将已存在的文件或目录进行更名;
  • 搬移该目录内的文件、目录位置。

x (access directory)

-目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦

表6.2

w、x的区别

例题 : 有个目录的权限如下所示: 系统有个账号名称为vbird,这个帐号并没有支持root群组,请问vbird对这个目录有何权限?
是否可切换到此目录中? drwxr–r-- 3 root root 4096 Jun 25 08:35 .ssh 答 :
vbird对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表。 因为vbird不具有x的权限,亦即 vbird
没有这个抽屉的钥匙啦! 因此vbird并不能切换到此目录内! (相当重要的概念! )

上面这个例题中因为vbird具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录,只与该目录的x权限有关啦! 此外, 工作目录对于命令的执行是非常重要的,如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或w的权限。

权限注意

例题 :
假设有个账号名称为dmtsai,他的家目录在/home/dmtsai/,dmtsai对此目录具有[rwx]的权限。 如果您在此目录下有个名为the_root.data的文件,该文件的权限如下: 请问dmtsai对此文件的权限为何? 可否删除此文件?
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data
答 :
如上所示,由于dmtsai对此档案来说是’others’的身份,因此这个文件他无法读、无法编辑也无法执行, 也就是说,他无法变动这个档案的内容就是了。
但是由于这个文件在他的家目录下, 他在此目录下具有rwx的完整权限,因此对于the_root.data这个’文件名’来说,他是能够’删除’
的! 结论就是,dmtsai这个用户能够删除the_root.data这个档案!

  • 先用root的身份建立所需要的档案与目录环境
在这里插入代码片

第11章 认识与学习bash

11.1 认识bash这个shell

11.1.1 硬件、内核与shell

用户可以通过应用程序来指挥核心, 让核心达成我们所需要的硬件任务! 如果考虑如第零章所提供的操作系统图标(图0.4.2), 我们可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个咚咚也就被称呼为壳程序 (shell) 啰!
其实壳程序的功能只是提供用户操作系统的一个接口,因此这个壳程序需要可以呼叫其他软件才好。 我们在第四章到第九章提到过很多指令,包括 man, chmod, chown, vi, fdisk, mkfs 等等指令,这些指令都是独立的应用程序, 但是我们可以通过壳程序 (就是指令行模式) 来操作这些应用程序,让这些应用程序呼叫核心来运作所需的工作哩! 这样对于壳程序是否有了一定的概念了?
鳥哥的圖示也就是说**,只要能够操作应用程序的接口都能够称为壳程序。 狭义的壳程序指的是指令列方面的软件,包括本章要介绍的 bash 等。 广义的壳程序则包括图形界面的软件**! 因为图形界面其实也能够操作各种应用程序来呼叫核心工作啊! 不过在本章中,我们主要还是在使用 bash 啦!

11.1.2 为何要学命令界面的shell

  • 文字界面的 shell:大家都一样!
  • 远程管理:文字界面就是比较快!
  • Linux 的任督二脉: shell 是也!

如果你真的有心想要将您的主机管理的好,那么良好的 shell 程序编写是一定需要的啦! 就鸟哥自己来说,鸟哥管理的主机虽然还不算多,只有区区不到十部,但是如果每部主机都要花上几十分钟来查阅他的登录文件信息以及相关的讯息, 那么鸟哥可能会疯掉! 基本上,也太没有效率了! 这个时候,如果能够通过 shell 提供的数据流重定向以及管道命令,呵呵! 那么鸟哥分析登录信息只要花费不到十分钟就可以看完所有的主机之重要信息了! 相当的好用呢!

补充:数据流重定向Linux基础(11)/数据流重定向
Linux中的数据流重定向

11.1.3 系统的合法 shell 与 /etc/shells 功能

  • 知道什么是 Shell 之后,那么我们来了解一下 Linux 使用的是哪一个 shell 呢?

什么! 哪一个? 难道说 shell 不就是’一个 shell 吗? 』哈哈! 那可不! 由于早年的 Unix 年代,开发者,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头预设的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。 至于 Linux 使用的这一种版本就称为’ Bourne Again SHell (简称 bash) 』,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!
在介绍 shell 的优点之前,先来说一说 shell 的简单历史吧(注2):第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为 sh ! 而后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似 C 语言,所以才得名为 C shell ,简称为 csh ! 由于在学术界 Sun 主机势力相当的庞大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一个很重要而且流传很广的 shell 之一 。

  • 为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件

因为系统某些服务在运作过程中,会去检查用户能够使用的 shells ,而这些 shell 的查询就是藉由 /etc/shells 这个文件

  • 我这个用户什么时候可以取得 shell 来工作呢? 还有, 我这个用户默认会获取哪一个 shell 啊?

在每一行的最后一个资料,就是你登入后可以取得的预设的 shell

11.1.4 Bash shell的功能

  • 命令编修能力( history):

你曾经下达过的指令几乎都被记录下来了。
这么多的指令记录在哪里呢? 在你的家目录内的.bash_history啦! 不过,需要留意的是,~/.bash_history
记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂存在内存中,当你成功的注销系统后,该指令记忆才会记录到
.bash_history 当中!

  • 命令和文件补全功能: ([tab] 按钮的好处)

常常在 bash 环境中使用 [tab] 是个很棒的习惯喔! 因为至少可以让你1)少打很多字; 2)确定输入的数据是正确的! 使用 [tab] 按键的时机依据 [tab] 接在指令后或参数后而有所不同。 我们再复习一次:
Tab] 接在一串指令的第一个字的后面,则为命令补全; [Tab] 接在一串指令的第二个字以后时,则为『档案补齐』! 若安装
bash-completion 软件,则在某些命令后面使用 [tab] 按键时,可以进行’选项/参数的补齐’功能!
所以说,如果我想要知道我的环境当中所有以 c 为开头的指令呢? 就按下『 c[tab][tab] 』就好啦! _! 是的!
真的是很方便的功能,所以,有事没事,在 bash shell 底下,多按几次 [tab] 是一个不错的习惯啦!

  • 命令别名设置功能: (alias)

直接以 lm 这个自订的命令来取代上面的命令,也就是说, lm 会等于 ls -al这样的一个功能
你可以在命令行输入 alias 就可以知道目前的命令别名有哪些了! 也可以直接下达命令来设置别名呦:
· alias lm=‘ls -al’

  • 任务控制、前景背景控制: (job control, foreground, background)

第十六章 Linux 程序控制

  • 程序化脚本: (shell scripts)

第十二章

  • 万用字符: (Wildcard)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值