Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1301282
  • 博文数量: 548
  • 博客积分: 7597
  • 博客等级: 少将
  • 技术积分: 4224
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 13:21
个人简介

嵌入式软件工程师&&太极拳

文章分类

全部博文(548)

文章存档

2014年(10)

2013年(76)

2012年(175)

2011年(287)

分类: LINUX

2011-02-17 17:28:39

第一、访问控制列表

例子1:
用户 属组 权限
root root: rwx
tom tom: rw-
bean bean: r--
jack jack: ---
hellen root: rw-
moto bean: r-x


# getfacl logout.txt
# file: logout.txt
# owner: root
# group: root
user::rwx <---文件拥有者的权限
user:tom:rw- <---指定某个用户的具体权限,因为这里出现了user:tom:关键字控制
user:bean:r-- <---指定某个用户的具体权限
group::rw- <--- ::之间没有任何名字就代表控制文件拥有组的权限
group:bean:r-x
mask::rwx
other::---

归纳:判断一个用户对某个文件的权限的过程
1、该用户是否是这个文件的拥有者,如果是,就直接按拥有者的权限,也就ls -l 可以直接判断出来的权限,或者getfacl 出来之后看到的user::??? 对应的权限,判断完成。如果不是就接着下面的步骤判断

2、如果该用户不是文件的拥有者,就看看是否存在针对该用户的具体的访问控制,如果有,就根据acl的设定决定他的权限,判断完成。如果没有,再接着第三步判断

3、如果没有针对该用户的具体acl设定,那么就判断这个用户是否属于文件的拥有组里的成员,如果是,就按拥有组的权限(group::???),判断完成。否则,接着第四步骤

4、如果用户不属于文件的拥有组里的成员,就看看是否有针对该用户所属于组的具体的acl控制,如果有就按照具体的acl设定。否则第五步

5、以上就不匹配就是代表他处于所有人的角色,权限也就是所有人的权限,具体的权限可以直接ls -l得到,或者getfacl 结果中other::???




setfacl  -m user::rwx,user:tom:rw,user:bean:r,group::rw,group:bean:rx,other::--- logout.txt



例子2:

用户 属组 权限
root root: r-x
tom tom: r--
bean bean: rw-
jack jack: -w-
hellen root: r-x
moto bean: --x


# getfacl logout.txt
# file: logout.txt
# owner: root
# group: root
user::r-x <---文件拥有者的权限
user:tom:r-- <---指定某个用户的具体权限,因为这里出现了user:tom:关键字控制
user:bean:rw- <---指定某个用户的具体权限
group::r-x <--- ::之间没有任何名字就代表控制文件拥有组的权限
group:bean:--x
mask::rwx
other::-w-

setfacl -m user::rx,user:tom:r,user:bean:rw,group::rx,group:bean:x,other::w ./logout.txt

例子3:

用户 属组 权限
root root:
tom tom:
bean bean:
jack jack:
hellen root:
moto bean:


# getfacl logout.txt
# file: logout.txt
# owner: root
# group: root
user::r-- <---文件拥有者的权限
user:tom:r-x <---指定某个用户的具体权限,因为这里出现了user:tom:关键字控制
user:bean:--- <---指定某个用户的具体权限
group::r-- <--- ::之间没有任何名字就代表控制文件拥有组的权限
group:bean:-w-
mask::rwx
other::r--

# setfacl -m user::r,user:tom:rx,user:bean:-,group::r,group:bean:w,other::r ./logout.txt



例子4:

用户 属组 权限
root root:
tom tom:
bean bean: -w-
jack jack:
hellen root:
moto bean:


# getfacl logout.txt
# file: logout.txt
# owner: root
# group: root
user::r-- <---文件拥有者的权限 ,直接看这里,ls -l
user:tom:r-x <--- *  指定某个用户的具体权限,因为这里出现了user:tom:关键字控制
group::r-- <--- *  ::之间没有任何名字就代表控制文件拥有组的权限
group:bean:-w- <--- *
mask::rwx
other::r--

# setfacl -m user::r,user:tom:rx,group::r,group:bean:w,other::r ./logout.txt

注意:在权限的判断过程中,拥有者和其他人的权限可以通过ls -l直接得到或者通过getfacl直接得到,不需要任何计算;其他的,包括拥有组,具体的某个组,具体某个用户他们的具体权限,还需要通过mask进行取交集(取相同)

tom   r-x
mask  rwx   ==> r-x

group r--
mask  rwx  ==>  r--

group:bean:  -w-
mask         rwx   ===> -w-



例子5:

用户 属组 权限
root root: r--
tom tom: r--
bean bean: ---
jack jack: r--
hellen root: r--
moto bean: ---


