博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux文件管理
阅读量:3922 次
发布时间:2019-05-23

本文共 23855 字,大约阅读时间需要 79 分钟。

  • Linux上的文件管理类命令常用的使用方法及其相关示例
  • 使用命令创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z
  • 查看文件的元数据信息有哪些,分别表示什么含义,修改文件的时间戳信息。
  • 在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
  • 复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
  • 创建用户tom,指定UID为5001,指定家目录为/tmp/tom, 指定shell为/bin/zsh, 指定基本组为tom,附加组为jack。
  • 常用的用户以及文件管理命令有哪些,并演示命令以及用法。

#Linux上的文件常用的管理类命令使用方法及其相关示例

**文件目录切换和查看 cd **

#	cd 改变目录   1 	cd ~/ cd	可以直接进家目录   2   cd  ~ wang	 可以直接进某个账号的家目录、   3   cd -		回到刚才的目录 利用  $OLDPWD变量回退   4   cd ..  切换之父目录   5   cd     切换至当前用户主目录   6   cd    /home/alice   绝对路径进入alice的家目录   7   cd   home/alice   相对路径   8	pwd  $PWD当前目录变量常见的变量有 PS1 提示符	 PATH(bin执行路径)	 OLDPWD(上一次目录路径)  HISTSIZE(保存历史记录的多少条)	SHELL(使用的shell)

**列出目录内容 ls [option] + file or dir

-a 包含隐藏文件 -l 显示额外的信息 -R 目录递归通过 -ld 目录和符号链接信息
-1 文件分行显示 -s 按从大到小排序 -t 按mtime排序 -u 配合-t选项 ,显示按atime 从新到旧排序
-U 按目录存放顺序显示 -X 按文件后缀排序 **

ls-a 与ls -A 区别是 显示. ..[root@centos6 /data]#ls -a.  ..  f1  f2  f3  mbr[root@centos6 /data]#ls -Af1  f2  f3  mbrbin是软连接   ll  /bin  和  ll /bin/有区别

ls /data -1 按照字符次序 数字比字母在前

[root@centos6 /data]#ls -l  total 16-rw-r--r--. 1 root root   0 Jan 24 20:06 1-rw-r--r--. 1 root root   7 Jan 23 20:58 f1-rw-r--r--. 1 root root   9 Jan 23 21:00 f2-rw-r--r--. 1 root root   9 Jan 23 21:00 f3-rw-r--r--. 1 root root 512 Jan 23 21:01 mbr

ls -slr 倒序(reverse)

[root@centos6 /data]#ls -slr	total 16	4 -rw-r--r--. 1 root root 512 Jan 23 21:01 mbr	4 -rw-r--r--. 1 root root   9 Jan 23 21:00 f3	4 -rw-r--r--. 1 root root   9 Jan 23 21:00 f2	4 -rw-r--r--. 1 root root   7 Jan 23 20:58 f1	0 -rw-r--r--. 1 root root   0 Jan 24 20:06 1

ll --time=atime /data/file6 (access time)访问时间 读时间

状态更改时间 ctime 原数据发生变化的时间
用stats 可查看三状态时间

[root@centos6 /data]#stat f1  File: `f1'  Size: 7               Blocks: 8          IO Block: 4096   regular file  Device: 803h/2051d      Inode: 17          Links: 1  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)  Access: 2019-01-23 20:59:11.875867389 +0800  Modify: 2019-01-23 20:58:42.387867040 +0800  Change: 2019-01-23 20:58:42.387867040 +0800

-u withlt 用accesstime时间排序

-c with lt 用changetime排序

[root@centos6 /data]#ls -U	f1  mbr  f2  1  f3	[root@centos6 /data]#ll -U	total 16	-rw-r--r--. 1 root root   7 Jan 23 20:58 f1	-rw-r--r--. 1 root root 512 Jan 23 21:01 mbr	-rw-r--r--. 1 root root   9 Jan 23 21:00 f2	-rw-r--r--. 1 root root   0 Jan 24 20:06 1	-rw-r--r--. 1 root root   9 Jan 23 21:00 f3	[root@centos6 /data]#ll -C	1  f1  f2  f3  mbr	[root@centos6 /data]#ll -c	total 16	-rw-r--r--. 1 root root   0 Jan 24 20:06 1	-rw-r--r--. 1 root root   7 Jan 23 20:58 f1	-rw-r--r--. 1 root root   9 Jan 23 21:00 f2	-rw-r--r--. 1 root root   9 Jan 23 21:00 f3	-rw-r--r--. 1 root root 512 Jan 23 21:01 mbr

目录时间就是创建目录时间排序

常用的的,只显示文件夹,不显示文件 ls -d */ (d是只显示文件夹本身,不显示子文件)

[root@centos6 ~]#ls -d */bin/      Documents/  Music/     Public/  Templates/  Videos/Desktop/  Downloads/  Pictures/  src/     usr/

#使用文件通配符 glob 查看man帮助 man 7 glob

