介绍:
磁盘定额(quota)是系统管理员用来监控和限制用户或组对磁盘的使用的工具。Quota可以从两方面限制:其一,限制用户或组可以拥有的inode数 (文件数);其二,限制分配给用户或组的磁盘块的数目(以千字节为单位的磁盘空间)。通过使用quota,系统管理员可以限制用户无节制地使用磁盘空间。 Quota程序是针对每个用户和每个文件系统的,所以每个文件系统都要单独设置。
编译支持quota的内核
首先,你要确定你的Linux内核是支持quota的。在2.2.14的版本的内核中,在编译的时候必须回答下面的问题为“y”。
Filesystems
Quota support (CONFIG_QUOTA) [N/y/?] Y
修改“/etc/fstab”文件
“/etc/fstab”文件包含Linux系统中安装上的各种各样文件系统的信息。在使用quota之前,必须现在“fstab”中设置一下使其生效。 因为对每一个文件系统都要单独设置quota,而且在“fstab”文件中,每一个文件系统单独用一行表示,所以为了支持quota必须在“fstab” 的每一行都单独设置。根据你的需要,可以单独为用户、组或组和用户设置quota。在下面的例子中,我们假定“/home”目录在“/dev/sda6” 设备上,有三种可能的情况。
第一种可能的情况:
在一个特定的文件系统上设置用户quota,编辑你的“fstab”文件(vi /etc/fstab),在“defaults”或其它为文件系统做的设置之后加上“usrquota”。
例如:
/dev/sda6 /home ext2 defaults 1 2 (as an example: the word “defaults”)
/dev/sda6 /home ext2 nosuid,nodev 1 2 (as an example: any other options you have set)
改为:
/dev/sda6 /home ext2 defaults,usrquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,usrquota 1 2
第二种可能的情况:
在文件系统上设置组quota,编辑你的“fstab”文件(vi /etc/fstab),在“defaults”或其它为文件系统做的设置之后加上“grpquota”
例如:
/dev/sda6 /home ext2 defaults 1 2 (as an example: the word “defaults”)
/dev/sda6 /home ext2 nosuid,nodev 1 2 (as an example: any other options you have set)
改为:
/dev/sda6 /home ext2 defaults,grpquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,grpquota 1 2
第三种可能情况:
在文件系统上同时设置用户和组quota,编辑“fstab”文件(vi /etc/fstab),在“defaults”或其它为文件系统做的设置之后加上“usrquota, grpquota”。
例如:
/dev/sda6 /home ext2 defaults 1 2 (as an example: the word “defaults”)
/dev/sda6 /home ext2 nosuid,nodev 1 2 (as an example: any other options you have set)
改为:
/dev/sda6 /home ext2 defaults,usrquota,grpquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,usrquota,grpquota 1 2
创建“quota.user”和“quota.group”文件
在修改“/etc/fstab”文件之后,为了在文件系统上建立quota,在文件系统的根目录下(在我们的例子中为“/home”)必须有一个 “root”拥有所有权的文件:如果设置用户quota,必须创建“quota.user”;如果设置组quota,必须创建 “quota.group”;如果想同时设置用户和组quota,这两个文件都要创建。
第一步
在你想设置quota的那个分区的根目录,以“root”身份创建“quota.usr”或“quota.group”文件:
[root@deep /]# touch /home/quota.group
[root@deep /]# chmod 600 /home/quota.user
[root@deep /]# chmod 600 /home/quota.group
“touch”命令在“/home”目录下创建空的文件。。“chmod”命令为这些文件设置只有“root”用户可读写的权限。
注意:这两个quota文件,“quota.user”和“quota.group”,的所有者必须为“root”,“root”用户有读写的权限。
卸载linux的文件系统的方法,供大家学习参考。
卸载文件系统相关命令:umount
辅助命令:fuser kill lsof
命令介绍:
umount 设备点名称|挂载目录
umount选项解释
-V 打印版本信息并且推出。
[root@node5 ~]# umount -V
umount (util-linux 2.13-pre7)
[root@node5 ~]# rpm -qa|grep util-linux
util-linux-2.13-0.50.el5
这里显示umount命令属于util-linux 2.13-pre7的rpm包,然后我们使用rpm查询命令可以找到系统具体安装的rpm包。
-h 打印简要帮助信息。
[root@node5 ~]# umount -h
Usage: umount [-hV] umount -a [-f] [-r] [-n] [-v] [-t vfstypes] [-O opts]
umount [-f] [-r] [-n] [-v] special | node...
-v 打印详细信息。
如果我们使用umount -个目录或者设备点,如果成功的话,不带-v选项,将不会打印信息。
[root@node5 ~]# umount -v /dev/mapper/vg01-share
/dev/mapper/vg01-share umounted
-n umount的时候不会更新/etc/mtab文件
-r 如果umount失败,重新挂载文件系统为只读模式
-a /etc/mtab中记录的文件系统全部卸载
-t 指定文件系统类型。如ext3,fat32,iso9600等
-f 强制卸载。in case of an unreachable NFS system
-l 属于一个延迟卸载,等文件系统所有资源释放后在卸载。
umount的绝对路径一般是/bin/umount,权限为
-rwsr-xr-x 1 root root 38936 Nov 25 2008 /bin/umount
也就是所有用户都可以执行这条命令,但是一般不带-n选项,一般用户是无法执行成功的,因为/etc/mtab文件的权限位只有root用户可写。
umount 后面可以指定设备文件名也可以指定挂载点。umount使用挂载点和设备文件名是不同的,当使用挂载点时,也就是卸载当前挂载点的文件系统,当使用设备文件名时,也就是卸载当前设备所对应的文件系统全部卸载。也就是说一个设备点可以被多次挂载,一个挂载点只对应一个设备。
fuser 识别进程使用的文件或者套接字
fuser显示进程所使用文件系统或者文件的进程号加上使用的方式(字母标识)。各字母的具体含义如下:
c 当前目录
e 执行目录
f 打开文件
F 打开文件用来写
r 根目录
m 映射文件或者共享库
fuser 返回值。如果没有进程在使用该文件或者文件系统返回非0,如果有进程在使用则返回0
fuser 打印输出。 pid号打印到标准输出,其他的打印到标准错误。
主要的命令行选项:
-k 发送SIGILL信号给进程,也就是强制杀掉使用文件或者文件系统的进程,等同于kill -9
-i 交互模式
-l 显示可以发送的信号
[root@node5 ~]# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED
这些信号的标准模式为SIG+显示的名字
-m 显示使用文件或者文件系统的进程
-signal 发送信号给进程
-4|-6 使用IPV4或者IPV6
实例1:
显示使用/share(为一挂载点)的进程
[root@ser221 ~]# fuser -m /share
/share: 11755c 11863c
详细模式:
[root@ser221 ~]# fuser -mv /share
USER PID ACCESS COMMAND
/share: mysql 11755 F.c.. mysqld
com 11863 ..c.. ComServer
实例2:
查看使用3306端口的进程:
[root@ser221 ~]# fuser -n tcp 3306
3306/tcp: 11755
[root@ser221 ~]# fuser -nv tcp 3306
USER PID ACCESS COMMAND
3306/tcp: mysql 11755 F.... mysqld
lsof暂时没有使用,这个命令同样可以获得文件系统的使用情况。
umount filesystem最经常碰到的问题就是‘device is busy’,在这种情况下,结合使用fuser可以看到哪些进程在使用挂载点,然后停掉进程,即可umount成功。
对符号链接本身充满好奇,想查看下符号链接本身存储的内容,自个儿用C语言写了一个,分享给大家。
在linux下,用vim,less,cat等读取文件内容的命令来查看符号链接内容,最终都会被导向到实际链接的文件。
#include <stdio.h>
int main(void)
{
//符号链接的路径
char sln[] = "./test";
char buf[1024];
ssize_t len;
if ((len = readlink(sln, buf, 1024 - 1)) != -1) {
buf[len] = '\0';
}
printf("%s\n", buf);
return 0;
}
编译执行这个程序,最终查看到符号链接本身存储内容就是链接文件的路径。
例如:/home/test链接到/home/test.txt,符号链接/home/test存储的内容就是:”/home/test.txt“。
附-作者修改后的最新文章内容:2013-1-6
#------------------------------------------
在linux下,用vim,less,cat等读取文件内容的命令来查看符号链接内容,最终都会被导向到实际链接的文件。笔者对符号链接本身充满好奇,想查看下符号链接本身存储的内容,网上搜索了很久,没有找到相关的方法,于是自个儿用C语言写了一个,分享给大家。
#include
#include
int main(void)
{
//符号链接的路径
char sln[] = "./test";
char buf[1024];
ssize_t len;
if ((len = readlink(sln, buf, 1024 - 1)) != -1) {
buf[len] = '\0';
}
printf("%s\n", buf);
return 0;
}
在笔者电脑上编译执行这个程序,最终查看到符号链接本身存储内容就是链接文件的路径。例如:/home/test链接到/home/test.txt,符号链接/home/test存储的内容就是”/home/test.txt“。
补充说明
后来笔者在工作中,偶然发现readlink这个命令也可以读取符号链接本身的内容:
原文地址:http://www.01happy.com/linux-symbolic-link-contents/