# getfacl logout.txt
# file: logout.txt
# owner: root
# group: root
user::r-- <---文件拥有者的权限 ,直接看这里,ls -l
user:tom:r-x <--- *  指定某个用户的具体权限,因为这里出现了user:tom:关键字控制
group::r-- <--- *  ::之间没有任何名字就代表控制文件拥有组的权限
group:bean:-w- <--- *
mask::r--
other::r--

tom : r-w
mask: r--  ==> r--

group:bean  -w-
mask:       r--  ==>  ---

setfacl -m user::r,user:tom:rx,group::r,group:bean:w,other::r,mask::r ./logout.txt

真正的输出结果:
[root@dns test]# getfacl ./logout.txt
# file: logout.txt
# owner: root
# group: root
user::r--
user:tom:r-x                    #effective:r--
group::r--
group:bean:-w-                  #effective:---
mask::r--
other::r--


练习:
建立文件夹,/tmp/test/mydir , 属性root:bean,权限 777 ,文件夹下创建一个logout.txt文件,属性跟目录一样,权限664。
用户情况
moto 属于 bean 组
bean 属于 bean 组
tom  属于 tom  组
jack 属于 jack 组

要求: moto 不允许修改logout.txt文件 r-x
bean 允许修改和读取文件 rw-
tom  对文件没有任何权限 ---
jack 只允许修改文件,不允许读取和执行文件 -w-

思考: 这些用户能删除 logout.txt文件吗?如果可以,想拒绝这些用户删除logout.txt文件该如何操作,至少采用两种方法。
chmod o+t ./mydir

chmod 755 ./mydir

setfacle -m user:moto,bean,tom,jack:rx  ./mydir

setfacl -b ./logout.txt  《-- 清空acl设定
man setfacl


======================================

Inode索引节点

1、索引节点是标识一个文件的存在,每新建一个文件系统都会为他创建一个inode (除了硬链接文件)
2、每个文件保存在磁盘上的是否,都分两部分,一部分就是保存在数据区域,另一部分就是inode信息,占用数据区域的磁盘空间。

软链接:
1、就相当于windows上的快捷方式;
2、他是一个独立的文件,有自己的inode信息  (a --> b  , a和b都是独立文件)
软链接的文件内容就是它所指向文件的路径
3、可以对目录进行设定软链接
4、可以跨文件系统(跨分区)建立软链接
ln -s /etc/fstab ./slfs

硬链接:
1、它不是一个独立的文件,仅仅是在inode表添加多一个名字信息,不占用磁盘空间,与所连接的文件有相同的inode编号;
2、不可以对目录进行设定硬链接;
3、不可以跨文件系统建立硬链接;
---》 它相当于为文件建立一个冗余,不管删除哪一个文件,数据还是能继续访问


练习:
1、分别建立两个软链接和硬连接,软链接链接到别的分区上的文件,硬连接是否可以?
2、分别对/boot/grub/grub.conf 在/tmp/test/下建立软链接,在/boot/grub/下建立一个硬链接,分别使用ls -lih查看这三个文件的属性,对比一下,自己总结一下;删除 /boot/grub/grub.conf,输出软连接的时候,是否能正确输出内容,输出硬连接呢?练习完成,请还原。

3、在soft目录下有一个压缩文件rarlinux-3.7.1.tar.gz ,请使用
tar xvf rarlinux-3.7.1.tar.gz -C /usr/src  解压,这是一个rar的压缩工具,解压之后马上能使用 /usr/src/rar/rar 命令可以直接对文件进行压缩,现在想让rar这个命令能直接运行,而不用添加这么长的路径。


一般出现web服务器,或者是存放了大量小文件的分区,这些分区一般分区可用空间还有很多,但是却不能创建文件,原因就是索引节点inode空间满了,已经不能再创建新的inode信息。也就是说,软连接还可以用来解决索引节点空间满了的故障,也可以解决磁盘空间

=======================================

磁盘配额
可以用来限定用户使用某个分区的多少容量。 --ftp web nfs mail

注意:磁盘配额只能针对分区进行设定。

操作步骤:
1、新建分区,并格式化成ext3
2、使用磁盘配额参数挂载该分区
mount -o usrquota,grpquota /dev/sda9 /web
为了让这个分区以后都能支持磁盘配额,应该怎么操作? /etc/fstab
3、生成磁盘配额配置文件
quotacheck -cavug  
-c 忽略已经存在的配置文件,重新生成
-a 扫描所有带有磁盘配参数挂载的分区,并生成配置文件
-v 显示整个过程
-u 支持用户的磁盘配额功能
-g 支持组的磁盘配额功能
产生两个配置文件 aquota.group  aquota.user

4、编辑具体使用配额
# edquota -u tom
Disk quotas for user tom (uid 512):   1000 -> 1M
  Filesystem          blocks       soft       hard     inodes     soft     hard
  /dev/sda9             0          20000      22000       0        5        7