1.* 匹配零个或多个字符 【:digit:】任意数字,等于0-9
2.?匹配任何单个字符 【:lower:】任意小写字母
3.~ 当前用户家目录 【:upper:】任意大写字母
4.~ alice 用户alice的家目录 【:alpha:】任意大小写字母
5.~+ 当前工作目录 【:alnum:】任意数字或字母
6.~- 上一个工作目录 【:blank:】水平空白字符
7.【0-9】匹配数字范围 【:space:】水平或垂直空白字符 包括blank
8.【a-z】字母 【:punct:】标点符号
9.【A-Z】字母 【:print:】可打印字符
10.【abc】匹配列表中的任意一个字符a,b,c 【:cntrl:】控制(非打印)字符
11.【^abc】匹配列表中的字符以外的字符d,e,f,g…等等 【:graph:】图形字符 【:xdigit:】十六进制字符

–实例

[root@centos6 /data]#lsfilea  fileA  fileb  fileB  filec  fileC  filed  fileD[root@centos6 /data]#ls file[abc]filea  fileb  filec[root@centos6 /data]#ls file[^abc]fileA  fileB  fileC  filed  fileD[root@centos6 /data]#ls file[a-d]           [a-d]大小字母 最后d没有Dfilea  fileA  fileb  fileB  filec  fileC  filed[root@centos6 /data]#ls file[a-D]filea  fileA  fileb  fileB  filec  fileC  filed  fileD     大写字母   []代表其中一个 所有还要嵌套一层[][root@centos6 /data]#ls file[[:lower:]]filea  fileb  filec  filed

创建空文件和刷新时间 touch

sysnopsis 简单概述

touch 选项 … file …
-a 只改变atime 和ctime
-m 只改变mtime和ctime
-t 指定atime和mtime的时间戳 yymmddhhmm[.ss]
-c 如果文件不存在,则不予创建

复制文件和目录 cp

sysnopsis 简单概述

cp 选项 -T 原数据 目标只能一个
cp选项 元数据 文件夹 (适用多个文件)
cp 选项 -t 目录 复制的文件

–注意点:

root用的cp是别名(\CP是用cp).bashrc
普通用户用的是原始cp
多个文件复制过去必须是 文件夹
cp命令默认是复制文件夹的,文件夹要-r

–cp选项:

-d 保留链接,复制的也是链接
-p 保留mode 权限,ownership 所有者,timestamps 三个时间(只能保留文件的三个属性)
-u 只复制源比目标更新文件或目标不存在的文件
-a 全部保留 可以作为备份手段
cp -a 是非常常见的备份手段
du -sh 读取大小
-av(可以看到过程 防止死机不知道)过大不建议用,容易造成终端死机
back up=numbered 目标存在,覆盖前先备份加数字后缀
-r 等于递归recursive

–cp实例

