文件管理
-
cp - 复制文件和目录
cp SRC DEST SRC是文件: 如果目标不存在:新建DEST,并将SRC中内容填充至DEST中; 如果目录存在: 如果DEST是文件:将SRC中的内容覆盖至DEST中,此时建议为cp命令使用-i选项; 如果DEST是目录:在DEST下新建与原文件同名的文件, 并将SRC中内容填充至新文件中; cp SRC... DEST SRC...:多个文件 DEST必须存在,且为目录,其它情形均会出错; cp SRC DEST SRC是目录: 此时使用选项:-r 如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中; 如果DEST存在: 如果DEST是文件:报错 如果DEST是目录: 常用选项: -i:交互式 -r, -R: 递归复制目录及内部的所有内容; -a: 归档,相当于-dR --preserv=all -d:--no-dereference --preserv=links --preserv[=ATTR_LIST] mode: 权限 ownership: 属主属组 timestamp: links xattr context all -p: --preserv=mode,ownership,timestamp -v: --verbose -f: --force
-
mv - move (rename) files
SYNOPSIS mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE... 常用选项:-i 交互式、-f 强制
-
rm - remove files or directories
rm [OPTION]... FILE... 常用选项: -i: 交互式 -f: 强制删除 -r: 递归
bash 基础特性(2)
1、命令别名(alias)
通过alias命令实现:
(1) alias 显示当前shell进程所有可用的命令别名;
(2) alias NAME='VALUE'
定义别名NAME,其相当于执行命令VALUE;
注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
仅对当前用户:~/.bashrc;
对所有用户有效:/etc/bashrc
Note: 编辑配置给出的新配置不会立即生效;
bash 进程重新读取配置文件:
source /path/to/config_file
./path/to/config_file
撤消别名:unalias
unalias [-a] name [name ...]
Note: 如果别名同原命令的名称,则如果要执行原命令,可使用
"\COMMAND";
2、glob(globbing)bash 中用于实现文件名“通配”
通配符:*, ?, []
(1) * 任意长度的任意字符
[root@laptop-u5s7ejrh mnt]# ls
file1 file2 file3 file.txt hgfs summary
[root@laptop-u5s7ejrh mnt]# ls file*
file1 file2 file3 file.txt
(2) ? 任意单个字符
[root@laptop-u5s7ejrh mnt]# ls file?
file1 file2 file3
(3) [] 匹配指定范围内的任意单个字符
[root@laptop-u5s7ejrh mnt]# ls file[0-2]
file1 file2
(4) [^] 匹配指定范围外的任意单个字符
[root@laptop-u5s7ejrh mnt]# ls file[^0-2]
file3
专用字符集合:
[:digit:]:任意数字,相当于0-9 ls /mnt/file[[:digit:]] -l
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:
[:punct:]:标点符号
练习:
(1)、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录;
ls -d /var/l*[0-9]*[[:lower:]]
(2)、显示 /etc 目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
ls /etc/[0-9]*[^0-9] -d
(3)、显示 /etc/ 目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录;
ls -d /etc/[^[:alpha:]][[:alpha:]]*
(4)、复制 /etc目录下,所有以m开头,以非数字结尾的文件或目录至 /mnt/lv1 目录中;
cp -r /etc/m*[^0-9] /mnt/lv1
(5)、复制/etc目录下,所有以.d结尾的文件或目录至 /mnt/lv1 目录中;
cp -ar /etc/*.d /mnt/lv1
(6)、复制/etc目录下,所以有 .conf 结尾,且以m,n,r,p开头的文件或目录至/mnt/lv2目录中;
cp -ar /etc/[mnrp]*.conf /mnt/lv2
3、bash 的快捷键
ctrl + lCtrl+l: 清屏,相当于clear命令;
Ctrl+a:跳转至命令开始处;
Ctrl+e:跳转至命令结尾处;
Ctrl+c:取消命令的执行;
Ctrl+u: 删除命令行首至光标所在处的所有内容;
Ctrl+k: 删除光标所在处至命令行尾部的所有内容;
4、bash 的 I/O 重定向及管道
FD,文件描述符,文件句柄进程使用文件描述符来管理打开的文件。
FD 是访问文件的标识,即链接文件。省去了冗长的绝对路径。
0 键盘只读,标准输入
1,2 是终端,标准输出
3+ 是文件,可读可写
I/O 重定向:改变标准位置
输出重定向:COMMAND > NEW_POS, COMMAND >> NEW_POS
>:覆盖重定向,目标文件中的原有内容会被清除;
>>: 追加重定向,新内容会追加至目标文件尾部;
# set -C: 禁止将内容覆盖输出至已有文件中;
强制覆盖:>|
# set +C:
2>: 覆盖重定向错误输出数据流;
2>>: 追加重定向错误输出数据流;
标准输出和错误输出各自定向至不同位置:
COMMAND > /path/to/file.out 2>/path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向:&> 或 &>>
COMMAND > /path/to/file.out 2> &1
COMMAND >> /path/to/file.out 2>> &1
输入重定向:<
tr命令:转换或删除字符
tr [OPTION]... SET1 [SET2]
HERE Documentation:<<
# cat << EOF
# cat > /path/to/somefile << EOF
管道:
COMMAND1 | COMMAND2 | COMMAND3 |...
Note:最后一个命令会在当前shell进程的子shell进程中执行;
tee 三通管道,即交给另一个程序处理,自己另保存一份
例1:
[root@laptop-u5s7ejrh ~]# cat /etc/passwd | tail -1 | tee /mnt/file1
wuhao:x:1001:1001::/home/wuhao:/bin/bash
[root@laptop-u5s7ejrh ~]# cat /mnt/file1
wuhao:x:1001:1001::/home/wuhao:/bin/bash
例2:
[root@laptop-u5s7ejrh ~]# cat /etc/passwd | tee /mnt/file2 | tail -1
注:在此条命令中,file2中保存的是 cat /etc/passwd 内容,然后交给 tail -1 这条命令,最后屏幕上只显示 cat /etc/passwd 中的最后一行内容
文本处理工具
1、 wc - print newline, word, and byte counts for each file
wc [OPTION]... [FILE]...
-l: lines
-w: words
-c: characters
2、cut - remove sections from each line of files
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
--output-delimiter=STRING
3、sort - sort lines of text files
sort [OPTION]... [FILE]...
-f: 忽略字符大小写
-r: 逆序
-t DELIMITER: 字段分隔符
-k #:以指定字段为标准排序
-n: 以数值大小进行排序
-u: uniq,排序后去重
4、uniq - report or omit repeated lines
uniq [OPTION]... [INPUT [OUTPUT]]
-c: 显示每行重复出现的次数;
-d: 仅显示重复过的行;
-u: 仅显示不曾重复的行;
注:连续且完全相同方为重复
用户和组管理
1、Linux 组的类别
用户的基本组:组名同用户名,在创建用户时自动生成,仅包含一个用户,私有组
用户的附加组:可以有多个
2、Linux 用户和组的相关的配置文件
(1)/etc/passwd 用户的基本信息文件
root:x:0:0:root:/root:/bin/bash 用户名:x:uid:gid:描述:home:shell
用户名:登录系统的名字
x:密码占位符,具体内容不在此
uid:0 特权用户,1~499 系统用户,1000+ 普通用户 它们表示用户的身份证号
gid:组号
home:登录系统所在目录
shell:命令解释器
(2)/etc/group 组及其属性信息
root:x:0: 组名,组密码,组id,组成员
(3)/etc/shadow 用户密码及其相关属性
root:$6$Mz6QcE5u$iPk4nN00HW/Y3yDnWGTytdk30SkaAKqEnewYm59K4vANZrKsE6NHzFkkPOMFUaLskavmtMvcqQ6A0ecCl3e770:18806:0:99999:7:::
用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限: 最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段
(4)/etc/gshadow 组密码及其相关属性
3、用户和组相关的管理命令
(1)useradd 用户创建
useradd [options] LOGIN
-u UID: [UID_MIN, UID_MAX], 定义在/etc/login.defs
-g GID:指明用户所属基本组,可为组名,也可以GID;
-c "COMMENT":用户的注释信息;
-d /PATH/TO/HOME_DIR: 以指定的路径为家目录;
-s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中;
-G GROUP1[,GROUP2,...[,GROUPN]]]:为用户指明附加组;组必须事先存在;
-r:创建系统用户
CentOS 6: ID<500
CentOS 7: ID<1000
默认值设定:/etc/default/useradd文件中
useradd -D
-s SHELL
练习:创建用户 gentoo,附加组为distro和linux,默认shell为 /bin/csh,注释信息为"Gentoo Distribution"
[root@laptop-u5s7ejrh ~]# useradd gentoo -G distro,linux -s /bin/csh -c "Gentoo Distribution"
(2)groupadd 组的创建
groupadd [OPTION]... group_name
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组;
CentOS 6: ID<500
CentOS 7: ID<1000
(3)id 查看用户相关的ID信息
id [OPTION]... [USER]
-u: UID
-g: GID
-G: Groups
-n: Name
(4)su 用户的切换或以其他用户身份执行命令
su [options...] [-] [user [args...]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件;
su -UserName:登录式切换,会读取目标用户的配置文件;完全切换;
注:root su至其他用户无须密码;非root用户切换时需要密码;
换个身份执行命令:
su [-] UserName -c 'COMMAND'
-l:“su -l UserName”相当于“su -UserName”
(5)usermod 用户属性修改
usermod [options] LOGIN
-u UID: 新UID
-g GID: 新基本组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL;
-c 'COMMENT':新的注释信息;
-d HOME: 新的家目录;原有家目录中的文件不会同时移动至新的家目录;若要移动,则同时使用-m选项;
-l login_name: 新的名字;
-L: lock指定用户
-U: unlock指定用户
-e YYYY-MM-DD: 指明用户账号过期日期;
-f INACTIVE: 设定非活动期限;
(6)passwd 给用户添加密码
passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户权限
passwd: 修改自己的密码;
常用选项:
-l: 锁定指定用户
-u: 解锁指定用户
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限;
--stdin:从标准输入接收用户密码;
echo "PASSWORD" | passwd
--stdin USERNAME
Note: /dev/null, bit buckets
/dev/zero
(7)userdel 删除用户
userdel [OPTION]... login
-r: 删除用户家目录;
(8)groupmod 组属性修改
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
(9)groupdel 组删除
groupdel GROUP
(10)gpasswd 组密码
gpasswd [OPTION] GROUP
-a user: 将user添加至指定组中;
-d user: 删除用户user的以当前组为组名的附加组
-A user1,user2,...: 设置有管理权限的用户列表
newgrp命令:临时切换基本组;
如果用户本不属于此组,则需要组密码
(11)chage 修改用户属性
chage [OPTION]... LOGIN
-d LAST_DAY
-E, --expiredate EXPIRE_DATE
-I, --inactive INACTIVE
-m, --mindays MIN_DAYS
-M, --maxdays MAX_DAYS
-W, --warndays WARN_DAYS
用户及权限管理
1、文件的权限主要针对三类对象进行定义
owner:属主,u group:属组,g other:其它,o
2、每个文件针对没类访问者都定义了三种权限(括号中为对应的数字表示法):
r:读(4) w:写(2) x:执行(1)
3、chmod 修改文件权限
[root@laptop-u5s7ejrh mnt]# chmod 721 file1
[root@laptop-u5s7ejrh mnt]# ll file1
-rwx-w---x. 1 root root 41 Aug 3 02:59 file1
[root@laptop-u5s7ejrh mnt]# chmod u-w,g+r file1
[root@laptop-u5s7ejrh mnt]# ll file1
-r-xrw---x. 1 root root 41 Aug 3 02:59 file1
4、chown 修改文件的属主和属组
[root@laptop-u5s7ejrh home]# ll /mnt/file1
-r-xrw---x. 1 root root 41 Aug 3 02:59 /mnt/file1
[root@laptop-u5s7ejrh home]# chown wuhao.wh /mnt/file1
[root@laptop-u5s7ejrh home]# ll /mnt/file1
-r-xrw---x. 1 wuhao wh 41 Aug 3 02:59 /mnt/file1
5、chgrp 修改文件的属组
[root@laptop-u5s7ejrh home]# chgrp root /mnt/file1
[root@laptop-u5s7ejrh home]# ll /mnt/file1
-r-xrw---x. 1 wuhao root 41 Aug 3 02:59 /mnt/file1
6、umask 文件或目录创建时的遮罩码,表示要减去的权限
Note:创建的是文件,会自动减去它的执行权限,目录则不会
[root@laptop-u5s7ejrh mnt]# umask
0022
[root@laptop-u5s7ejrh ~]# ll /mnt/file1 // 777 - 022 - x = 644
-rw-r--r--. 1 root root 170 Aug 4 04:37 /mnt/file1
[root@laptop-u5s7ejrh ~]# ll -d /mnt // 777 - 022 = 754
drwxr-xr-x. 10 root root 181 Aug 4 05:07 /mnt