linux-文件管理、IO重定向、管道、用户与组管理
对应章节:
第三、教学总监老王亲讲-Linux文件管理实战
第四、教学总监老王亲讲-IO重定向、管道、用户与组管理
**Linux系统目录遵循FHS文件分层标准。**
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
蓝色-->目录 绿色-->可执行文件 红色-->压缩文件浅 蓝色-->链接文件 灰色-->其他文件
大小写敏感取决于文件系统格式 ,比如ext4
**cd 改变目录**
切换至父目录:cd..
切换至当前用户主目录:cd
切换至以前的工作目录:cd-
**ls列出当前目录的内容或指定目录**
用法:ls [options] [files_or_dirs]
只显示目录 ls -d */
**文件通配符**
*匹配零个或多个字符
?匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+ 当前工作目录
~-前一个工作目录
[0-9]匹配数字范围
[a-z]:字母
[A-Z]:字母
[wang]匹配列表中的任何的一个字符
[^wang]匹配列表中的所有字符以外的字符
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
**touch命令:**
touch [OPTION]... FILE...
-a仅改变atime和ctime
-m 仅改变mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的时间戳
-c如果文件不存在,则不予创建
access time:访问时间,atime,读取文件内容
modify time: 修改时间, mtime,改变文件内容(数据)
change time: 改变时间, ctime,元数据发生改变
**cp命令**
-i:覆盖前提示
-n:不覆盖,注意两者顺序
-r, -R: 递归复制目录及内部的所有内容
-a: 归档,相当于-dR--preserv=all 备份用
-d:--no-dereference --preserv=links 不复制原文件,只复制链接名
-p: 等同--preserv=mode,ownership,timestamp
-v: --verbose
-f: --force 先删文件再创建
-u:--update 只复制源比目标更新文件或目标不存在的文件
--backup=numbered 目标存在,覆盖前先备份加数字后缀
练习:1创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
cp -a /root /data/rootdir
2定义别名命令baketc,每天将/etc/目录下所有文件,备份到/testdir独立的子目录下,并要求子目录格式为backupYYYY-mm-dd,备份过程可见
alias baketc=”cp -av /etc /data/backup`date +%F`”
**删除rm** rm-rf/ 慎用
-i: 交互式
-f: 强制删除
-r: 递归
**tree 显示目录树**
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径
**mkdir创建目录**
-p: 存在于不报错,且可自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限
**rmdir删除空目录**
-p: 递归删除父空目录
-v: 显示详细信息
rm-r递归删除目录树
如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b
mkdir -p /testdir/dir2/{x/{a,b},y} 注意{}与【】的用法
file [options] <filename>...
**标准输入和输出**
Linux给程序提供三种I/O设备
标准输入(STDIN)-0默认接受来自键盘的输入
标准输出(STDOUT)-1默认输出到终端窗口
标准错误(STDERR)-2默认输出到终端窗口
合并标准输出和错误输出为同一个数据流进行重定向
&>覆盖重定向
&>> 追加重定向
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>&1
tr转换和删除字符
tr[OPTION]... SET1 [SET2]
ln f1 f2 创建f2与f1同样的incode号
ln -s f2 f2_link 创建软连接
硬连接与软连接的区别:
软和硬链接区别
1 本质不同:
硬是同一个文件,软不是同一个文件
2 删除
硬链接不影响,软链接失效
3 创建
硬:链接数加1,软:链接数不变
4 跨分区
硬:不,软:可以
5 目录
硬:不,软:可以
硬连接:一个文件多个名字 软连接:一个文件对应快捷方式,不同文件
**管道**
命令1 | 命令2 | 命令3 | …
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
STDERR默认不能通过管道转发,可利用2>&1 或|& 实现
最后一个命令会在当前shell进程的子shell进程中执行用来
组合多种工具的功能
ls | tr 'a-z' 'A-Z'
**用户与组**
Authentication:认证
Authorization:授权
Accouting|Audition:审计
管理员:root, 0
普通用户:1-65535
系统用户:1-499, 1-999(CentOS7)
对守护进程获取资源进行权限分配
登录用户:500+, 1000+(CentOS7)
交互式登录
管理员组:root, 0
普通组:
系统组:1-499, 1-999(CENTOS7)
普通组:500+, 1000+(CENTOS7)
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户,私有组
用户的附加组(supplementary group)
一个用户可以属于零个或多个辅助组
Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
更改加密算法authconfig--passalgo=sha256 --update
md5: message digest, 128bits
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits
useradd[options] LOGIN
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID
-c "COMMENT":用户的注释信息
-d HOME_DIR:以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序
可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
/etc/default/useradd
/etc/skel/*
/etc/login.defs
newusers passwd格式文件批量创建用户
chpasswd 批量修改用户口令
usermod[OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加!
userdel[OPTION]... login
-r: 删除用户家目录
id [OPTION]... [USER]
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
su[options...] [-] [user [args...]]
切换用户的方式:
suUserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su-UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
**passwd: 修改自己的密码**
常用选项:
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-iinactivedays:非活动期限
--stdin:从标准输入接收用户密码
echo "PASSWORD" | passwd--stdinUSERNAME
chage[OPTION]... LOGIN
-d LAST_DAY
-E --expiredateEXPIRE_DATE
-I --inactive INACTIVE
-m --mindaysMIN_DAYS
-M --maxdaysMAX_DAYS
-W --warndaysWARN_DAYS
**创建组**
groupadd[OPTION]... group_name
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组
CentOS 6: ID<500
CentOS 7: ID<1000
**修改和删除组**
组属性修改:groupmod
groupmod[OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
组删除:groupdel
groupdelGROUP
**更改组密码**
组密码:gpasswd
gpasswd[OPTION] GROUP
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表
newgrp命令:临时切换主组
如果用户本不属于此组,则需要组密码
groupmems[options] [action]
options:
-g, --group groupname更改为指定组(只有root)
Actions:
-a, --add username 指定用户加入组
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员
-l, --list 显示组成员列表
groups [OPTION].[USERNAME]... 查看用户所属组列表
作业
1、w|tr 'a-z' 'A-Z' >/tmp/who.out
2、echo {1..100} |tr ' ' '+'|bc seq -s + 100|bc
3、用户管理命令:useradd usermod userdel
useradd命令:创建用户
useradd [选项] 登录名
-u, --uid UID:指定UID;
-g, --gid GROUP:指定基本组ID,此组得事先存在;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
-c, --comment COMMENT:指明注释信息;
-d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
-s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
-r, --system:创建系统用户;
usermod命令:修改用户属性
usermod [选项] 登录
-u, --uid UID:修改用户的ID为此处指定的新UID;
-g, --gid GROUP:修改用户所属的基本组;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;
-a, --append:与-G一同使用,用于为用户追加新的附加组;
-c, --comment COMMENT:修改注释信息;
-d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
-m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
-l, --login NEW_LOGIN:修改用户名;
-s, --shell SHELL:修改用户的默认shell;
-L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
-U, --unlock:解锁用户的密码;
userdel命令:删除用户
userdel [选项] 登录
-r:删除用户时一并删除其家目录;
文件管理命令:cp mv rm
cp 复制文件
-i:交互式复制,即覆盖之前提醒用户确认;
-f:强制覆盖目标文件;
-r, -R:递归复制目录;
-d:复制符号链接文件本身,而非其指向的源文件;
-a:-dR --preserve=all, archive,用于实现归档;
mv:移动
常用选项:
-i:交互式;
-f:force
rm 删除
常用选项:
-i:interactive
-f:force
-r: recursive
4、useradd -s /bin/csh -c "Gentoo Distribution" -G bin,root gentoo
5、mkdir -p /testdir/dir
chgrp webs /testdir/dir
chmod g+s /testdir/dir
setfacl -m g:apps:rwx /testdir/dir
setfacl -m g:dbs:rx /testdir/dir
chmod o= /testdir/dir
6、ifconfig ens33 |grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" |head -n1
7、cat /etc/passwd |cut -d ":" -f1,3,7|sort -nt: -k2|tail -n1
8、cp /etc/rc.d/init.d/functions /tmp
vim /tmp/functions
:%s@/etc/sysconfig/init@/var/log@g