Linux基础学习3

鸟哥私房菜第十一章

read

用来读取键盘输入的变量,常被用在shell script的交互当中

[[email protected] ~]# read [-pt] variable
选项不参数:
-p :后面可以接提示字符!
-t :后面可以接等待的秒数!
范例:提示使用者15 秒内输入自己的大名,将输入的字符串作为named的变量内容
[email protected]:~$ read -p ‘please keyin your name:‘ -t 15 named
please keyin your name:zhenxiang
[email protected]:~$ echo $named
zhenxiang

ulimit 

文件系统及程序;限制用户的某些系统资源,包括可以开启的档案数,可以使用cpu的时间,可以使用的内存总量等等;

一般使用设定档案大小,只能缩小不能扩大;

变量内容的删除

#:从左往右删除第一个匹配;且是删除符合条件的最短的哪一个

注意:仅将匹配字符删除而不是按目录来删除的

[email protected]:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path#*lig*}
htdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path#*dm:}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

##:从左往右删除第一个匹配;且是删除符合条件的最长的哪一个

#和##比较:[email protected]:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path##/*:}
/usr/games
[email protected]:~$ echo ${path#/*:}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
 

%:从右往左删除第一个匹配,且是删除符合条件的最短的哪一个

[email protected]:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path%:*}
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

%%:从右 往左 删除第一个匹配;且是删除符合条件的最长的哪一个

%和%%比较:[email protected]:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path%:*}
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[email protected]:~$ echo ${path%%:*}
/usr/lib/lightdm/lightdm

变量的取代:

${变量/旧字符串/新字符串}: 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』

${变量//旧字符串/新字符串}: 若发量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』

两种比较范例:[email protected]:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path/lightdm/mm}
/usr/lib/mm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path//lightdm/mm}
/usr/lib/mm/mm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

#和/匹配区别:

#删除第一个匹配的,且删除最短的那个;

/替换第一个匹配的,且匹配最长的那个;

