1、Linux上的文件管理类命令及常见使用方法、示例
常见的文件管理类命令有 cp(拷贝),mv(移动),rm(删除),这三者的共性选项有-i(交互式),-f(强制),cp 和 rm 还有共性选项-r(递归)。cp 和 mv 的操作可以单源或多源,单源操作时目标对象可以是文件或者目录,多源操作时,目标对象只能是目录,即 cp 和 mv 不能作为合并文件之用。下面以一个多源操作演示这三个命令
例:首先在/tmp目录下建立三个空文件a.txt b.txt c.txt,并同时创建一个测试目录test
]~# touch /tmp/{a,b,c}.txt; mkdir /tmp/test
然后复制a.txt b.txt c.txt三个文件至test文件夹
]~# cp /tmp/{a,b,c}.txt /tmp/test/
或者下面一条命令也可以,-t 表示目标文件夹,此时将目标地址/tmp/test/放在前面,源放在后面
]~# cp -t /tmp/test/ /tmp/{a,b,c}.txt
删除 test 文件夹及当中内容,并重新建立一个空test 文件夹,准备下面 mv 命令演示环境
]~# rm -rf /tmp/test; mkdir /tmp/test
移动tmp目录下a,b,c三个文件至/tmp/test/目录下
]~# mv /tmp/{a,b,c}.txt /tmp/test/
或者用下面一条命令也可以,-t 表示目标文件夹,此时将目标地址/tmp/test放前面,源放后面
]~# mv -t /tmp/test/ /tmp/{a,b,c}.txt
2、使用命令行展开功能创建目录示例
主要利用bash中{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径的特性,
例:创建/tmp/a1,/tmp/a2,/tmp/a1/a,/tmp/a1/b,在/tmp目录下创建目录x_y,x_z,q_y,q_z
-p 自动按需创建父目录 -v verbose 显示详细过程
]~# mkdir -pv /tmp/{a1/{a,b},a2}
]~# mkdir -pv /tmp/{x,q}_{y,z}
3、文件的元数据信息有哪些,分别有什么含义,如何查看?如何修改文件的时间戳信息
文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件属主属组、安全上下文、文件的时间戳(access time/modify time/change time/create time)、以及文件数据块的分布信息(inode...)等等。
时间戳当中,access time即访问这个文件夹中的文件,如用 cat命令,那么文件夹和文件的访问时间就会改变;modify time,即修改这个文件夹中文件,则令文件夹和文件的更改时间产生改变;change time,通过使用 mv 命令可以单独改变这个文件夹或文件的改动时间。
查看文件的元数据信息,可以使用stat命令,后面接文件名
]~# stat /tmp/test
文件:"/tmp/test"
大小:6 块:0 IO 块:4096 目录
设备:fd00h/64768d Inode:102583006 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-07-06 17:05:27.057452821 +0800
最近更改:2019-07-06 17:05:27.057452821 +0800
最近改动:2019-07-06 17:05:27.057452821 +0800
创建时间:-
如何修改文件的时间戳信息,通过 touch 命令,通过后面选项-a (仅修改access time)或-m(仅修改modify time),和-t (时间戳格式为YYYYMMDDhhmm.ss)
将最近访问(access time)修改为2015年3月20日 00:21:40
]~# touch -a -t 201503200021.40 /tmp/test
]~# stat /tmp/test
文件:"/tmp/test"
大小:6 块:0 IO 块:4096 目录
设备:fd00h/64768d Inode:102583006 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2015-03-20 00:21:40.000000000 +0800
最近更改:2019-07-06 17:05:27.057452821 +0800
最近改动:2019-07-06 17:10:45.282935024 +0800
创建时间:-
将最近更改(modify time)修改为 2014年5月18日 11:11:11
]~# touch -a -m 201405181111.11 /tmp/test
]~# stat /tmp/test
文件:"/tmp/test"
大小:17 块:0 IO 块:4096 目录
设备:fd00h/64768d Inode:102583006 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2015-03-20 00:21:40.000000000 +0800
最近更改:2014-05-18 11:11:11.000000000 +0800
最近改动:2019-07-06 17:10:45.282935024 +0800
创建时间:-
4、Bash中的命令执行结果的引用,可以通过$(COMMAND
)组合或者反单引号`COMMAND
` 对命令结果进行强引用,推荐使用$(COMMAND
)。
接下来在/tmp目录下创建字符串tfile开头,后跟当前日期和时间的文件,格式如tfile-2019-07-03-18-14-37
]~# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
]~# ll /tmp/
-rw-r--r--. 1 root root 0 7月 6 18:00 tfile-2019-07-06-18-00-22
drwx------. 2 root root 21 7月 4 19:05 tmux-0
5、关于Bash中Globbing(通配符)机制的使用简介,然后复制指定格式的文件或目录到指定目录中
globbing:文件名通配(对整体文件名匹配,而非部分)
匹配模式:元字符
*:匹配任意长度的任意字符
?:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
有几种特殊格式:
[a-z], [A-Z], [0-9], [a-z0-9]
[[:upper:]]:所有大写字母
[[:lower:]]:所有小写字母
[[:alpha:]]:所有字母
[[:digit:]]:所有数字
[[:alnum:]]:所有的字母和数字
[[:space:]]:所有空白字符
[[:punct:]]:所有标点符号
[^]:匹配指定范围外的任意单个字符
[^[:upper:]]:所有非大写字符
[^0-9]:所有非数字
[^[:alnum:]]:所有非正常字符(即不含字母和数字)
下面演示如何复制/etc目录下所有以p开头,以非数字结尾文件或目录到/tmp/mytest1目录中
]~# cp -r /etc/p*[^0-9] /tmp/mytest1/
6、创建用户,指定UID,家目录、 shell、基本组和附加组
用法:useradd [选项] 登录
useradd -D
useradd -D [选项]
选项:
-b, --base-dir BASE_DIR 新账户的主目录的基目录
-c, --comment COMMENT 新账户的 GECOS 字段
-d, --home-dir HOME_DIR 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表,多个附加组用逗号分隔
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
下面举例:创建用户tom,指定UID为5001,指定家目录为/tmp/tom,指定shell为/bin/zsh,指定基本组为tom,附加组为jack
]~# useradd -u 5001 -m -d /tmp/tom -s /bin/zsh -G jack -U tom
7、常用的用户以及用户管理命令及使用方法
常用的用户管理命令有以下groupadd, groupmod, groupdel, useradd, usermod, userdel, passwd, gpasswd, newgrp, id, su, chage
groupadd命令:添加组
groupadd [选项] group_name
-g GID:指定GID;默认是上一个组的GID+1;
-r: 创建系统组;
groupmod命令:修改组属性
groupmod [选项] GROUP
-g GID:修改GID;
-n new_name:修改组名;
groupdel命令:删除组
groupdel [选项] GROUP
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:创建系统用户;
注意:创建用户时的诸多默认设定配置文件为/etc/login.defs
useradd -D:显示创建用户的默认配置;
useradd -D 选项: 修改默认选项的值;
修改的结果保存于/etc/default/useradd文件中;
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:删除用户时一并删除其家目录;
passwd命令:
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1) passwd:修改用户自己的密码;
(2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;
-l, -u:锁定和解锁用户;
-d:清除用户密码串;
-e DATE: 过期期限,日期;
-i DAYS:非活动期限;
-n DAYS:密码的最短使用期限;
-x DAYS:密码的最长使用期限;
-w DAYS:警告期限;
--stdin:
echo "PASSWORD" | passwd --stdin USERNAME
gpasswd命令:
组密码文件:/etc/gshadow
gpasswd [选项] group
-a USERNAME:向组中添加用户
-d USERNAME:从组中移除用户
newgrp命令:临时切换指定的组为基本组;
newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其工作环境;
chage命令:更改用户密码过期信息
chage [选项] 登录名
id命令:显示用户的真和有效ID;
id [OPTION]... [USER]
-u: 仅显示有效的UID;
-g: 仅显示用户的基本组ID;
-G:仅显示用户所属的所有组的ID;
-n: 显示名字而非ID;
su命令:switch user
登录式切换:会通过读取目标用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其它任何用户;
-c 'COMMAND':仅以指定用户的身份运行此处指定的命令;