5、启用磁盘配额功能,让配置马上生效
quotaon /dev/sda9


6、查看用户使用磁盘的情况
repquota -a  查看所有的进行了磁盘配额的分区的使用情况,但要注意,第一次查看的时候,你会发现有些新设定的用户的配置根本没有反映出来,原因就是这些用户并没有在分区上创建任何文件。要看到他们的使用情况和配置,就至少需要他们创建一个文件。


[tom@dns web]$ dd if=/dev/zero of=./tom_10M count=10 bs=1M


练习:
回去查看 man 帮助,或者上互联网查看资料,了解关于 组的磁盘配额的设定,明天提问

例子2:
针对用户组的磁盘配额限制
注意: 挂载的时候 grpquota
生成配置文件的时候必须有 -g 参数 quotacheck -cavug
要正确对组进行限制,必须所有组成员的默认首先组是该组(gid相同)

1、edquota -g  tom

2、quotaon /dev/sda9

3、repquota -a

重新添加了配额设定,应该关闭再启动配额

tom -- tom组
bean -- tom组

要求: 限定tom组最多能使用20M空间,验证一下,是每个用户单独使用20M还是所有组成员加起来最多使用20M ? 如果是后者,怎么解决使用不均衡现象。



其他命令:

edquota -t
edquota -T -u tom  注意区分以上两个命令的区别
edquota -p tom -u bean  把tom的配置复制一份给bean

========================================
简单的文本处理命令

sort  排序命令
-n 按数值大小来排序

sort -t: -k1,1 -k3,3n s1.txt   <-- -t 指定分割符, -k 指定从哪列开始到哪列结束

uniq  <--唯一的意思,作用: 去除连续的重复行

wc  -l 统计行数

[root@dns test]# cat s4.txt
hello you
welcome
[root@dns test]# wc s4.txt
2   3 18 s4.txt
行数 单词数 字符数(包含换行符,每行算一个)


三个命令结合使用

# sort s3.txt | uniq  | wc -l


cut
cut -d: -f1,2 s1.txt  

======================================================

进程管理

ps
ps -ef
ps aux

进程的状态
S 代表 Sleep 进程正在睡眠,可中断睡眠
R 代表 Runing 进程正在运行
D 代表不可中断的睡眠
T 代表Stop ,暂停状态,程序停止除里一切
Z 代表僵尸进程 父进程死了,子进程来不及释放

需要留意的就是 USER ,PID字段,还有进程路径,一般结合kill命令使用,或者查看进程的资源状态

kill  <---发送信号的工具
-9 杀掉一个进程,用来杀掉比较顽固的进程
-15 友好的终止一个进程,一般先尝试用15来终止一个进程
-stop 暂停一个进程 同 -19


top
M  就是按内存来排序
P  就是按CPU使用排序
shift + > | <  翻页

top -b -n 3 > ./tt.txt  <---把top刷新3次的结果输出到一个文件里

load average: 0.33, 0.52, 0.69  分别代表 1 , 5 ,15分钟 ,一般来说,如果 15分钟的数值 > 5 就说明系统非常忙,就需要留意一下什么进程占用了这么多资源。

uptime
free

nice   进程的优先级从-20 ~ 19 ,数值越低优先级越高
nice  --10  firefox   <--以 -10的优先级运行
renice  更改一个已经运行了的进程的优先级
renice #num pid ( renice -19 pid  以-19的优先级运行)

nice --20  rpm --rebuilddb

==========================================================

计划任务
常见的计划任务的工具: at , cron , anacron

1、at
特点:如果时间点过了,任务就失效了;
任务只能一次有效,下次需要重新设定

使用:

[root@dns 12]# at 13:48 121609
at> wall "Hello every"
at>    <---Ctrl + d
job 22 at 2009-12-16 13:48
Can't open /var/run/atd.pid to signal atd. No atd running?
[root@dns 12]# service atd restart
停止 atd:                                                 [失败]
启动 atd:                                                 [确定]
[root@dns 12]#

atq

计划任务放在/var/spool/at/ ,存在一个文件


涉及两个文件
/etc/at.allow <--里面填写允许使用at定义计划任务的帐号
/etc/at.deny <--禁止使用at的帐号,如果at.allow存在,就会忽略该文件


2、cron

service crond restart
chkconfig --level 35 crond on

crontab

全局配置文件 /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
*  * * * * root (wall "Hi")

01 * * * * root
分钟 小时 日 月 星期
0-59 0-23 1-31 1-12 0-7 执行任务的身份

run-parts /etc/cron.hourly
是一个脚本命令  一个目录