两种范例比较
[email protected]:~$ echo $path
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path/*lightdm/mm}
mm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo ${path#*lightdm}
/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
 

总结:对变量的修改格式:${变量|操作符|匹配字符};其中“|”是没有的;操作符有:匹配最少字符的 从左到右删除"#",从右到左删除"%",和匹配最多字符的 "##“  ”%%“ ;和只替换一个的 ”/“  全部替换的 "//"

history

[[email protected] ~]# history [-raw] histfiles

选项与参数:

n :数字,意思是『要列出最近的 n 笔命令行表』

-c :将目前的 shell 中的所有 history 内容全部消除

-a :将目前新增的history 指令新增入 histfiles 中,若没有加 histfiles ,

则预设写入 ~/.bash_history

-r :将 histfiles 的内容读取到目前这个 shell 的 history 记忆中;

-w :将目前的 history 记忆内容写入 histfiles 中!

必须要记好 -c,shell中将没有history内容噢;

HISTSIZE

shell 记录的命令的条数,也是~/.bash_history记录命令的笔数

在用户注销退出shell时将最近的命令更新到~/.bash_history当中;

用!command 执行history中最近的指令;比较有效率

用!number    执行第number行的history指令;

 

这个!command 甚是好用啊,在同一段时间内有的时候因为种种原因,老要输入同一条命令,比如说博主之前,要程序烧写到板子到中去 make install ttyusb3 ,但是会因为各种原因而烧写不成功,比如说烧写文件权限问题等等,反正当修改好了再次烧写时,对,没错就又要苦逼的 写同样的命令 make install ttyusb3 好烦,有了 !command 这个就好了 直接 !make 后面的事情就交给 history吧;

~/.bash_logout

当注销时系统自动完成的一些任务,如清屏;当然也可以根据自己的需求定制:如自动备份一些关键文档,或者清空暂存盘之类的工作;

通配符

*        代表[0个到无穷多个]任意字符

?        代表[一定有一个]任意字符

[]       同样代表[ 一定有一个在括号内]的字符(非任意字符),例如[abdc]代表【一定有一个字符,可能是abcd这四个任何一个】

[-]     代表在编码顺序内的所有字符,如[0-9]代表0到9之间的所以数字

[^]    表示[反向选择],例如[^abc]代表一定有一个字符,只要是非abc的其他字符

通配符还是很重要的啦,最常用了;可惜博主,还只是最熟悉*,因为他好记嘛,就是任意配就好;

还是得总结一下:?  []  ^  均是针对一个字符来讲的啦,? 问号当然是随意了,就是任意一个字符,[]任意一个中括号里面的字符  [^]与[]相对是任意一个不是中括号内的字符了;

        -   还是好理解的0-9 很显然的;

范例一:找出 /etc/ 底下以 cron 为开头的档名
[[email protected] ~]# ll -d /etc/cron* <==加上 -d 是为了仅显示目录而已

范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名
[[email protected] ~]# ll -d /etc/????? <==由于 ? 一定有一个,所以五个 ? 就对了

范例三:找出 /etc/ 底下文件名中有数字的文件名
[[email protected] ~]# ll -d /etc/*[0-9]* <==记得中括号左右两边均需 *

范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:
[[email protected] ~]# ll -d /etc/[^a-z]* <==注意中括号左边没有 *

范例五:将范例四找到的档案复制到 /tmp 中
[[email protected] ~]# cp -a /etc/[^a-z]* /tmp

其他不熟悉特殊符号

|      管道:分隔两个管线命令的界定

;      连续指令下达的分隔符:与管道并不相同

两者区别:

管线命令仅会处理 standard output,对与 standard error output 会予以忽略

管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。

如:less,cat,head;等可以接受前一个指令数据的是管道命令,而ls cd 等就不是

> ;  >>(standard output)

数据重定向 覆盖与累加

2> ;2>>(standard error)

错误数据重定向 覆盖与累加

犯了错误俗称2啦,所以以2开头的重定向当然是错误数据的重定向啦;

<;<<(standard input)

范例一:用 cat 指令来建立一个档案的简单流程
[[email protected] ~]# cat > catfile
testing
cat file test
<==这里按下 [ctrl]+d 来离开
[[email protected] ~]# cat catfile
testing
cat file test
范例二:用 stdin 来代键盘的输入以建立新档案的简单流程
[[email protected] ~]# cat > catfile < ~/.bashrc
[[email protected] ~]# ll catfile ~/.bashrc
-rw-r--r-- 1 root root 194 Sep 26 13:36 /root/.bashrc
-rw-r--r-- 1 root root 194 Feb 6 18:29 catfile
# 注意看,这两个档案的大小会一模一样!几乎像是使用 cp 来复制一般!

<< 这个连续两个小于的符号了。 他代表的是『结束的输入字符』的意思!举例来讲:『我要用 cat 直接将输入的讯息输出到 catfile 中, 且当由键盘输入 eof 时,该次输入就结束』,那我可以这样做:

[[email protected] ~]# cat > catfile << "eof"
> This is a test.
> OK now stop
> eof <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d
[[email protected] ~]# cat catfile
This is a test.

OK now stop <==只有这两行,不会存在关键词那一行!

双小于号表示结束的输入字符,还是很有意思的;在文档分析的时候也许会用到;

cut

[[email protected] ~]# cut -d‘分隔字符‘ -f fields <==用于有特定分隔字符

[[email protected] ~]# cut -c 字符区间 <==用于排列整齐的讯息

选项与参数:

-d :后面接分隔字符。与 -f 一起使用;

-f :依据 -d 癿分隔字符将一段讯息分割成为数段,用 -f 取出第几段的意思;

-c :以字符 (characters) 的单位取出固定字符区间;

grep

[[email protected] ~]# grep [-acinv] [--color=auto] ‘搜寻字符串‘ filename

选项与参数:

-a :将 binary 档案以 text 档案的方式搜寻数据

-c :计算找到 ‘搜寻字符串‘ 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 ‘搜寻字符串‘ 内容的那一行!

--color=auto :可以将找到的关键词部分加上颜色的显示喔!

重点是-i 这个选项哦,有的时候博主还是常用了;

双向重导向:tee

tee 会同时将数据流分送到档案与屏幕,其实就是stdout,可以让下一个指令继续处理

[[email protected] ~]# tee [-a] file
选项与参数:

-a :以累加 (append) 的方式

注意:file指的是数据保存的文档哦,不是数据流;数据流从标准输入输出中接受;

在调试代码当中会有需求用到,即想将输出保存下来,又想输出的时候;也许在这种场景会很实用:无线传感网络SINK点回收数据的时候,监听串口数据,即想保存下来,又想实时在屏幕中查看。

范例:
[[email protected] ~]# who | tee who.out
root     pts/0        2009-02-17 07:47 (123.123.123.123)
[[email protected] ~]# cat who.out
root     pts/0        2009-02-17 07:47 (123.123.123.123)

使用者账号登录

登陆流程

1. 先找寻 /etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的UID 与GID (在 /etc/group 中) 读出来,另外,该账号的家目录与 shell 设定也一并读出;

2. 再来则是核对密码表啦!这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的密码与里头的密码是否相符?

3. 如果一切都 OK 的话,就进入 Shell 控管的阶段啰!

/etc/passwd档案结构

[[email protected] ~]# head -n 4 /etc/passwd
root:x:0:0:root:/root:/bin/bash <==等一下做为底下说明用
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

每一行使用 :分隔共有七个东东分别是:

1. 账号名称:就是账号啦!用来对应 UID 的。例如 root 的UID 对应就是 0 (第三字段);

2. 密码:早期 Unix 系统的密码就是放在这字段上!但是因为这个档案的特性是所有的程序都能够读取,这样一来很容易造成密码数据被窃取, 因此后来 就将这个字段的密码数据给他改放到

/etc/shadow 中了。所以这里你会看到一个『x 』。

3. UID:

0             当UID是0时,代表这个账号是系统管理员,所以当你要让其他的账号名称也具有root的权限时,将该账号的UID改为0即可;

1-99        由distribution自行建立的系统账号

100-499   当用户有系统账号需求时,可以用的UID

500-65535  给一般使用者用的

4. GID:

这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范组名与 GID 的对应而已!

5.用户信息说明:

用户信息说明栏:这个字段基本上幵没有什么重要用途,只是用来解释这个账号的意义而已

6. 家目录:

这是用户的家目录,以上面为例, root 的家目录在 /root ,所以当 root 登入之后,就会立刻跑到 /root 目录里头啦!呵呵! 如果你有个账号的使用空间特别的大,你想要将该账号的家目录移动到其他的硬盘去该怎么做? 没有错!可以在这个字段进行修改呦!默认的用户家目录在/home/yourIDname

7. Shell:

那为何预设shell 会使用 bash 呢?就是在这个字段指定的啰! 这里比较需要注意的是,有一个 shell 可以用来替代成让账号无法取得 shell 环境的登入动作!那就是/sbin/nologin 这个东西!

/etc/shadow

[[email protected] ~]# head -n 4 /etc/shadow
root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7::: <==底下说明用
bin:*:14126:0:99999:7:::
daemon:*:14126:0:99999:7:::
adm:*:14126:0:99999:7:::

shadow同样以【:】分隔,共有九个字段分别是:

1.账号名称

2.密码

3. 最近更动密码的日期:

值得注意的是日期时间从1970年1月1日作为1,到1971年1月1日为366

4.密码不可被更动的天数:

(与第 3 字段相比)第四个字段让录了:这个账号的密码在最近一次被更改后需要经过几天才可以再被变更!如果是0 的话, 表示密码随时可以更动的意思。

5. 密码需要重新变更动天数:

(与第 3 字段相比) 你必须要在这个天数内重新设定你的密码,否则这个账号的密码将会『变为过期特性』 。

6.密码需要变更期限前的警告天数:

(与第 5 字段相比)当账号的密码有效期限快要到的时候 (第 5 字段),系统会依据这个字段的设定,发出『警告』给这个账号,提醒他『再过 n 天你的密码就要过期了,请尽忚重新设定你的密码』

7. 密码过期后的账号宽限时间(密码失效日)

8. 账号失效日期:

将数据加入 file 当中!

9. 保留:

注意密码过期与失效有差异,密码过期其实仍能使用,且在登录的时候系统强行要求更改密码;而密码失效则无法再使用;

所以学校那些登陆之后,强制要求更改密码的,就是利用密码过期强行要求更改密码这个效果,下面做个小实验:

1.创建一个账户,并设置初始密码为000000;2.当用户登陆时,强制用户更改密码;

范例一:建立一个名为 agetest的账号,该账号第一次登入后使用默认密码,
但必须要更改过密码后,使用新密码才能够登入系统使用 bash 环境
[[email protected] ~]# useradd agetest
[[email protected] ~]# echo "000000" | passwd --stdin agetest
[[email protected] ~]# chage -d 0 agetest
# 此时此账号的密码建立时间会被改为 1970/1/1 ,所以会有问题!
范例二:尝试以 agetest 登入的情况
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user agetest.
Changing password for agetest
(current) UNIX password: <==这个账号被强制要求必须要改密码!

问题:

要使用户登陆,则立刻需要更改密码;用到密码过期系统强行要求更改密码;这样自然想到更改第5个字段,密码需要重新变更的天数到了天数就会过期,那么为什么将第五字段设置为与第三字段一样,达不到立即失效的效果呢?

关于群组

/etc/group档案结构

[[email protected] ~]# head -n 4 /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon

sys:x:3:root,bin,adm

每一行代表一个群组,以:作为字段分隔符,总共四栏:

1. 组名

2. 群组密码

3. GID

就是群组的 ID 我们 /etc/passwd 第四个字段使用的GID 对应的群组名,就是由这里对应出来的!

4.次群组支持的账号名称

我们知道一个账号可以加入多个群组,那某个账号想要加入此群组时,将该账号填入这个字段即可。 如果我想要将 dmtsai 也加入 root 这个群组,那举在第一行的最后面加上『 ,dmtsai』,注意不要有空格, 使成为『root:x:0:root,dmtsai 』就可以啰~

每个使用者都可以拥有多个支持的群组,那么在操作时以哪个群组为准呢?

那么就涉及到   有效群组的概念

有效群组(effective group)与初始群组(initial group)

每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID 吧?那个 GID 就是所谓的『初始群组 (initial group) 』!也就是说,当用户一登入系统,立刻就拥有这个群组的相关权限的意思

初始群组即 在 /etc/passwd中第四个字段设定的群组ID,也就是GID;

在 /etc/group中在某个群组中增加了,组员,组员也获得群组号;

[[email protected] ~]$ groups

dmtsai users

第一个便是有效群组,

newgrp:有效群组的切换

想要切换的群组必须是你已经有支持的群组;

范例:

[[email protected] ~]$ newgrp users
[[email protected] ~]$ groups

users dmtsai

账号管理

useradd:

[[email protected] ~]# useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell]  使用者账号名

可以指定 UID  GID 及次要群组,有没有家目录及家目录是什么,

范例一:完全参考默认值建立一个用户,名称为 vbird1

[[email protected] ~]# useradd vbird1

范例二:假设我已知道我的系统当中有个组名为 users ,且UID 700 不存在

请用 users 为初始群组,以及 uid 为 700 来建立一个名为 vbird2 的账号

[[email protected] ~]# useradd -u 700 -g users vbird2
[[email protected] ~]# ll -d /home/vbird2
drwx------ 4 vbird2 users 4096 Feb 25 09:59 /home/vbird2
[[email protected] ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird2:x:700:100::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:14300:0:99999:7:::

  # 看一下,UID 与 initial group 确实改变成我们需要的了!

/home/vbird1

范例三:建立一个系统账号,名称为 vbird3
[[email protected] ~]# useradd -r vbird3

[[email protected] ~]# ll -d /home/vbird3

ls: /home/vbird3: No such file or directory <==不会主动建立家目录

[[email protected] ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird3:x:100:103::/home/vbird3:/bin/bash

/etc/shadow:vbird3:!!:14300::::::

那么useradd默认参考值从来哪呢?

useradd参考档案 /etc/default/useradd

[[email protected] ~]# useradd -D

GROUP=100 <==预设的群组

HOME=/home <==默认的家目录所在目录

INACTIVE=-1 <==密码失效日,在 shadow 内的第 7 栏

EXPIRE= <==账号失效日,在 shadow 内的第 8 栏

SHELL=/bin/bash <==预设的 shell

SKEL=/etc/skel <==用户家目录的内容数据参考目录

CREATE_MAIL_SPOOL=yes <==是否主劢帮使用者建立邮件信箱(

GROUP=100 mailbox)

新建用户初始群组的两种不同机制:

私有群组机制:系统会建立一个与账号一样的群组给使用者作为初始群组。 这种群组设训定机制会比较有保密性,这是因为使用者都有自己的群组,而且家目录权限将会设定为700 (仅有自己可进入自己的家目录)。使用这种机制将不会参考 GROUP=100 这个设定值。代表性的 distributions 有 RHEL, Fedora, CentOS 等;

公共群组机制:就是以 GROUP=100 这个设定值作为新建账号的初始群组,因此每个账号都属于 users 这个群组, 但默认家目录通常的权限会是『drwxr-xr-x ... usernameusers ... 』,由于每个账号都属亍 users 群组,因此大家都可以互相分享家目录内的数据。代表 distributions 如 SuSE 等。

SKEL=/etc/skel

若在 该目录下 增加www这个目录,则之后创建的用户家目录中均会有www这个目标;

除了基本的账号设定值外,UID/GID密码参数,范围参数就是参照

/etc/login.defs

所以使用useradd程序建立Linux上的账号时,至少会参照:

/etc/default/useradd

/etc/login.defs

/etc/skle/*

passwd

两种情况:root 帮忙设定密码;自己设定自己密码;

自动化脚本中使用

范例三:使用 standard input 建立用户的密码
[[email protected] ~]# echo "abc543CC" | passwd --stdin vbird2
Changing password for user vbird2.
passwd: all authentication tokens updated successfully.

这个动作会直接更新用户的密码而不用再次的手动输入!好处是方便处理,缺点是这个密码会保留在指令中, 未来若系统被攻破,人家可以在 /root/.bash_history 找到这个密码呢!所以这个动作通常仅用在 shell script 的大量建立使用者账号当中!要注意的是,这个选项并不存在所有 distributions 版本中。

当然passwd,可以规定密码变更,失效的天数;也可以立即失效于立即恢复,详细当然要看 man passwd;

 

chage

除了使用 passwd -S 之外,有没有更详细的密码参数显示功能呢?有的!那就是 chage 了! 具体方法参照man chage;

不错的功能:

使用者在第一次登陆之后,强制一定要更改密码之后才能够使用系统资源;

范例一:建立一个名为 agetest 的账号,该账号第一次登入后使用默认密码,

但必须要更改过密码后,使用新密码才能够登入系统使用 bash 环境
[[email protected] ~]# useradd agetest
[[email protected] ~]# echo "agetest" | passwd --stdin agetest

[[email protected] ~]# chage -d 0 agetest

# 此时此账号的密码建立时间会被改为 1970/1/1 ,所以会有问题!

范例二:尝试以 agetest 登入的情况

You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!

Changing password for user agetest.

Changing password for agetest

(current) UNIX password: <==这个账号被强制要求必须要改密码!

 

userdel

[[email protected] ~]# userdel [-r] username

选项不参数:

-r :连同用户的家目录也一起删除

finger

这个 finger 可以查阅很多用户相关的信息喔! 大部分都是在 /etc/passwd 这个档案里面的信息啦!

范例一:观察 vbird1 的用户相关账号属性
[[email protected] ~]# finger vbird1
Login: vbird1 Name: (null)
Directory: /home/vbird1 Shell: /bin/bash
Never logged in.
No mail.

No Plan.

范例三:找出目前在系统上面登入的用户与登入时间

[[email protected] ~]$ finger

chsh

change shell 的缩写

[[email protected] ~]$ chsh [-ls]

选项不参数:

-l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容!

-s :设定修改自己的 Shell 啰

不论是 chfn 或 chsh ,都是能够让一般用户修改 /etc/passwd 这个系统文件的!所以你猜猜,这两个档案的权限是什么? 一定是 SUID 的功能啦

新增与移除群组:

基本上两个文档的事情:/etc/group  ;/etc/gshadow

[[email protected] ~]# groupadd [-g gid] [-r] 组名

选项与参数:

-g :后面接某个特定的 GID ,用来直接给予某个 GID ~

-r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。

groupadd

范例一:新建一个群组,名称为 group1
[[email protected] ~]# groupadd group1
[[email protected] ~]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:702:

/etc/gshadow:group1:!::

不加参数默认:GID由500以上最大的GID+1;

groupmod

[[email protected] ~]# groupmod [-g gid] [-n group_name] 群组名

选项与参数:

-g :修改既有的 GID 数字;

-n :修改既有的组名

范例一:将刚刚上个指令建立的 group1 名称改为 mygroup,GID 为 201
[[email protected] ~]# groupmod -g 201 -n mygroup group1
[[email protected] ~]# grep mygroup /etc/group /etc/gshadow
/etc/group:mygroup:x:201:
/etc/gshadow:mygroup:!::

groupdel

范例一:将刚刚的 mygroup 删除!

[[email protected] ~]# groupdel mygroup

gpasswd:群组管理员功能

# 关于系统管理员(root)做的动作:

[[email protected] ~]# gpasswd groupname
[[email protected] ~]# gpasswd [-A user1,...] [-M user3,...] groupname

[[email protected] ~]# gpasswd [-rR] groupname

选项与参数:

:若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)

-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)

-M :将某些账号加入这个群组当中!

-r :将 groupname 的密码移除

-R :让 groupname 的密码栏失效

 

# 关于群组管理员(Group administrator)做的动作:

[[email protected] ~]$ gpasswd [-ad] user groupname

选项与参数:

-a :将某位使用者加入到 groupname 这个群组当中!

-d :将某位使用者移除出 groupname 这个群组当中。

ACL  Access Control List

那 ACL 主要可以针对哪些方面来控制权限呢?他主要可以针对几个项目:

? 使用者 (user):可以针对使用者来设定权限;

? 群组 (group):针对群组为对象来设定其权限;

? 默认属性 (mask):还可以针对在该目录下在建立新档案/目录时,规范新数据的默认权限;

[[email protected] ~]# touch acl_test1
[[email protected] ~]# ll acl_test1
-rw-r--r-- 1 root root 0 Feb 27 13:28 acl_test1
[[email protected] ~]# setfacl -m u:vbird1:rx acl_test1
[[email protected] ~]# ll acl_test1

-rw-r-xr--+ 1 root root 0 Feb 27 13:28 acl_test1

# 权限部分多了个 + ,且不原本的权限 (644) 看起来差异很大!

使用chown命令可以修改文件或目录所属的用户:

命令:chown 用户 目录或文件名

例如:chown qq /home/qq  (把home目录下的qq目录的拥有者改为qq用户)

使用chgrp命令可以修改文件或目录所属的组:

命令:chgrp 组 目录或文件名

例如:chgrp qq /home/qq  (把home目录下的qq目录的所属组改为qq组)

chown 还可以将所属群组和所属用户一起改了

chown newuser:newgroup /home/qq

时间: 2024-08-24 08:14:15

Linux基础学习3的相关文章

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

c/c++unix/linux基础学习笔记-常用命令和vi的使用

linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用. 多条命令间用;号隔开,回车后可以一起执行. clear-前屏,pwd显示当前目录,cd跳转目录. sudo [命令]  -ubuntu 下以管理员身份运行命令. 一般情况下,运行当前目录下的程序,要用 ./文件名 执行. 查看当前shell名称:ps 进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit. 切换shell命令,如:exec

Linux基础学习-crond系统计划任务

系统计划任务 大部分系统管理工作都是通过定期自动执行某个脚本来完成的,那么如何定期执行某个脚本,从而实现运维的自动化,这就要借助Linux的cron功能了. 计划任务分为一次性计划任务和周期性计划任务. 一次性计划任务 每晚11店30分开启网站服务. 周期性计划任务 每周一的凌晨3点30分把/var/www/html目录打包备份为backup.tar.gz 顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求,可以使用at命令实现. 如果你的Linux没有此命令可以使用yum inst

linux基础学习【4】

系统进程 一.什么是进程 进程 : 一个正在运行中的程序 程序被触发后,执行者的权限与属性,程序的程序码与所需数据等都会被载入内存中,操作系统会给予这个内存内的单元一个识别码 (PID). 二.查看进程 1.图形方式查看 命令:`gnome-system-monitor` 2.进程查看命令 命令:`ps` ps -A/-e 显示所有(包括不同终端不同用户)进程(PID,TTY,TIME,CMD) ps -a 当前环境中运行的进程,不包含环境信息(PID,TTY,TIME,CMD) ps -u (

linux基础学习【5】

sshd服务,服务管理及文件传输 一.控制服务 1.什么是服务 2.用什么控制服务 系统初始化进程可以进行相应的控制 3.当前系统初始化进程是什么 systemd 系统初始化进程 pstree 显示系统中的进程树 进程树 4.系统控制命令 ssh(client)客户端---->sshd(server)服务器 命令:`systemctl` systemctl status sshd 查看sshd服务的状态inactive(不可用)/active(可用) systemctl start sshd 开

linux基础学习随笔【根本没有排序哈】

直接整:init 3 5 6 0;init 3代表切换到字符界面,5代表切换到图形界面:6表示重启,等同于reboot:0表示关机=poweroff:改主机名:hostnamectl set-hostname centos7.localdomain;[记不住,TAB键补全]查看操作系统linux版本:cat /etc/centos-release;或者通过安装lsb_release -a ;查看内核版本: uname -rlscpu 查看CPU使用情况:lsblk查看硬盘:free - h查看内

linux基础学习四

本次继续学习linux基础命令,包括stat.touch.cp.mv.rm.tree.mkdir.rmdir stat 命令格式 stat [OPTION]... FILE... 命令功能 显示文件的时间戳,即访问时间.修改时间和改变时间 stat [OPTION]... FILE...      [[email protected] ~]# stat newfile       File: `newfile'      Size: 0          Blocks: 0          I

系统管理员-Linux基础学习-第一部分内容。

6月30日前完成Linux的基础部分学习. 包括内容: 马哥的Linux基础教程 鸟哥的Linux私房菜-基础学习篇 第一部分 认识linux及linux主机规划与安装. 课程内容包括: (1)计算机体系架构与linux背景常识 (2)Linux主机规划与安装及vmware.xmanager的使用. (3)启动帮助与开关linux系统及基本操作知识. 具体内容笔记: 第一节:计算机体系架构与linux背景常识 1)计算机组成主要分为五个部分:控制单元.运算单元.存储单元.输入\输出单元. 1.

Linux基础学习路线指导

基础学习路线指南 Centos镜像下载地址 http://mirrors.163.com/centos/6/isos/x86_64/CentOS-6.6-x86_64-bin-DVD1.iso 开源镜像站下载  http://tshare365.com/archives/471.html VMware 安装Centos6  http://tshare365.com/archives/1122.html  (推荐大家使用Centos6) VMware安装Centos7  http://tshare

linux基础学习之 学习笔记

Linux是什么 1. linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来的. 2. 1973年:unix的正式诞生,Ritchie等人以C语言写出第一个正式unix核心. 3. 1977年:重要的unix分支--BSD(Berkeley Software Distribution)的诞生. 4. 目前被称为纯的unix指的就是System V(AT&T) 以及BSD(SUN)这两套. 5. 1984年,史托曼开始GNU计划,这个计划的目的是:建立一个自由.开放的un