cp -a /etc/*    /data   复制所有etc的文件保留原来属性到/datacp -r  /etc/sysconfig/   /data/dir    递归复制sysconfig下的文件和文件夹到 /data/dir中cp /etc/issue /etc/hosts /data/f1  多个文件复制过去必须是 文件夹cp -d /etc/grub.conf /data/  复制保留来的链接

移动和重命名文件 mv

sysnopsis 简单概述

mv 选项 -T 原数据 目标只能一个
mv 选项 元数据 文件夹 (适用多个文件)
mv 选项 -t 目录 复制的文件

–mv选项:

-i 一般表示交互interactive,会提示用户覆盖不覆盖
-f 强制
等于windows 的剪切粘贴

-mv实例

#:mv -t /data /root/f1 /root/bmv:overwrite '/data/b'? y#:alice mvalice mv='mv -i'

删除文件 rm shred

sysnopsis 简单概述

rm 选项 要删除的文件

–rm选项:

-i 一般表示交互interactive,会提示用户是否删除
-f 强制
-r 递归 recursive
–no-preserve-root = 删除/

-rm注意点:

(命令)\rm就不会提示,是使用原始的命令。
rm删除命令是很危险的建议用别名
rm -r 是递归找到任何所有文件全删。
从centos6开始(rm -rf /)不让你删除,rm -rf / --no-preserve(保存)-root(删系统)rm -rf /(这样也可以)。
rm -rf /data /
这样就是删除两个文件夹 ,中间不能有空格。
建议把rm之类定义别名为移动alias rm=‘mv -t /data’。
数据不是马上被删除,只是把inode号删除,原有数据还在硬盘上,后面写入的数据会把原有的数据覆盖

-rm实例

rm -rf /  递归强制删除跟    rm f1 删除f1文件   shred  -zv -n 6 hosts  相对比较安全  (对数据来说,恢复起来很难)z(最后一次删除时用0把它覆盖的) v(过程)u(不仅覆盖,在最后还要删除)-n(覆盖多少次)

目录操作 tree mkdir rmdir

sysnopsis 简单概述

tree 显示目录以树状的方式显示
-d 只显示目录
-L level 指定显示的层级数目
-P pattern 只显示由指定的pattern 模式匹配到的路径
mkdir 创建目录
-p 存在于不报错,且可自动创建所需的各目录 (父目录如果不存在自动生成)
-v 显示详细信息
-m mode 创建目录时直接指定权限
rmdir 删除空目录 (只能删除空目录)
-p 递归删除父空目录
-v 显示详细信息
rm -r 递归删除目录树

–tree实例

[root@centos6 ~]#tree -L 1 -d /boot/boot├── efi├── grub└── lost+found[root@centos6 ~]#tree -L 2 -d /boot /boot├── efi│   └── EFI├── grub└── lost+found

–mkdir实例

mkdir -pv /data/dir1/dir2/dir3

–rmdir实例

rmdir -p /data/dir1/dir2/dir3/

软硬链接和检查文件类型 ln file

sysnopsis 简单概述

ln 选项 原文件 链接文件
-s soft 符号链接 软连接

-ln注意点:

本质
硬链接:同一个文件多个名字
软连接:一个文件对应快捷方式,本质是不同文件
1、链接数(硬链接会增长链接数,软链接不会)
2、跨分区(软链接可以跨分区,硬链接不可以)
3、目录(硬链接不支持目录,软连接支持)
4、原始和链接的文件关系(硬链接,原属文件和硬链接本质是一样的,软连接依赖于原始文件)
5、删除(硬链接删除,新的文件不受影响,软连接,原始文件删除,新的链接就找不到)

–ln实例

[root@centos6 /data]#ln -s   fileb linkfile   [root@centos6 /data]#ll-rw-r--r--. 1 root root 0 Jan 24 20:49 fileblrwxrwxrwx. 1 root root 5 Jan 25 09:52 linkfile -> fileb[root@centos6 /data]#ln    fileb linkfile  ln: creating hard link `linkfile': File exists[root@centos6 /data]#ln    fileb linkfile2[root@centos6 /data]#ll-rw-r--r--. 2 root root 0 Jan 24 20:49 fileblrwxrwxrwx. 1 root root 5 Jan 25 09:52 linkfile -> fileb-rw-r--r--. 2 root root 0 Jan 24 20:49 linkfile2

sysnopsis 简单概述

检查文件的类型,然后确定适当的打开命令或应用程序使用
file 选项 文件名

–file选项:

-b 列出文件辨识结果,不显示文件名称
-f filelist列出文件filelist中文件名的文件类型
-F 使用指定分隔符合替换输出文件名后默认的“:”分隔符
-L 查看对应软链接对应文件的文件类型
–help 显示命令在线帮助

-file注意点:

file 可以看文件的类型,而不是简单地看文件的后缀、只看头部分信息判断文件类型
linux对于后缀没有要求
losf 查看删除文件对应路径

–file实例

[root@centos6 /data]#echo -e "/etc/hosts\n/data\n/bin/ls\n" >filelist[root@centos6 /data]#lsfilea  fileb  filec  filed  filelist  linkfile2fileA  fileB  fileC  fileD  linkfile[root@centos6 /data]#file -f filelist /etc/hosts: ASCII text/data:      directory/bin/ls:    ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped:           cannot open `' (No such file or directory)

文件权限

sysnopsis 简单概述

-文件的权限只要针对三类对象进行定义
owner:所属用户,u
group:所属组,g
other:其他,o
-每个文件针对每种访问用户都定义了三种权限
r:readable 写权限 针对可看的,二进制文件就不要设置这个权限
w:writeable 读权限
x:excutable 执行权限 文本文件也不需要执行,二进制的需要权限
-文件的权限
r:可使用文件查看类工具获取内容
w:可修改其内容
x:可以把次文件请求内核启动为一个二进制程序
-目录的权限
r:可以使用ls查看此目录中文件列表
w:可在此目录中创建文件,也可删除此目录中的文件
x:可以使用ls -l 查看此目录中文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限
-权限对应的数字
r:4 w:2 x:1
chown 选项] [owner]:[group] file / --reference=file file1
设置文件的所有者(change owner)
-R 递归
chgrp [选项] group file / --reference=file file1
设置文件的所属组信息(change group)
-R 递归
chmod 选项 octal-mode 八进制数字 file
-R 递归修改权限
chmod 选项 mode,[mode] file
Mode:
修改一类用户的所有权限:
u= g= o= ug= a= u= g=
修改一类用户某位或某些位权限
u+ u- g+ g- o+ o- a+ a- + -
chmod 选项 --reference=refile file
参考refile权限,将file权限修改成refile
who对谁操作 opt 你要做什么操作 per 授予什么权限 file文件 (修改文件权限)
who:u 所属者g所属组 o other a(all)
opt:+增加权限 -去掉权限 =赋予权限
per:r读w 写x执行 X特殊
umask 可以用来保留在创建文件权限

-文件权限注意点:

1.普通用户改所属组,一定要自己在组,不能改所属者
2.删除文件的权限不是文件决定的,而是目录决定的
3.目录是文件,内容存的就是文件列表
4.对于读写来讲,root是不受控制,但是执行权限不一样
没有执行权限所以不能删除
执行权限,如果root没有那就不能执行,除非root自己加上x权限
5.二进制的读权限不是必须的,但是file要看头部信息,所以还是要加的
6.普通用户无法更改用户所有者,删除是对于目录的写权限,普通用户更改所属组是需要自己在组里
7.对目录来讲,目录的读权限就是指看不到目录,但是可以看到里面文件的内容
8.对于目录来讲没有执行权限,不能查看文件详细属性,可以cd进去,可以从外部访问文件内容,rx 是目录最基本权限,目录的写权限可以删除文件,所以文件能否删除,取决于目录的写权限
9.想要几个文件跟一个文件一样的权限用–reference参考
10.file常用的 6 rw,4 r,0 ,1x
dir 常用的,7rwx,5r_x,0
11.程序要运行,必须目录要有执行权限,
chmod -R 777 dir1危险性不亚于rm -rf 星号 ,无法恢复
chown -R wang/ 带R递归的都很危险 谨慎操作!!
一般操作都是在测试环境测试几遍才去生成环境中执行的
12.系统出于安全考虑,默认文件是666,这样就算不出来执行权限,保证安全

–文件权限实例

[root@centos6 /data]#chmod a=r filea[root@centos6 /data]#ll filea-r--r--r--. 1 root root 0 Jan 24 20:49 filea[root@centos6 /data]#mkdir /data/git[root@centos6 /data]#chown -R git.git /data/git/chown: invalid user: `git.git'[root@centos6 /data]#chown -R alice.alice /data/git/   [root@centos6 /data]#chmod 700 /data/git[root@centos6 /data]#ll gittotal 0[root@centos6 /data]#ll -d gitdrwx------. 2 alice alice 4096 Jan 25 11:03 git

特殊文件权限 SUID ,SGID,Sticky

sysnopsis 简单概述

SUID,SGID,Sticky
三种常用权限:r,w,x user,group,other
前提:进程有属主和属组;文件有属主和属组
1.任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
2.启动为进程之后,其进程的属主为发起者,进程的属组为发起者的所属的组
3.进程访问文件时的权限,取决于进程的发起者
a.进程的发起者,同文件的属主:则应用文件属主权限
b.进程的发起者,属于文件属组;则应用文件属组权限
c.应用文件“其他”权限

-特殊文件权限注意点:

1.suid只适合应用在二进制可执行的程序上,作用在脚本和文本上是不起作用的
2.suid继承所有者的权限 suid=4
3.suid=4 sgid=2 sticky=1粘滞位
4.用户组里只能自己删除自己,sticky针对文件夹,针对文件无意义
5.具有写权限的目录通常用户可以删除目录中的任何文件,无论该文件的权限或拥有权
6.在目录设置sticky位,只有文件的所有者或root可以删除该文件
7.suid:继承二进制程序所有者的权限
8.sgid:继承二进制程序所有组的权限
作用于目录,此目录新建的文件继承目录的所属组
9.sticky:作用于目录,此目录的文件只能被所有者删除

-权限位映射:

SUID:user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID :group,占据属组的执行权限位
s:group拥有x权限
S:group没有x权限
Syticky:other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限

-权限位实例

[root@centos6 ~]#ll /bin/nano-rwsr-xr-x. 1 root root 178896 Nov 12  2010 /bin/nano[root@centos6 ~]#chmod 755 /bin/nano[root@centos6 ~]#ll /bin/nano       -rwxr-xr-x. 1 root root 178896 Nov 12  2010 /bin/nano[root@centos6 ~]#chmod 4755 /bin/nano[root@centos6 ~]#ll /bin/nano        -rwsr-xr-x. 1 root root 178896 Nov 12  2010 /bin/nano[root@centos6 ~]#chmod 755 /bin/nano

转换成alice普通用户账户操作nano,由于什么人都可以用nano修改文件了很危险,所以此类文件最好不使用SUID

[root@centos6 ~]#su - alice[alice@centos6 ~]$nano /etc/passwd  GNU nano 2.0.9               File: /etc/passwd                                     eeeroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin

设定文件特定属性 chattr lsattr setfacl getfacl

sysnopsis 简单概述

chattr +i 不能删除,改名 ,更改
chattr +a 只能追加内容
lsattr 显示特定属性

-使用场景:

1.需要追加,但是不能修改和删除 用chattr +a
2.chattr +A atime 读时间不可改变
3.linux只针对三类人,但是不如windows能添加地4类人以外的设置权限,所以有以下方法:
比如alice用户一个人不能看不能查不能删,就需要用到acl

-设定文件特定属性实例:

chattr + i

[root@centos6 /data]#chattr +i s[root@centos6 /data]#lltotal 4----------. 1 root root 2887 Jan 25 17:59 s[root@centos6 /data]#echo  abc>>s-bash: s: Permission denied[root@centos6 /data]#mv s ssmv: cannot move `s' to `ss': Operation not permitted[root@centos6 /data]#rm s rm: remove regular file `s'? yrm: cannot remove `s': Operation not permitted[root@centos6 /data]#lsattr s----i--------e- s

ACL:Access Control list ,实现灵活的权限管理

setfacl 选项:

-R递归
-M = --modify-file=file 从文件中读取设置
-X= --remove-file=file 从文件中读取删除设置
-d default默认新建文件有acl权限
-b =–remove-all 删除所有追加的acl设置
-m 修改当前文件的acl
-x 删除文件的acl设置

除了文件的所有者,所属组和其他人,可以对更多的用户设置权限

centos7默认创建的xfs和ext4文件系统具有ACL功能
centos7之前的版本,默认手工创建的ext4文件系统无ACL功能,需手动增加:

tune2fs -o  acl  /dev/sdb1mount -o acl /dev/sdb1           /mnt/test

ACL生效顺序:所有者,自定义用户,自定义组,其他人

设置alice用户一个人不能看不能查不能删,setfacl =set file acl -m modify u:针对用户 wang :0没权限 f1:

[root@centos6 /data]#touch f1[root@centos6 /data]#setfacl -m u:alice:0 f1[root@centos6 /data]#su - alice[alice@centos6 ~]$cat /data/f1cat: /data/f1: Permission denied[alice@centos6 ~]$su app1Password: su: incorrect password[app1@centos6 ~]$cat /data/f1

-ACL注意点:

1.用了acl 组的权限就不是传统的组权限而是mask权限
2.如果有mask那就不能超过mask定义的权限范围
3.主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息。
4.getfacl可看到特殊权限:flags
5.通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
6.base ACL 不能删除
7.mask只影响除所有者和other的之外的人和组的最大权限
·Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须在于mask权限设定范围才会生效
8.–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能像-m一样只是添加ACL就可以
如:setfacl --set u::rw,u:wang:rw,g::r,o::- file1

-ACL实例:

备份和回复ACL

[root@centos6 /data]#getfacl -R dir1 > acl.txt       复制设置信息到别的文件[root@centos6 /data]#setfacl -R -b /data/dir1       删除所有acl设置[root@centos6 /data]#setfacl -R --set-file=acl.txt /data/dir1     按照acl里的设置批量设置到dir[root@centos6 /data]#setfacl --restore acl.txt      刷新acl[root@centos6 /data]#getfacl -R /data/dir1      可以看到文件夹设置回复了getfacl: Removing leading '/' from absolute path names file: data/dir1 owner: root group: rootuser::rwxgroup::r-xother::r-x file: data/dir1/f1owner: root group: rootuser::rw-group::r--other::r--

文件管理综合实例

使用命令创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z

[root@centos6 /data]#mkdir -p  tmp/a{1{/a,/b},2}[root@centos6 /data]#mkdir tmp/{x,y}_{y,z}  [root@centos6 /data/tmp]#tree ../tmp../tmp├── a1│   ├── a│   └── b├── a2├── x_y├── x_z├── y_y└── y_z

查看文件的元数据信息有哪些,分别表示什么含义,修改文件的时间戳信息。

[root@centos6 /data]#stat f1 查看f1 文件信息  File: `f1'  Size: 0      大小         Blocks: 8          IO Block: 4096   regular empty file 常规空文件Device: 803h/2051d  设备     Inode: 12    节点编号      Links: 1 链接数Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root) 创建者信息Access: 2019-01-25 20:09:04.679997071 +0800  访问时间Modify: 2019-01-25 18:04:19.502000204 +0800  修改时间Change: 2019-01-25 18:04:22.858998987 +0800   创建时间[root@centos6 /data]#touch -t 201601200930 f1  修改atime和mtime 时间戳信息[root@centos6 /data]#stat f1  File: `f1'  Size: 0               Blocks: 8          IO Block: 4096   regular empty fileDevice: 803h/2051d      Inode: 12          Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2016-01-20 09:30:00.000000000 +0800Modify: 2016-01-20 09:30:00.000000000 +0800Change: 2019-01-25 21:17:37.127998705 +0800

在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

[root@centos6 /data]#touch  tfile-`date   +%F-%H-%M-%S`      [root@centos6 /data]#ls201601200930  acl.txt  dir1  f1  s  tfile-2019-01-25-21-27-09  tmp

复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

[root@centos6 /etc]#cp -a /etc/p*[^[:digit:]]     /tmp/mytest1

创建用户tom,指定UID为5001,指定家目录为/tmp/tom, 指定shell为/bin/zsh, 指定基本组为tom,附加组为jack。

[root@centos6 /data]#useradd  -u 5001  -d /tmp/tom  -s /bin/zsh -G jack  -U  tom

用户管理

sysnopsis 简单概述

linux用户:username/uid
管理员:root,0
普通用户:1-65535
系统用户:1-499,1-999(centos7)
对守护进程获取资源进行权限分配
登录用户:500+,1000+(centos7)
系统用户一般是服务进程 ,500+是centos6
/etc/passwd 文件格式

[root@centos6 /data]#cat /etc/passwd |grep root    root:x:0:0:root:/root:/bin/bash    operator:x:11:0:operator:/root:/sbin/nologin

login name 用户名 :passwd 密码 :UID 用户编号 :GID 组编号 :home directory 家目录:shell 用户默认使用的shell类型

/etc/shadow 文件格式

[root@centos6 /data]#cat /etc/shadow |grep root      root:$6$tL8GCRnu$HZnCB0zzzv8Hf5nVgp2BQc33J02mkPdIou9AsObhyXrUYSSkyeyfozsB6//xHy1oXT8yZ7mmftL.vM.qZDAdB1:17891:0:99999:7:::

用户名 :用户密码一般用sha512加密 :从1970年1月1日起到密码最近被更改的时间 :密码再过几天可以被变更 (0表示随时可被变更) :密码再过几天必须被变更(99999表示永不过期):密码过期前几天系统提醒用户(默认为以一周):密码过期几天后账号会被锁定:从1970年1月1日算起,多少天后账号失效

group组:groupname/GID

管理员组;root,0
普通组:
系统组:1-499,999(CENTOS7)
普通组:500+,1000(CENTOS7)
用户的主要组(primary group)
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户,私有组
用户的附加组(supplementary group)
一个用户可以属于零个或多个辅助组

/etc/group文件格式

[root@centos6 /etc/profile.d]#cat /etc/group tcpdump:x:72:opts:x:2009:xin,xixi

群组名称:群组密码(通常不需要设定,密码是被记录在/etc/gshadow):GID:以当前组为附加组的用户列表(分隔符为逗号)

-密码加密

加密机制:
明文->密文
密文->明文
单向加密:哈希算法,原文不同,密文必不同
相同算法定长输出,获得密文不可逆推出原始数据
雪崩效应:初始条件的微小改变,引起结果的巨大改变
md5:message digest ,128bits
sha1:secure hash algorithm ,160bits
sha224:224bits
sha256:256bits
sha384:384bits
sha512:512bits
更改加密算法 authconfig --passlgo =sha256 --update

-用户和组管理命令

useradd
usermod
userdel
groupadd
groupmod
groupdel
chfn 修改描述信息
chsh 修改用户shell类型
usermod 修改用户账号
chage 更改用户名密码到期信息 (interactive交互式)
passwd 更新用户的身份验证令牌
newgrp 相当于把什么当做主组 不在这个组需要输入口令,已经在并且为副组就不需要做口令
vipw 和vigr 会有语法报警 避免操作失误
pwck 和 grpck 验证密码文件的完整性
getent 可用从目录文件中找出符合条件的行

-用户创建配置目录

/etc/passwd
/etc/shadow
/etc/default/useradd 默认创建账号的哪些配置
/etc/login.defs 修改密码默认的到期信息
/etc/skel 家目录模版

-用户管理注意点:

1.windows里 net user 查看当前有多少用户,net user test 123 /add 加入用户 net localgroup 查看当前组
2.linux 默认私有组 一个账号创建给一个组
3.当用户运行程序时,这个程序是用用户身份来决定的 。能否访问由contxt 安全上下文决定(运行此程序的用户身份, 用户组身份)
4.一个用户有多个组,那权限是累加的
5.一个账号必须属于一个组,这个组叫主组
6.Linux用户和组的主要配置文件
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group: 组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
.bashrc 用户配置文件
7.pwunconv转换口令,查看加密密码
8.如果没有管理员账号,系统进入死循环,两个管理员的,登录的时候,取上一个名字
9.进程所能够访问资源 权限取决于进程的运行者的身份如:
root: /bin/nano
alice:/bin/nano
10.可以安装finger查询用户信息
11.cat /etc/login.defs 可以看到修改的文件,这文件可以看到用的加密算法

-创建用户文件默认文档 /etc/default/useradd:

[root@centos6 /etc/profile.d]#cat /etc/default/useradd GROUP=100    组HOME=/homeINACTIVE=-1    账号过期时候的宽限期  (-1等于不设置)EXPIRE=  账号的有效时间SHELL=/bin/bash   使用的shell命令SKEL=/etc/skel   模版目录CREATE_MAIL_SPOOL=yes   邮箱

-用户管理实例:

让用户登录立即更改口令 chage -d 0 =passwd -e

bob:/:17895:0:9900:7:::[root@centos6 /etc/profile.d]#passwd -e bobExpiring password for user bob.passwd: Success[root@centos6 /etc/profile.d]#grep bob /etc/shadowbob:/:0:0:9900:7:::

用户创建

sysnopsis 简单概述

useradd 选项 用户名
newusers 可用根据文件批量创建
chpasswd 可用根据情况批量修改密码

-useradd常用选项

-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 不创建家目录,用于非系统用户
-a 追加

-用户创建实例:

批量创建用户和修改密码

[root@centos6 /data]#echo -e "app1:x:2000:2000::/home/app1:/bin/bash\napp2:123456:2001:2002::/home/app2:/bin/bash\napp3:x:2003:2003::/home/app3:/binbash" >users.txt      [root@centos6 /data]#newusers users.txt   这些账号是没有口令的,可用批量修改口令    [root@centos6 /data]#echo -e "app1:123\napp2:xx\napp3:1232" >passwd.txt      [root@centos6 /data]#cat /data/passwd.txt |chpasswd    [root@centos6 /data]#getent   passwd app1    app1:x:2000:2000::/home/app1:/bin/bash    [root@centos6 /data]#getent   passwd app2    app2:x:2001:2002::/home/app2:/bin/bash    [root@centos6 /data]#getent   passwd app3    app3:x:2003:2003::/home/app3:/binbash

创建用户gentoo,附加组为bin 和root,默认shell为/bin/csh ,注释信息为"gentoo,distribution"

[root@centos6 /data]#useradd -G bin,root -s /bin/csh -c 'gentoo,distributionn' gentoo

用户附加组,一定要先创建组

groupadd webs      useradd -G "webs" nginxuseradd -r -s /sbin/nologin**

用户属性修改和删除

sysnopsis 简单概述

usermod [选项] 用户名
-u UID 新UID
-g GID 新主组
-G group,group1…新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-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 设定非活动期限

userdel 选项 用户名

-r 删除用户家目录

id [选项]…[用户]

-u 显示UID
-g 显示GID
-G 显示用户所属的组的id
-n 显示名称,需要配个ugG使用

-注意点:

1.默认不会删除家目录其他东西,var/spool/mail邮箱地址
2.工作中一般不要加r,说不定数据有用
3.id命令通常测试判断某个用户的信息,比如是否存在

-用户属性和删除实例:

用户追加组和取消附加组

[root@centos6 /data]#usermod -aG app3 app2[root@centos6 /data]#id app2uid=2001(memcachaed) gid=2002(app2) groups=2001(memcachaed),2003(app3)[root@centos6 /data]#usermod -G "" app2[root@centos6 /data]#id app2uid=2001(memcachaed) gid=2002(app2) groups=2001(memcachaed)

切换用户

sysnopsis 简单概述

su [选项…] [-] [user [args] ]
切换用户的方式:
su UserName:非登录时切换,既不会读取目标用户的配置文件,不改变当前工作目录
su - UserName :登录时切换,会读取目标用户的配置文件,切换至家目录,完全切换

-切换用户注意点:

1.root su至其他用户无须密码;非root用户切换时需要密码
2.有时候根据使用环境切换,不想退出当前目录工作的就用不完全切换
-l UserName 相当于su - UserName

-su 切换用户实例

换个身份执行命令,执行完再退回原来账号

[root@centos6 /data]#su app1 -c ls   passwd.txt  users.txt

设置用户密码

sysnopsis 简单概述

passwd [选项] 用户名:修改指定用户的密码
常用选项:
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强子操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
–stdin:从标准输入接收用户密码
echo “passwd” |passwd --stdin username

修改用户密码策略概述

chage [选项]… login
-d last_day
-E --expiredate EXPIRE_DATE
-I --inactive 无效时间
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-l 显示密码策略

-用户相关的其他命令:

chfn指定个人信息
chsh 指定shell
fingger
-修改密码策略实例:

chage -d 0 tom 下一次登录强制重设密码	chage -m 0 -M 42 -W 14 -I 7 tom     设置tom的密码策略为 最短密码有效时间0 (可以马上修改),最长密码有效时间为42天, 提前7天预警,账号有效时间过了还有7天可以使用	chage -E 2016-12-19 tom        tom账号到2016-12-19到达使用日期

创建组和组密码

sysnopsis 简单概述

groupadd [选项] …group_name 组名
-g GID:指明GID号;[GID_MIN,GID_MAX]
-r:创建系统组
centos6:id<500
centos7:id <1000

组属性修改:

groupmod [选项] …group
-n group_name: 新名字
-g GID :新的GID

组删除:groupdel

groupdel GROUP

更改组密码:

组密码:gpasswd
gpasswd [选项] group
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,…设置有管理权限的用户列表
newgrp命令:临时切换主组
如果用户本部属于此组,则需要组密码

更改和查看组成员

groupmems [选项] [action]
选项:
-g,–group groupname 更改为指定组(只有root)
actions:
-a,–add username 指定用户加入组
-d,–delete username 从组中删除用户
-p,–purge 从组中清楚所有成员
-l,–list 显示组成员列表
groups [选项].[username]… 查看用户所属组列表

–注意点:

1.不能删除主组,可以删附加组

-组管理实例

把用户alice 从g1组删除

[root@centos6 ~]#groupmems -a alice -g g1[root@centos6 ~]#id aliceuid=2005(alice) gid=2005(alice) groups=2005(alice),2006(g1)[root@centos6 ~]#groupmems -d alice -g g1[root@centos6 ~]#id aliceuid=2005(alice) gid=2005(alice) groups=2005(alice)

删除g1组

[root@centos6 ~]#groupdel g1

IO重定向

sysnopsis 简单概述	程序:指令+数据			读入数据:input			输出数据:output		打开的文件都有一个fd:file descriptor(文件描述符)		linux给程序提供三种I/O设备			标准输入(STDIN) -0 默认接受来自键盘的输入			标准输出(STDOUT) -1 默认输出到终端窗口			标准错误(STDERR)  -2 默认输出到终端窗口		I/O重定向:改变默认位置

-把输出和错误重新定向到文件:

命令 操作符号 文件名
支持的操作符号包括:
> 把STDOUT 重定向到文件
2> 把STDERR 重定向到文件
&> 把所有输出重定向到文件
> 文件内容会被改
set -C 禁止将内容覆盖已有文件,但可追加
> | file 强制覆盖
set +C 允许覆盖
>> 原有内容基础上,追加内容

-tr命令:翻译转换或删除字符

tr 转换和删除字符
tr [选项]…SET1 [SET2] set1 表示字符串
选项:
-c -C --complement :取字符集的补集
-d --delete:删除所有属于第一字符集的字符(删除set1的字符串,但是不转换)
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示(是如果有重复字符压缩成1个字符)
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符(是把set1 的长度跟set2一致)
-glob通配符:
[:alnum:]:字符和数字[:alpha:]:字母[:cntrl:]:控制(非打印)字符[:digit:]:数字
[:graph:]:图形字符[:lower:]:小写字母[:print:]:可打印字符[:punct:]:标点符号
[:space:]:空白字符[:upper:]:大写字母[:xdigit:]:十六进制字符

-从文件中导入STDIN

使用<来重定向标准输入
某些命令能够接受从文件中导入的STDIN
tr ‘a-z’ ‘A-Z’ </etc/issue
该命令会把/etc/issue 中的小写字符都转换成大写字符
tr -d abc </etc/fstab 删除fstab文件中的所有abc中任意字符
cat > file
xx1
xx2
按ctrl+d离开,可以使用文件来代替键盘的输入
Cat > filea <fileb
用这种命令可以方便处理文本中的符号,就是把文件内容改成linux格式

-把多行发送给STDIN

使用"<<任意终止词" 命令从键盘把多行重导向给STDIN
直到 '终止词’的位置所有文本都发送给STDIN
有时被称为就地文本(heretext)
mail -s “Please Call” <hi xxx,
>
>Please give me a call when you get in.We may need
>to do some maintenance on sever1.
>
>Details when you’re on-site
>alice
>end

-注意点:

1.指令是浮余数据
2.标准输出默认是当前的终端窗口
3.每打开文件就会有fd文件描述符
4.fd的0,1,2,255有特殊含义对应下面
std(stander ) in (input) stdout (output)
err (error)
5.标准错误和标准输出都是用当前终端窗口
6.标准输入输出可能以前版本有些不支持,建议写脚本这样
cmd &>all.log;cmd 2>&1;cmd >all.log 2&>1;cmd 2>all.log 1>&2

管道pipe

sysnopsis 简单概述

管道(使用符号“|”表示)用来连接命令
命令1|命令2|命令3|。。
将命令1的STDOUT发送给命令2 的STDIN,命令2的STDOUT发送给命令3 的STDIN
STDERR默认不能通过管道转发,可利用2>&1或|&实现
最后一个命令会在当前shell进程的子shell进程中执行用来
组合多种工具的功能:
如 ls|tr ‘a-z’ ‘A-Z’

-重定向到多个目标(tee)

命令1 |tee 【-a】文件名 |命令2
把命令1的STDOUT保存在文件中,做为命令2的输入
-a追加
使用:
保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出

-部分命令:

less:一页一页地查看输入 (less可以分页显示文件)
ls -l /etc | less
mail:通过电子邮件发送输入
echo “test email” |mail -s ‘test’
lpr:把输入发送给打印机
echo “test print” |lpr -p printer_name

-注意点:

1.管道要求前面的命令必须是标准输出
2.uname -r 内核版本 lsb_release -a系统版本
3.命令要放在反向单引号里

-管道实例:

将/home 里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,
将tar -cvf - /home 传送给后面的tar -xvf -,后面的这个-则是取前个命令的stdout,因此,
就不需要使用临时file了。(前后一致的名字就是。打包前是这个名字,解包也是这个名字,
所以就可以用-号代替)

[root@centos6 ~]#tar -cvf  - /home |tar -xvf -

只显示数字和空格

[root@centos6 /home]#echo 'ssjjsjff%#!n  2f/f fe 3  edklj'|tr -d [^[:alpha:]lnum:]^[:punct:]]  2  3

将文件etc/centos-release 中每个单词(由字母组成)显示在独立的一行,并无空行

[root@centos6 /home]#cat /etc/centos-release |tr ' ' '\n'CentOSrelease6.10(Final)

转载地址:http://kgzgn.baihongyu.com/

你可能感兴趣的文章
JAVA 中的IO流详解及其使用方法、例子
查看>>
PowerDesigner教程系列(一)概念数据模型
查看>>
PowerDesigner教程系列(二)概念数据模型
查看>>
从PowerDesigner概念设计模型(CDM)中的3种实体关系说起
查看>>
数据库建模工具:PowerDesigner与Rose详解教程
查看>>
C与C++在Linux下的集成问题
查看>>
ASP.NET中水晶报表的使用
查看>>
powerBuilder11做B/S结构程序
查看>>
合理利用HTML标记优化网页布局
查看>>
pb连接oracle问题
查看>>
.NET环境下水晶报表使用总结
查看>>
SQL Server 2000中查询表名
查看>>
查看 SQL Server 2000 数据表的大小并不难
查看>>
PHP命名大小写敏感规则
查看>>
php输出日志
查看>>
php输出日志
查看>>
一次springmvc+mybatis+log4j日志不输出SQL语句问题的排查经历
查看>>
关于ThreadLocal的浅谈
查看>>
java发邮件eclipse中测试没问题,部署到tomcat上收到的是乱码问题排查
查看>>
nginx配置https之后,https请求被调转到http问题
查看>>