0 20 * * *  root  init 0
1 *  *  * *  root (wall "Hello every";echo "here" >> /tmp/test/cronlog)
0-29 * * * *  <--- 每个小时的前30分钟
0,2,4,6,8 * * * * <---每个小时中第0,2,4,6,8分执行任务
*/2 * * * *  <---每隔两分钟执行一次任务
*/3 */2 15 * * <---每个月的15号,每两个小时每3分钟执行一边
0 12 */3  *  2  <--- 每月每隔3天的中午12点整执行任务 或 每个星期二中午12点整也会执行

注意: cron时间任务最小的单位是分钟。

如果要实现秒为单位的任务,就需要用到脚本的sleep命令
while true
do
command
sleep 30
done

例子:
vim /etc/rc.d/rc.local
while :; do ntpdate 10.1.1.1 >/dev/null 2>/dev/null; sleep 30; done &



例子:添加一个脚本作为计划任务

1、
shell> vim /tmp/test/test.sh
#!/bin/bash
echo "This is crond execute" >> /tmp/test/crond.log

shell> chmod 755 /tmp/test/test.sh   <---别漏了

2、
*  * * * * root /tmp/test/test.sh

3、重启服务
service crond restart


例子:每分钟执行多个任务

1、
* * * * * root run-parts /tmp/test

2、
shell > vim /tmp/test/time.sh

#!/bin/bash
/usr/sbin/ntpdate 10.1.1.1

shell> vim /tmp/test/test.sh
#!/bin/bash
echo "This is crond execute" >> /tmp/crond.log

shell > chmod 755 /tmp/test/*.sh

3、 service crond restart


通过命令设定用户的计划任务

crontab -e

0 20 * * * /sbin/init 0  <---注意了,不需要写用户名了,直接写命令


手工管理用户的cron计划任务:
/var/spool/cron/  把对应用户的配置文件删除

管理员可以通过命令管理别的用户的计划任务
crontab -e -u tom

其他配置文件 /etc/cron.allow  <--作用和at.? 一样
/etc/cron.deny


练习:

设定一个计划任务,通过脚本实现,脚本的框架下面给出。脚本需要实现的功能: 修改管理员的密码,要求
upl时间日期sz
upl1439121609sz
要求该脚本是3分钟执行一次

#!/bin/bash

echo "upl`date +%H%M%m%d%y`sz" | passwd --stdin  root

3、anacron 任务
用来保证crond这个服务设定的计划任务顺利执行,这些任务必须最小单位是天
service anacron restart  《--保证这个服务器开机运行

vim /etc/anacrontab

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

单位:7 延迟的时间,单位分钟 任务的描述 实际任务
1       65       cron.daily              run-parts /etc/cron.daily
7       70       cron.weekly             run-parts /etc/cron.weekly
30       75       cron.monthly            run-parts /etc/cron.monthly

====================================

网络工具的使用

ping -c 5 10.1.1.1
ping 127.0.0.1
ping 网络IP
ping 网关

配置一台电脑,能让它浏览互联网
1、配置IP
2、配置网关
3、配置DNS


mii-tool

# mii-tool
eth0: negotiated 100baseTx-FD, link ok  《-- link ok 网卡通电


cat /proc/net/dev  

netstat
netstat -n <--- 显示电脑当前所有协议所有状态的连接
netstat -ntl <-- -t 只显示tcp协议的连接 , -l 只显示正在监听状态的连接 *
# netstat -ntl | grep :21  <---有返回结果,就能简单的判断对应的服务正在监听  *
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN

netstat -nul <  查看udp协议的状态
-nal < --  a 代表所有协议
netstat -r -n
netstat -ntlp  <-- p 显示进程的名字  *
netstat -i -e


traceroute  
mtr   <--- 判断两点之间通讯故障到底出现途中哪个部分



tcpdump  <---命令行捉包工具
参数的分类:
协议类  tcp udp icmp arp
端口类 22 21 80
方向 dst src

tcpdump  tcp port 80  <--捕获所有包含80端口的数据包
tcpdump tcp port 22  <--- 远程登录的数据包 ssh
tcpdump dst 10.1.1.1 <---捕获所有目的地址是10.1.1.1的数据包
tcpdump tcp dst port 80 <--- 捕获所有访问本机80端口的数据包

tcpdump tcp dst port 80 -vv -w /tmp/test/tcp.cap

安装数据包文件读取工具
wireshark-gnome



作业:

1、要求使用计划任务的形式,让电脑每30秒中同时系统时间,使用的同步命令下面给出,要求把命令编辑到一个脚本文件:

while :; do ntpdate 10.1.1.1 >/dev/null 2>/dev/null; sleep 30; done &

2、处理在笔记目录下的qq.txt,要求

通过命令组合,统计出文件里独立IP或独立域名的个数, 另外通过组合命令输出文件的独立IP
阅读(779) | 评论(0) | 转发(0) |
0

上一篇:ule笔记之05

下一篇:ule笔记之08

给主人留下些什么吧!~~