一 、Linux文件结构
文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。
目录提供了管理文件的一个方便而有效的途径。
Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。
/根目录
┃
┏━━┳━━━┳━━━┳━━━╋━━━┳━━━┳━━━┳━━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
bin home dev etc lib sbin tmp usr var
┃ ┃
┏━┻━┓ ┏━━┳━━┳━━┳━┻━┳━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
rc.d cron.d X11R6 src lib local man bin
┃
┏━━━┳━━┳━┻━┳━━━┓
┃ ┃ ┃ ┃ ┃
init.d rc0.d rc1.d rc2.d …… linux bin lib src
Linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。微软的DOS和windows也是采用树型结构,但是在DOS 和 windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。但是在linux中,无论操作系统管理几个 磁盘分区,这样的目录树只有一个。从结构上讲,各个磁盘分区上的树型目录不一定是并列的。
如果这样讲不好理解的话,我来举个例子:
有一块硬盘,分成了4个分区,分别是/;/boot;/usr和windows下的fat
对于/和/boot或者/和/usr,它们是从属关系;对于/boot和/usr,它们是并列关系。
如果我把windows下的fat分区挂载到/mnt/winc下,(挂载??哦,别急,呵呵,一会就讲,一会就讲。)那么对于/mnt/winc和/usr或/mnt/winc和/boot来说,它们是从属于目录树上没有任何关系的两个分支。
因为linux是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。但就是这一点让很多从windows转到linux的初学者感到头疼。下面列出了linux下一些主要目录的功用。
/boot 系统启动相关的文件,如内核、initrd,以及grub(bootloader)
/bin 二进制可执行命令 用户命令
/dev 设备特殊文件
块设备:随机访问,数据块
字符设备:线性访问,按字符为单位
设备号:主设备号(major)和次设备号(minor)
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,用户的家目录,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 库文件
/lib/modules:内核模块文件
静态库, .a
动态库,.dll,.so(shared object)
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公用的临时文件存储点
/root 系统管理员的主目录-家目录(呵呵,特权阶级)
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。挂载点目录
/media:挂载点目录,移动设备
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/opt 可选目录,第三方程序的安装目录
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。伪文件系统,内核映射文件
/sys 伪文件系统,跟硬件设备相关的属性映射文件
/var 某些大文件的溢出区,比方说各种服务的日志文件 可变化的文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。shared read-only 其中包含:
/usr/X11R6 存放X window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/sbin
/usr/local/lib 本地增加的库
二 、linux文件系统
文 件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按 一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。
Llinux文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。
索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件 或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。
linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。
对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是:
硬连接:原文件名和连接文件名都指向相同的物理地址。
目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)
文件在磁盘中只有一个拷贝,节省硬盘空间;
由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。
符号连接:用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。
可以删除原有的文件而保存连接文件,没有防止误删除功能。
这一段的的内容过于抽象,又是节点又是数组的,我已经尽量通俗再通俗了,又不好加例子作演示。大家如果还是云里雾里的话,我也没有什么办法了,只有先记住,日后在实际应用中慢慢体会、理解了。这也是我学习的一个方法吧。
三 、挂载文件系统
由上一节知道,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的挂载。
将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。
举个例子吧:
根分区:
/根目录
┃
┏━━━━┳━━━━━┳━━━━━┳━━━━━╋━━━━━┳━━━━━┳━━━━━┳━━━━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
bin home dev etc lib sbin tmp usr var
┃
┏━┻━┓
┃ ┃
rc.d cron.d
┃
┏━━━┳━━━┳━┻━┳━━━━┓
┃ ┃ ┃ ┃ ┃
init.d rc0.d rc1.d rc2.d ……
/usr分区 :
usr
┃
┏━━━━┳━━━╋━━━┳━━━┳━━━┓
┃ ┃ ┃ ┃ ┃ ┃
X11R6 src lib local man bin
┃ ┃
┃ ┏━━━╋━━━┓
┃ ┃ ┃ ┃
linux bin lib src
挂载之后就形成了文章开始时的那个图。像不像挂上去的?
注意:1、挂载点必须是一个目录。
2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
对 于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样 的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。
挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点]
其中常用的参数有
-t 指定设备的文件系统类型,常见的有:
minix linux最早使用的文件系统
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT 2000的文件系统
hpfs OS/2文件系统
auto 自动检测文件系统
-o 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的 有
codepage=XXX 代码页
iocharset=XXX 字符集
ro 以只读方式挂载
rw 以读写方式挂载
nouser 使一般用户无法挂载
user 可以让一般用户挂载设备
提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?)
例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。
# mk /mnt/winc
# mk /mnt/floppy
# mk /mnt/cdrom
# mount -t vfat /dev/hda1 /mnt/winc
# mount -t msdos /dev/fd0 /mnt/floppy
# mount -t iso9660 /dev/cdrom /mnt/cdrom
现在就可以进入/mnt/winc等目录读写这些文件系统了。
要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也可以经常随时更换的话,我想就不会犯这样的错误了 :-> )
如 果你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到 -o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或 gb2312。
当挂载的文件系统linux不支持时,mount一定报错,如windows2000的ntfs文件系统。可以重新编译linux内核以获得对该文件系统的支持。关于重新编译linux内核,就不在这里说了。
四 、自动挂载
每次开机访问windows分区都要运行mount命令显然太烦琐,为什么访问其他的linux分区不用使用mount命令呢?
其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢?
这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。我的/etc/fstab文件如下:
/dev/hda2 / ext3 defaults 1 1
/dev/hda1 /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项,选项间用逗号分隔。第五六列不知道是什么意思,还望高手指点。
在最后两行是我手工添加的windows下的C;D盘,加了codepage=936和iocharset=cp936参数以支持中文文件名。参数defaults实际上包含了一组默认参数:
rw 以可读写模式挂载
suid 开启用户ID和群组ID设置位
dev 可解读文件系统上的字符或区块设备
exec 可执行二进制文件
auto 自动挂载
nouser 使一般用户无法挂载
async 以非同步方式执行文件系统的输入输出操作
linux操作系统及常用命令
#COMMAND options... arguments...
命令 选项(短/长选项) 参数
目录管理:
ls、cd、pwd、mkdir、rmdir、tree
文件管理:
touch、stat、file、rm、cp、mv、nano
日期时间
date、clock、hwclock、cal
查看文本
cat、tac、more、less、head、tail
目录:文件,路径映射
路径:从指令起到结束到目的地所经过的位置 绝对路径|相对路径 /斜线 window(\反斜线)
文件系统:file system
⑴、目录查看命令ls、cd 、type
ls:显示当前目录内的文件
-l:列出当前目录内的文件并显示其相关属性
-a:显示当前目录内包含隐藏文件在内的所有文件 .表示当前目录 ..表示父目录
-A:显示当前目录内除了.和..目录以外的所有目录
-h:按单位为k或M进行文件大小的显示 做单位转换
-d:显示目录资深属性 ls-ld /root
-i:index mode,inode
-r:逆序显示文件
-R:递归(recursive)显示目录
ls -l 长格式
文件类型:
-:普通文件(f)
d:目录文件
b:块设备文件(block)
c:字符设备文件(character)
l:符号链接文件(symbolic link file)
p:命令管道(pipe)
s:套接字文件(socket)
文件硬链接的次数:
文件的属主(owner)
文件的属组(group)
文件大小(size),单位是字节
时间戳(timestamp):最近一次被修改的时间
访问:access
修改:modify,文件内容
改变:change,metadate 元数据
cd: change directory
cd 回到家目录,主目录,home directory “~”表示,or cd ~
cd ~USERNAME:进入指定用户家目录,cd ~student
cd -:在当前目录和前一次所在的目录直接来回切换
type:显示指定属于那种类型 # type echo
命令类型:内置命令(shell内置)
外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件
环境变量:命名的内存空间 PATH:使用冒号分隔的路径
1内部命令: help COMMAND #help echo
2外部命令: COMMAND --help
3命令手册:manual 文件,文本文档
man COMMAND
4在线文档
info COMMAND
5文档/usr/share/doc
6google
⑵、系统时间查看和修改命令之clock、hwclock、date ntp网络时间协议
clock:显示系统时间
hwclock:显示系统的硬件时间。
hwclock -w:把系统时间同步到硬件
hwclock -s:把硬件时间同步到系统
date 修改时间
date 月月日日时时分钟年年(年年).秒秒
⑶、目录、文件创建和删除命令之mkdir,touch、rmdir、rm
mkdir:创建空目录
mkdir -p:递归创建目录
touch:创建一个文件
touch -c :文件存在的时候不再创建
rmdir:删除一个空目录
rmdir -p:递归删除一个目录
rm:删除文件
rm -i:交互式删除
rm -f:暴力删除
rm -r:递归删除目录
rm -rf:
touch的另一个用法:修改时间戳
-a:只改变访问时间
-m:只改变修改时间
-t:自建时间(年月日时分.秒)--与a、m配合使用!)
stat:显示文件的时间戳
⑷、文件、目录的复制命令之cp
cp /etc/passwd /tmp/:复制到目录下并保存原文件名
cp /etc/passwd /tmp/test:test目录存在,意义如上,否则为复制并重新命名为test
-r:递归复制目录
-i:交互式显示信息
-f:强制覆盖
-p:保持原文件的属性
-a:保留文件的所有属性
cp -P:复制链接文件的时候,直接复制链接(cp 链接文件默认复制的是链接所指向的文件)
⑸、目录文件的移动、重命名命令之mv
mv SRC(源) DEST(目标)
mv ab bc
⑹、文本文件查看命令之cat、more、less、head
cat:链接并显示文件的所有内容
-n:显示的时候显示行号
-E:显示每行的结束符
-T:显示制表符
tac:逆序显示
more:与cat的用法大致相同,只是提供了向前向后翻页来分页进行显示。显示到最后自动退出
less:与more相似,只是显示的最后需要输入q才会退出显示
head:显示文本文件的前n行
-n:前n行
tail:查看文本的后n行,默认是10
-n:后n行
tail的特殊用法:
-f:查看文件尾部,而且不退出,等待显示后续追加的新内容;
文本:linux行结束符为$,Windows的行结束提示符为$←┘(回车),控制符控制换行,所以有时windows打开linux文本无换行,linux打开window文本有报错
⑺、文本处理命令之cut、sort、wc、tr sed、awk
cut:用于剪切数据并显示
-d:指定字段分隔符。默认为空格,cut -d: -f7 空格符 cut -d''
-f:指定要选择的字段
-f 1,3 显示1和3字段
-f 1-3 显示1到3字段
sort:文本排序的命令
-n:按数值的大小排序
-r:降序排序
-u:相同的行之显示一次
-f:忽略大小写
wc:文本统计命令
-l:只显示行数
-w:只显示单词数
-c:只显示字节数
-L:表示显示最长的一行包含多少个字符
tr:用于实现转换或删除字符
tar ab AB:转换
tar -d:删除出现的字符
⑻、目录权限管理
1、chown:修改文件属主--(只有管理员才有此权限)
chown USERNAME file....(只改变目录本身)
-R:递归修改(修改目录及其内部文件的属主)
--reference=/path/to/somefile file:把file的属主设定为与somefile的属主一样(不需要指定属主)
chown USERNAME:GRPNAME fiel... 同时改变属主和属组
hown :GROUPNAME fiel.... 修改属组
2、修改文件属组:chgrp:修改文件属组--只有管理员才能使用
基本附件参数与chown一样
chgrp GROUPNAME file....(只改变目录本身)
-R:递归修改
--reference=/path/to/somefile file... 把file的属主设定为与somefile的属组一样(不需要指定属组)
3、修改文件权限:chmod
chmod 755 file..:直接指定权限的2进制。
修改某类用户或某些类用户权限(u 、g 、o 、a)
chmod 用户类别=MODE fiel..
修改某类的用户某位或某些位权限mode(wrx)
chmod 用户类别[-/+]MODE fiel..
linux用户及权限详解-用户组-用户管理-权限管理
用户管理:
useradd,userdel,usermod,passwd,chsh(修改用户的默认shell),shfn(修改注释信息),finger,id,chage
组管理:
groupadd,groupdel,groupmod,gpasswd
权限管理
chown,chgrp,chmod,umask
在Linux中用户和组被称为安全权限模型的核心要素,本文主要是讲解一些用户和组管理的命令,其中的命令包括useradd、userdel、 usemod、chfn、chsh、chage、passwd、groupadd、groupmod、groupdel、gpasswd、su,本文只要 说的是一些常用的选项,如果需要别的选项,请获取命令帮助
Linux中用户类别分为:管理员用户和普通用户,其中管理员用户的UID为0,普通用户的UID为1-65535,
普通用户又分为系统用户和登陆用户,其中系统用户的UID为1-499,登陆用户的UID为500-65535,
创建用户
useradd等同于adduser,格式为useradd [options] UserName
其中常用选项包括以下几个:
-u UID:指定用户的UID,如果不指定的话,就在最后一个用户的基础上+1,useradd创建的第一个账号的UID为500;
-g GID:指定用户的GID,即用户的基本组ID,但是GID要实现存在才可以,也可以直接使用组名
-G GID:指定用户的额外组,当时GID要实现存在才可以,也可以直接使用组名
-d 目录:指定用户的家目录,这个家目录最好是不要存在的文件夹,如果目录已经存在,会出现shell环境变量错误
-c 备注:为用户添加备注信息
-s shell:指定用户的默认shell,应该指定使用/etc/shells文件中出现的shell类型
-m:创建用户时,强制给用户创建家目录,默认情况下会在/home目录下创建一个跟用户名同名的文件夹来作为用户的家目录
-M:创建用户时,不创建用户家目录
删除用户
userdel:用于删除用户,默认情况下会保留用户的家目录,如果想连家目录一起删除的话,应该使用-r选项
格式为 userdel [options] UserName
修改用户的属性信息
chsh:修改用户的默认shell
chfn:修改用户的备注信息,会依次输入用户的名称、办公地址、办公电话、家庭电话
usermod:修改用户的属性信息
格式为 usermod [options] UserName
-a :追加
-u UID:修改用户的UID
-g GID:修改用户基本组的GID,也可以直接使用基本组的组名
-G GID:修改用户的额外组的GID,也可以直接使用基本组的组名,默认状态下会覆盖原有的附加组,如果想要添加附加组,请在该选项前加-a选项
-c string:修改用户的备注信息
-d 目录:默认不会迁移用户的家目录,如果要迁移,请以-m选项一起使用
-s shell:修改用户的默认shell ,应该指定使用/etc/shells文件中出现的shell类型
-l 名称:修改用户的登陆名称,但是不修改用的UID,GID
-e 时间:修改用户的过期时间
-f 时间:修改用户的非活动时间。
-L 用户名:锁定用户账号
-U 用户名:将锁定的用户账号进行解锁
chage:修改用户的日期属性
-E:距离1970-1-1号的时间天数,过了这个时间,账号不可访问
-I: 设置非活动期限
-m:修改密码最小使用时间
-M:修改密码最长使用时间
-W:修改密码警告时间
查看用户的相关信息
id 查看用户的id号
格式:id [options] UserName
-n:只显示名称
-u:只显示用户的UID
-g:显示用户的基本在GID
-G:显示用户的额外组的GID
修改用户密码
密码安全性策略:
1、足够复杂
2、足够长、尽量交叉使用数字、大写字母、小写字母和特殊字符
3、尽量避免使用易猜测的密码:
4、定期更换
passwd 修改用户的密码
格式:passwd [options] 用户名
说明:普通用户只能修改自身的密码,管理员可以设定自身和所有普通用户的密码,在设定其他用户密码是直接使用passwd 用户名即可
-l:锁定用户
-u:解锁用户
-n:设定用户密码的最少使用时间
-x:设定用户密码的最长使用时间
-w:设定用户密码的警告时间
-i:设定用户密码的非活动时间
/etc/passwd中的格式
用户名:密码占位符:UID:GID(基本组ID):用户备注信息(多个以,隔开):家目录:默认shell
/etc/shadow中的格式
用户名:密码:最近的一次密码修改时间距离1970-1-1的时间:最短使用期限:最长使用期限:警告时间:非活动时间(登陆就要修改密码):账号的过期期限:预留段
组的管理:
用户组分为普通组和管理员组,在用户看来,组可以分为两类:基本组和额外组,额外组也叫附加组,组的管理和用户的管理基本类似,这里就不再做累赘
⑴、linux系统内用户分类:
管理员:ID为0
普通用户:ID为1-655351、
系统用户:ID为1-499,运行后台服务的用户,不允许登陆系统。 一般用户:ID为500-60000
⑵、用户管理基本命令
1、用户增加命令之useradd
useradd:直接增加用户,家目录和属性等是默认
-u UID:指定用户的UID
-g GID:指定用户的GID
-G GID:指定用户的附加组,可以指定多个,彼此之间用逗号隔开
-c "信息":添加注释信息
-d 目录:指定用户的家目录
-s shell类型:指定用户的shell
-M:不给用户创建家目录
-r:创建一个系统用户,系统用户不创建家目录的。
2、 用户删除命令之userdel
userdel:直接删除用户,默认是不删除用户的家目录的。
-r:删除用户的时候也删除其家目录
3、用户查看命令之id 、finger
id:查看当前用户的id信息(全部的信息)
id -g:查看GID信息
id -u:查看UID信息
id -G:查看全部GID信息
finger:查看用户账户信息
finger USERNAME
4、用户属性修改命令usermod
usermod命令:修改账户的属性
usermod [option] USERNAME
-u|g|G: 修改UID|GID|附加组(直接覆盖之前的附加组)
-a -G: 加附加组,不覆盖之前的附加组
-c:修改注释信息
-d:为用户指定新家目录(原来的家目录无法再访问)
-d -m:指定家目录,又移动此前家目录的文件至新的家目录内
-s:修改shell
-l:修改用户名
-L:锁定用户账号
-U:解锁用户账号
5、用户密码管理命令passwd
passwd USERNAME:修改用户名密码
-l:锁定账号
-U:解锁账户
-d:删除用户密码
-n:密码最短使用时间
-x:密码最长使用时间
更改用户的密码使用属性:chage命令
-d 最后一次修改时间
-E 过期时间
-I 非活动时间
-m 最短使用期限
-M 最长使用期限
-w 警告时间
⑶、组管理基本命令
1、创建组:groupadd
-g:指定GID
-r:添加组为系统组
2、删除组:groupdel
-g:以GID 删除
-n:以组名删除
3、组密码:gpasswd
gpasswd GROUPNAME
4、组属性修改命令groupmod
groupmod [option] GROUPNAME
-g GID:修改GID
-n:修改组名称
#cat /etc/passwd
#what is passwd
#man 5 passswd
account:登陆名
password:密码
UID:用户的id号
GID:基本组id
comment:注释
HOME DIR:家目录
SHELL:用户的默认shell #cat /etc/shells
#cat /etc/shadow
#man 5 shadow
account:登陆名
encrypted password:加密的密码
保留字段
手动添加用户hive,基本组为hive(5000),附加组为mygroup
一添加组hive-gid为5000,同时附加组mygroup添加hive
#nano /etc/group
hive:x:5000:
mygroup:x:504:user3,hive
二添加用户hive
#nano /etc/passwd
hive:x:5000:5000:hive-注释符:/home/hive:/bin/bash
三设置密码,可用命令#passwd hive (root账户)也可
#nano /etc/shadow
hive:!!(留待以后加密):15765:0:99999:7:::
用户 : 加密密码:上次密码修改时间:最短使用时间:最长使用期限:警告时间
#date+%s 今天到此刻为止经过多少秒
然后除以每天的秒数 86400 得到结果
passwd
#openssl passwd
#whatis passwd
#man sslpasswd
#openssl passwd -1 -salt '12345678' 杂数-随机数
输入密码,复制黏贴
#nano /etc/shadow
将两个!!换成黏贴的内容 salt一样,生成密码就一样
四提供家目录
#cp -r /etc/skel /home/hive
#chown -R hive.hive /home/hive/
#chmod -R go= /home/hive/
#ls -ld /home/hive
#ls -la /home/hive
#su - hive 没有密码不可直接登录,但可以su过去
#id
#exit
一、linux可以用于查找的相关命令(本次重点在于说明find用法)
1、find:
是最为强大的查找命令,可以查找到你所想要找的所有文件
2、locate
同样也是一个文件查找命令,locate 命令其实是"find-name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库,这个数据库中含有本地所有文件信 息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。
3、whereis
whereis命令只能用于程序名称的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
1
2
|
[root@localhost ~]
# whereis yum
yum:
/usr/bin/yum
/etc/yum
/etc/yum
.conf
/usr/share/man/man8/yum
.8.gz
|
4、which
which命令的作用是,在PATH环境变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以查看某个系统命令是否存在,以及执行的到底是哪一个位置的可执行文件(即命令)
1
2
|
[root@localhost ~]
# which yum
/usr/bin/yum
|
5、type
type命令其实不能算查找命令,它是用来查找某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。
1
2
|
[root@localhost ~]
# type yum
yum is
/usr/bin/yum
|
从以上各命令的功能可以看出,虽然在linux中有诸多可以用于查找的命令,但能够基于文件(命令也是一个可执行文件之一)层次查找的只有find与locate,两者区别也比较明显。
find与loacte的区别
find:
优点:可实时查找,精确匹配
缺点:范围遍历,速度慢
locate:
优点:查找速度快
缺点:依赖于数据库、非实时查找
二、find 用法
格式:
find [options] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示
1、条件查找(支持文件名通配)
-name "File_name" | 按名称查找 | ||||
|
|||||
-name "*" | 查找任意长度的任意字符 | ||||
|
|||||
-name "?" | 包含任意单个定符 | ||||
|
|||||
-name "[]" | 范围内的任意字符 | ||||
|
|||||
-name "[^]" | 范围外的任意字符 | ||||
|
|||||
-iname "File_name" | 查找时不区分字符大小写 | ||||
|
|||||
-user UserName | 根据属主查找 | ||||
|
|||||
-group GroupName | 根据属组查找 | ||||
|
|||||
-uid UID | 按照用户的UID查找 | ||||
|
|||||
-gid GID | 按照用户的的GID查找 | ||||
|
|||||
-nouser | 查无有效属主的文件,即文件的属主在/etc/passwd中不存在 | ||||
|
|||||
-nogroup | 查无有效属组的文件,即文件的属组在/etc/group中不存在 | ||||
|
2、组合条件
-a | 与,同时满足(and) | ||
|
|||
-o | 或(or) | ||
|
|||
-not, ! | 非,取反 | ||
|
3、文件类型查找(type)
-type f | 普通文件 | ||
|
|||
-type f | 目录 | ||
-type b | 块设备 | ||
-type c |
字符设备 | ||
-type l | 符号链接文件 | ||
-type p | 命名管道 | ||
-type s | 套接 |
其它文件类型查找方法与f用法相同。
4、文件大小查找(-size [+|-]#),Unit(c:字节,k:KB,M:MB,G:GB
-size # | 指定大小(取值是不大于) | ||
-size +# | 大于# | ||
|
|||
-size: -# | 小于# |
5、时间戳查找
以天为单位(time):
-atime [+|-]#
-mtime [+|-]# | 修改时间 | ||
-ctime [+|-]# | 改变时间 | ||
-atime [+|-]# | 访问时间 | ||
|
以分钟为单位(min)[+|-]#:
-amin [+|-]# | 访问时间 | ||
-mmin [+|-]# | 修改时间 | ||
|
|||
-cmin [+|-]# | 改变时间 |
6、权限查找
-perm [+|-]MODE
-perm MODE | 精确匹配 | ||
|
|||
-perm +MODE | 任何一类用户的任何一位权限匹配;常用于查找某类用户的某特定权限是否存在 | ||
|
|||
-MODE | 每类用户的指定要检查的权限位都匹配 | ||
|
7、处理动作:
打印在标准输出上(默认); | |||
-ls | 以长格式输出各文件信息 | ||
-exec COMMAND {} \; | 对查找到的文件执行指定的命令 | ||
|
|||
-ok COMMAND {} \; | 交互式的-exec | ||
|
find把查找到的所有文件一次性地传递给-exec所指定的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhost tmp]
# ls -l *.doc
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc
[root@localhost tmp]
# find /tmp -iname "*.doc " | rm -rf
[root@localhost tmp]
# ls -l *.doc
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc
[root@localhost tmp]
# find /tmp -iname "*.doc" -exec mv {} {}x \;
[root@localhost tmp]
# ls -l *.docx
-rw-r--r-- 1 root root 0 Feb 26 16:47 asdfadf.docx
-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.docx
-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.docx
-rw-r--r-- 1 root root 0 Feb 26 16:47 xxx.docx
|
注:find:把查找到的所有文件一次性地传递给-exec所指定的文件
管道传递的是字符串,不能使用文件操作指令处理,
如果要用可以使用以下命令
1
2
3
4
5
6
7
8
9
|
[root@localhost tmp]
# touch asdf.c
[root@localhost tmp]
# touch asdf.h
[root@localhost tmp]
# touch asdf.so
[root@localhost tmp]
# touch asdf.ppt
[root@localhost tmp]
# touch asdf.doc
[root@localhost tmp]
# touch study.dox
[root@localhost tmp]
# find -mmin 1 | xargs rm -rf
[root@localhost tmp]
# ls
#此处的-mmin 1表示修改时间到从1分钟不到2分钟之间的文件删除,慎用,我刚才#就是+1,结果一分钟之前的所有文件就这么没了~~~~悲剧了!
|
find |xargs COMMAND(查找大文件很有用)
====================================完===================================================
①、linux上日志系统类型:syslog和syslog-ng(开源版和商业版)
1、syslog服务:
syslogd:系统日志,非内核产生的信息
配置文件:/etc/syslog.conf、
配置以后利用service syslog reload(不用重启服务读取配置文件)
日志服务器配置:etc/sysconfig/syslog内SYSLOGD_OPTIONS="-m 0"改为SYSLOGD_OPTIONS="-r -m 0"即可作为日志服务器
klogd:内核日志,专门负责内核产生的信息
kernel启动的时候是物理终端(/dev/console),产生的日志信息在/var/log/dmesg
dmesg命令:可以直接查看/var/log/dmesg;也可以使用cat /var/log/dmesg查看。
sbin/init进程信息属于系统日志,放在以下位置:
/var/log/messages:系统标准错误日志信息,非内核产生的引导信息;各子系统产生的信息。
/var/log/maillog:邮件系统产生的日志信息
/var/log/secure:用户登陆信息日志
2、日志需要滚动:
message一段时间以后重新命名为message1..,然后新建一个message来存放日志。
logrotate:通过此命令对日志文件进行切片
/etc/cron.daily/logrotate
配置文件:/etc/syslog.conf
配置文件定义格式为: facility.priority action
facility,可以理解为日志的来源或设备目前常用的facility有以下几种:
auth # 认证相关的 authpriv # 权限,授权相关的 cron # 任务计划相关的 daemon # 守护进程相关的 kern # 内核相关的 lpr # 打印相关的 mail # 邮件相关的 mark # 标记相关的 news # 新闻相关的 security # 安全相关的,与auth 类似 syslog # syslog自己的 user # 用户相关的 uucp # unix to unix cp 相关的 local0 到 local7 # 用户自定义使用 * # *表示所有的facility
priority(log level)日志的级别,一般有以下几种级别(从低到高)
debug # 程序或系统的调试信息 info # 一般信息 notice # 不影响正常功能,需要注意的消息 warning/warn # 可能影响系统功能,需要提醒用户的重要事件 err/error # 错误信息 crit # 比较严重的 alert # 必须马上处理的 emerg/panic # 会导致系统不可用的 * # 表示所有的日志级别 none # 跟* 相反,表示啥也没有
action(动作)日志记录的位置
系统上的绝对路径 # 普通文件 如: /var/log/xxx
| # 管道 通过管道送给其他的命令处理
终端 # 终端 如:/dev/console
@HOST # 远程主机 如: @10.0.0.1
用户 # 系统用户 如: root
* # 登录到系统上的所有用户,一般emerg级别的日志是这样定义的
定义格式例子:
mail.info /var/log/mail.log # 表示将mail相关的,级别为info及info以上级别的信息记录到/var/log/mail.log文件中 auth.=info @10.0.0.1 # 表示将auth相关的,基本为info的信息记录到10.0.0.1主机上去 # 前提是10.0.0.1要能接收其他主机发来的日志信息 user.!=error # 表示记录user相关的,不包括error级别的信息 user.!error # 与user.error相反 *.info # 表示记录所有的日志信息的info级别 mail.* # 表示记录mail相关的所有级别的信息 *.* # 你懂的. cron.info;mail.info # 多个日志来源可以用";" 隔开 cron,mail.info # 与cron.info;mail.info 是一个意思 mail.*;mail.!=info # 表示记录mail相关的所有级别的信息,但是不包括info级别的
本文出自 “Chris On the way”