1、Linux上的文件管理类命令
(1)ls 显示文件
ls [OPTION]… [FILE]…
-a 显示所有文件
-A:显示除.和..之外的所有文件
-l:显示文件的详细属性信息 ,也可以用ll来表示
-h:对文件大小进行单位换算,可能影响精度
-d:查看目录本身而非其内部的文件
–S: 按从大到小排序
-r:逆序显示文件
-R:递归显示文件
-X 按类别显示文件
示例:ll -ah /–详细显示根目录下的所有文件(包括隐藏文件)
ll -dh /etc–详细显示/etc目录本身
ll -hv /–倒序显示/目录下所有文件(包括隐藏文件)
ls -R /etc –递归显示/etc下所有文件
l. 只显示隐藏文件
ls -d */ 只显示当前目录所有子目录
ls */ 显示当前文件目录及目录下的文件
(2)mkdir:创建目录
mkdir [OPTION]… DIRECTORY…
-p:自动按需创建父目录
-m:创建目录时给定权限
示例:mkdir -p /data/A/B –在/data目录下递归创建date/A/B三个目录
(3) rmdir:删除目录只能删除空目录
rmdir [OPTION]… DIRECTORY…
-p:删除目录后如果其父目录为空,则一并删除
示例:rmdir -p /data/test/A –删除A目录后,test目录为空,一并删除
(4)cd:切换目录
示例:cd ..:切换到上级目录
cd ~:切换回自己的家目录
cd -:在上一次目录与当前目录直接来回切换
(5)pwd:显示当前目录
(6)cp:复制
单源复制:cp [OPTION]… [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖)
多源复制:cp [OPTION]… SOURCE… DIRECTORY(DEST必须为directory)
-i:交互式复制,即覆盖前提醒用户确认(默认)
-a:保留原文件属性的前提下复制文件,支持目录复制,备份常用选项
-f:强制覆盖目标文件
-r,-R:递归复制目录
–backup=numbered 选项会创建一个在文件名末尾用数字标记(~)的备份文件
-u 只覆盖最新文件
示例:cp -f /data/[1-3].txt /data/test test必须为目录,把三个文件一起复制到test中
cp -a /data /practice 把data目录及目录下的内容一起复制到practice中
(7)mv:剪切
单源复制:mv [OPTION]… [-T] SOURCE DEST(如果DEST不存在则创建,存在则覆盖)
多源复制:mv [OPTION]… SOURCE… DIRECTORY(DEST必须为directory)
-i:交互式复制,即覆盖前提醒用户确认
-f:强制覆盖目标文件
-u :若目标文件已经存在,且 source 比较新,才会更新(update)
-t : 即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。
示例:mv -i /data/[1-3].txt /practice 把/data目录下三个txt文件剪切到/practice下
alias rm='mv -t /data' 把rm 替代为mv 把要删除的文件移动到/data 目录下
(8)rm:删除
rm [OPTION]… FILE…
-i:交互式复制,即覆盖前提醒用户确认
-f:强制覆盖目标文件
-r,-R:递归处理,将制定目录下的所有文件包括目录一并删除
示例:rm -rf /practice 递归删除/practice目录
(9)cat:正向查看文本内容
cat [OPTION]… [FILE]…
-n:给显示的文本行编号
-E:显示行结束符号$
示例:cat -n /etc/fstab 查看/etc/fatab内容并显示行号
(10)tac:倒叙查看文本内容
tac [OPTION]… [FILE]…
示例:tac /etc/passwd 倒叙查看文本内容
(11)head:显示文本内容,默认显示头10行
head [OPTION]… [FILE]…
-n #:显示文本头#行内容
示例:head -5 /etc/passwd 显示/etc/passwd文件头5行内容
(12)tail:显示文本内容,默认显示后10行
tail [OPTION]… [FILE]…
-n #:显示文本后#行内容
-f:查看文件尾部内容结束后不退出,跟随显示新增的行
示例:tail -8 /etc/passwd 显示/etc/passwd文件后8行内容
(13)more:分屏显示文本内容,每次显示一屏显示完停止
more [options] file […]
Space键:显示文本下一屏内容
Enter键:只显示文本下一行内容
b键:显示文本上一屏内容
q键:退出
(14)less:分屏显示文本内容,不主动退出
less [options] file […]
Space键:显示文本下一屏内容
Enter键:只显示文本下一行内容
b键:显示文本上一屏内容
q键:退出
(15) ln 链接文件
ln [OPTION]… [-T] TARGET LINK_NAME (1st form)
ln [OPTION]… TARGET (2nd form)
ln [OPTION]… TARGET… DIRECTORY (3rd form)
ln [OPTION]… -t DIRECTORY TARGET… (4th form)
-b 删除,覆盖以前建立的链接
-d 创建指向目录的硬链接(只适用于超级用户)
-f 强制执行,操作前不询问
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
示例:ln -s a.txt a 为a.txt创建软链接
ln a.txt a 为a.txt创建硬链接
1)软连接和Windows系统中的快捷方式有点类似
2)硬链接,相当于多了一个文件名指向同一块内存空间,目录无法创建硬链接,不可以跨文件系统创建
(16) file 检查文件的类型
file [options] …
-f filelist 列出文件filelist中文件名的文件类型 (把需要判断的文件名写入一个文件中批量判断)
-F 使用指定分隔符号替换输出文件名后默认的”:”分隔符(输出结果修改)
2、使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b
执行命令mkdir -pv /tmp/a{1/{a,b},2}
mkdir: created directory ‘/tmp/a1’
mkdir: created directory ‘/tmp/a1/a’
mkdir: created directory ‘/tmp/a1/b’
mkdir: created directory ‘/tmp/a2’
执行命令tree /tmp/
/tmp/
├── a1
│ ├── a
│ └── b
└── a2
在/tmp目录下创建目录:x_y, x_z, q_y, q_z
执行命令mkdir -pv {x,q}_{y,z}
mkdir: created directory ‘x_y’
mkdir: created directory ‘x_z’
mkdir: created directory ‘q_y’
mkdir: created directory ‘q_z’
执行tree查看效果
.
├── q_y
├── q_z
├── x_y
└── x_z
3、文件的元数据信息包括
Size 文件大小(字节)
Blocks 文件使用的数据块总数
IO Block 数据块的大小
regular file:文件类型(常规文件)
Device 设备编号
Inode 文件所在的Inode
Links 硬链接次数
Access 权限 Uid 属主id/用户 Gid 属组id/组名
Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
查看文件的元数据信息用stat命令
[root@centos7 ~]#stat hello.sh
File: ‘hello.sh’
Size: 32 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 100663387 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-10-31 20:37:17.757059440 +0800
Modify: 2018-10-28 21:25:08.485016670 +0800
Change: 2018-10-28 21:26:26.959023084 +0800
Birth: –
修改文件的时间戳信息
touch [OPTION]…FILE…
-a:only atime
-m:only mtime
-t:使用指定的日期时间,而非现在的时间;[[CC]YY]MMDDhhmm[.ss]
4、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
执行命令 touch /tmp/tfile-`date "+%Y-%m-%d-%H-%M-%S"`
ll /tmp/
total 0
-rw-r–r–. 1 root root 0 Nov 22 19:36 tfile-2018-11-22-19-36-45
5、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
执行命令mkdir /tmp/mytest1;cp -a /etc/p*[^0-9] /tmp/mytest1
结果如下
ls /tmp/mytest1/
pam.d pbm2ppa.conf plymouth popt.d prelink.conf.d profile.d purple
passwd pinforc pm postfix printcap protocols python
passwd- pki pnm2ppa.conf ppp profile pulse
6、创建用户tom,指定UID为5001,指定家目录为/tmp/tom, 指定shell为/bin/zsh, 指定基本组为tom,附加组为jack
执行命令groupadd jack;useradd -u 5001 -d /tmp/tom -s /bin/zsh -U -G jack tom
结果如下tom:x:5001:5001::/tmp/tom:/bin/zsh
uid=5001(tom) gid=5001(tom) groups=5001(tom),1003(jack)
ll -a /tmp/tom
total 12
drwx——. 3 tom tom 78 Nov 22 19:55 .
drwxrwxrwt. 10 root root 217 Nov 22 19:55 ..
-rw-r–r–. 1 tom tom 18 Aug 3 2017 .bash_logout
-rw-r–r–. 1 tom tom 193 Aug 3 2017 .bash_profile
-rw-r–r–. 1 tom tom 231 Aug 3 2017 .bashrc
drwxr-xr-x. 4 tom tom 39 Oct 17 20:27 .mozilla
7、常用的用户以及文件管理命令
(1)查看当前用户:whoami 和who 或者 who am i
(2)useradd :添加用户命令
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 不创建家目录,用于非系统用户
示例:useradd -s /bin/sh -g group –G adm,root abc 增加用户abc,并指定它的shell ,主组和附加组
useadd 默认配置文件/etc/default/useradd
/etc/login.defs这个文件就是用来设置用户创建时默认属性的文件
(3)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指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限
示例:usermod -s /bin/ksh -d /home/z –g developer sam 修改sam用户的shell和目录以及主组
(4)userdel 删除用户
userdel [OPTION]… login
-r: 删除用户家目录
userdel -r sam 删除sam用户并清空相关目录
(5)su 切换用户
su [options…] [-] [user [args…]]
su – 完全切换
(6)passwd 更改密码
passwd [OPTIONS] UserName
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
–stdin:从标准输入接收用户密码
示例:echo magedu | passwd –stdin varnishs 非交互式更改密码
(7)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
–l 显示密码策略
示例: chage -d 0 tom 下一次登录强制重设密码
(8)groupadd 增加组
groupadd [OPTION]… group_name
-g GID: 指明GID号;
-r: 创建系统组
(9)groupmod 修改组信息
groupmod [OPTION]… group
-n group_name 新名字
-g 修改gid
示例:groupmod -n linux linux2
(10)groupdel 删除组
groupdel GROUP
(11)chown 修改文件所属组
chown [OPTION]… [OWNER][:[GROUP]] FILE…
-R: 递归
示例:chown -R myuser:mygroup /test
chown myuser test
chown :mygroup test 修改test所属组
(12)chmod 修改文件权限 (rwxX)(421)
chmod [OPTION]… OCTAL-MODE FILE…
-R: 递归修改权限
对于文件来说rwx分别是可读可写可执行权限
对于目录目录r权限可以看到文件列表~ w可以删文件 x可以进入目录和文件具体属性 无法操作该目录 目录基本权限
+X:只给目录x权限,不给文件x权限,或者给有执行权限的文件 加执行权限 如-rwxrw-rw- 变成 -rwxrwxrwx
root不受rw限制受x权限限制
示例:chmod u+wx,g-r,o=rx file
chmod -R g+rwX /testdir 给目录的所属组递归增加rwx权限,该目录下文件所属组只增加rw权限
chmod 600 file
(13)SUID, SGID, Sticky 特殊权限
suid u+s 4777 作用于二进制程序,权限与程序所有者有关
guid g+s 2777 作用于二进制程序,权限与程序所属组有关;作用于文件夹中,文件夹里新建文件继承目录所属组
stick o+t 1777 作用目录,此目录的文件只能被所有者删除
chattr +i +a(只能追加) 锁定文件 +A 不能修改atime(访问时间) lsattr file查看特殊权限
(14)umask 系统默认生成权限
新建FILE权限: 666-umask 如果所得结果某位存在执行(奇数)权限,则将其权限+1 (结果偶数不变,奇数加一)
新建DIR权限: 777-umask
(15)ACL高级权限
centos6版本需要手动加acl权限功能
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL生效顺序:所有者,自定义用户,自定义组,其他人
应用ACL后 文件本身组权限变成acl中的mask,而非传统的组权限
常用命令
getfacl: 获取文件或目录的ACL设置信息
getfacl [-bkndRLP] { -m|-M|-x|-X … } file …
-a , –access:显示文件或目录的访问控制列表
-d , –default:显示文件或目录的默认(缺省)的访问控制列表
-R , –recursive:操作递归到子目录
setfacl: 设置文件或目录的ACL设置信息
setfacl [-bkndRLP] { -m|-M|-x|-X … } file …
-m, –modify=acl:修改文件或目录的扩展ACL设置信息
-x, –remove=acl:从文件或目录删除一个扩展的ACL设置信息
-b, –remove-all:删除所有的扩展的ACL设置信息
-k, –remove-default:删除默认的acl设置信息
-n, –no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定
-d, –default:设置默认的ACL设置信息(只对目录有效)
-R, –recursive:操作递归到所有子目录和 文件
示例:getfacl file
setfacl -m u:wang:rwx txt
setfacl -Rm g:sales:rwX directory
setfacl -m d:u:wang:rx /data 设定该目录的默认权限,只对目录有效 或者setfacl -dmu:wang:rx /data
setfacl -x u:wang file 移除设置好的wang账号对该文件权限
备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要 加上-p 参数。
但是tar等常见的备份工具是不会保留目录 和文件的ACL信息
getfacl -R /tmp/dir1 > acl.txt 把目录的acl保存在acl.txt文件中
setfacl -R -b /tmp/dir1 删除该目录所有acl权限
setfacl -R –set-file=acl.txt /tmp/dir1 恢复权限到目录中
setfacl –restore acl.txt
getfacl -R /tmp/dir1 查看目录acl权限
(16)pwck grpck 检查/etc/passwd 和 /etc/group 文件正确性
用文件批量创建用户密码: newusers chpasswd
创建user文件,写入用户列表,格式与/etc/passwd 一致
如:
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
tomcat:x:1001:1002::/home/tomcat:/bin/bash
tom:x:5001:5001::/tmp/tom:/bin/zsh
然后newusers txt 创建这些用户
在创建password文件,格式
用户:密码
tomcat:123456
tom:123456
然后cat password |chpasswd 自动添加密码
newgrp 切换当前用户主组