系统相关
首页 > 系统相关> > Linux02(目录、文件、用户、用户组管理)

Linux02(目录、文件、用户、用户组管理)

作者:互联网

目录

rootfs:根文件系统

/boot:系统启动相关的文件,如内核、initrd,以及grub(bootloader)
/dev:设备文件
    设备文件:
    	块文件:随机访问,数据块
        字符设备:线性访问,按字符为单位
        设备号:主设备号(major)和次设备号(minor)
/etc:配置文件
/home:管理员的家目录
/lib:库文件
    静态库,.a
    动态库, .dll, .so(shared object)
    /lib/modules:内核模块文件
/media:挂在点目录,移动设备
/mnt:额外的临时文件系统
/opt:可选目录,第三方程序的安装目录
/proc:伪文件系统;当系统没启动时,该文件夹时空的,当系统启动时,这个文件夹显示的是内核的映射(映像)文件
/sys:伪文件系统;跟硬件设备相关的属性映射文件
/tmp:临时文件
/var:可变化的文件    
/bin:可执行文件,用户命令
/sbin:管理命令
# bin,sbin下是跟系统启动相关的命令
      
/usr(shared,read-only):全局的共享的只读文件
    /usr/bin
    /usr/sbin
    /usr/lib
    #  usr下bin、sbin在系统自身启动起来以后,为了提供一些基本功能应该具备的命令或者可执行程序

/usr/local:
    /usr/local/bin
    /usr/local/sbin
	/usr/local/lib

命名规则:
1.文件名长度不能超过255个字符;
2.不能使用/当文件名;
3.严格区分大小写;

相对路径
绝对路径

文件管理
目录管理
	ls
    cd
    pwd
    mkdir:创建空目录
        -p:多级目录
        -v:显示创建多级目录的创建信息
    	# mkdir -pv /root/m/n/l
        1.如何一句命令创建/mnt/test/x/m,y?
            方法一:mkdir -pv /mnt/test/x/m /mnt/test/y
            方法二:mkdir -pv /mnt/test/{x/m,y}
        2.如何在/mnt/test2下创建a_b,a_c,d_b,d_c文件夹?
        	(a+b)(c+d)=ab+ac+bc+bd
            {a,b}_{c,d}
            方法:mkdir -pv /mnt/test2/{a,b}_{c,d}
    rmdir (remove directory)  # 删除空目录
    
    # 文件的创建何删除
    1. touch # 本不是创建文件的命令,只是歪打正着了。
    touch 文件名
    	# eg:touch a
    2. nano 文件名
    	eg: nano abb
    在Linux下在同一个文件夹下不能创建同一个名字的文件或文件夹
    
    touch: # 它是改变文件的时间戳的命令
        touch -c c  # 表示不创建文件名为c的文件
        touch -a a.txt # chang only the access time,不指定时间,默认将a.txt文件的权限时间修改成当前时间。
        touch -m # chang onlu the modification time
        touch -m -t 201810181818 a.txt  # 表示将a.txt文件的modify时间改成指定的201810181818
    stat: # 查看文件属性信息:主要是看Access Modify Change三种状态下的时间戳 
        stat 文件名 
        	eg:stat a.txt
cp:
	# 一个文件到一个文件,多个文件到一个目录
    cp /etc/passwd /tmp 表示将etc下的passwd文件拷贝到tmp文件夹下,并且文件名还是passwd
    cp /etc/passwd /tmp/test  # 如果test不存在,表示将etc下的passwd文件拷贝到tmp下并重命名为test;如果test存在,1:如果test是个文件,则提醒我们是否要覆盖掉test文件;如果test是个目录,则将etc下的passwd拷贝到/tmp/test文件夹下,文件名仍是passwd。
    
    # 如果源文件是多个文件,则目标必须是个目录
    cp /etc/passwd /etc/issue /etc/inittab /tmp/abc  # 这里abc必须存在,且是一个目录。
    
    cp -a  # 是把原文件或文件夹原样打包一份,归档复制,常用于备份。
    cp -L  # 拷贝原文件或者文件夹连接所指向的文件或者文件夹
    cp -d  # 只拷贝源文件或文件夹链接
	# eg: cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp

mv: # 移动文件
	1. mv 源文件或目录 目标文件或目录
    # 如何将一个文件或目录重命名?
    mv abc mn  # 表示将当前目录下的abc文件重命名为mn,或者当前目录下的abc目录重命名位mn目录
  	
    # mv还有一种特殊用法!!!!!!!
   2.  mv -t 目标文件或目录 源文件或目录  # 加-t与1相反

install:
	-d DIRECTORY...:创建目录
    -m 指定修改文件的权限,不指定默认有执行权限
	install -d /tmp/install.1 /tmp/install.2 等同于 install -d /tmp/{install.1,install.2} # 可以用来创建目录,可以同时创建多个。类似mkdir
    install /etc/passwd /var/tmp/install.file # 表示将passwd文件拷贝到/var/tmp下,并重命名为install.file,但是install.file文件有了执行权限,可以通过-m指定权限。类似cp
    
    install -t DIRECTORY SRC...  # 表示将源文件或文件夹拷贝到DIRECRTORY中。类似cp

du: #  显示文件或目录所占用的磁盘空间。
    -h  输出文件系统分区使用的情况,例如:10KB,10MB,10GB等
    -s 显示文件或整个目录的大小,默认单位是KB
    
    du -sh # 显示当前目录的大小
    du -sh httpd  # 显示某个目录或文件的大小
    du -sh ./*  # 显示当前目录下所有文件的大小
    du -h --max-depth=1  # 查找占用空间最大的文件与目录

查看文件

1. cat 
	cat -n 文件名  # 显示文件的行号
	cat -E /etc/issue # 对于Linux系统而言,文本文件的行结束符是$符;而windows的文本行结束符是$+enter(回车)
2. tac 
	tac /etc/issue  # 将issue文本逆向显示,与cat显示文本的方式相反。
3. more  # 向后翻,向前翻到最后一行自动推出
4. less  # 向前翻,到最后一行不会退出,按q键推出
5. head 
	head -n 5 /etc/passwd # 指定显示文件的前5行,不指定行数,默认显示开头的10行
6. tail 
	tail -n -5 /etc/passwd # 指定显示文件的后5行,不指定行数,默认显示末尾的10行
    tail -f /tmp/hello.txt  # 显示hello文本的后 行内容,并且不会退出;此时如果有其它进程往这个文本末尾追加内容,等待显示新增加内容 

文本处理

# cut join sed awk
1. cut
	-d # 指定字段分隔符,不指定的话,默认是空格;
    -f # 指定要显示的字段  -f1:表示显示第一个字段 -f 1,3表示显示1和3字段  -f 1-3 表示显示1到3的字段
    eg:
         cut -d : -f1 /etc/passwd
		cut -d : -f 1,2 /etc/passwd
         cut -d : -f 1-3 /etc/passwd
2. join

文本排序

# sort
1. sort
    -n:数值排序
    -r:降序
    -t:字段分隔符
    -u:排序后相同的行只显示一次
    -f:排序时忽略字符大小写
        
	sort 文件名  # 按照ASCII码表对行进行升序排序
    sort -n 文件名  # 按照数字大小进行升序排序
    sort -r 文件名  # 按照ASCII码表对行进行逆序排序
    sort -r -n  # 按照数字大小进行降序排序
    sort -t: -k3 /etc/passwd  # 按照第3个字段,按照ascii码进行排序
    sort -t: -k3 -n /etc/passwd # 按照第3个字段,按照数值大小进行排序
    sort -n -u sort.test
    
    
2. uniq(report or omit repeated lines):# 报告相邻重复的行
	uniq 文件名 # 将文件中相邻重复的行删除一行
    uniq -d 文件名 # 只显示相邻重复的行,只显示重复行当中的一行
    uniq -D 文件名 # 显示相邻重复行中的所有行
    uniq -c 文件名 # 显示相邻每一行重复的次数

文本统计

wc(word count)
	-l:只显示行数
	-w:只显示单词数
	-m:只显示字符数
	-c:只显示字节数
	-L:表示最长的一行包含多少个字符
      

字符处理命令

tr:转换或删除字符
tr [OPTION]... SET1 [SET2]
	-d:删除出现在字符集中的所有字符
     tr -d 'ab'
    
tr 'ab' 'AB'
tr 'a-z' 'A-Z' < /etc/passwd # 将passwd文本中全部的小写字母转换成大写字母  <是重定向

bash及其特性

shell:外壳
    GUI:Gnome,KDE,Xfce
    CLI:sh(bsh),csh,ksh(商业化的产品,需要付费才能使用,后来分为社区版和商业版),bash(兼具csh,ksh,比sh更加强大),tcsh(增强版),zsh(功能更加强大,但是还不是很流行),在红帽系列和众多的发行版上使用的都是bash,所以学习bash是首选。
        
bash:
    1.命令历史
    	bash会自动记录执行的命令,会将使用的命令放入缓冲区。
        -c:清空命令历史
        -d OFFSET [n]:
        -w:保存命令历史至文件中
        -n:
        history -d 500 # 删除第500个命令
        history -d 500 10 # 从第500个命令开始,删除10个命令
        命令历史的使用技巧:
        	!n: 执行命令历史中的第n条命令
             !-n:执行命令历史的倒数第n条命令
             !!:执行上一条命令
             !string:执行命令历史中最近一个以指定字符串开头的命令
             !$:引用前一个命令的最后一个参数 # 方式1
             	# eg:nano !$  
             按下'ESC'键之后按'.',会自动弹出上一个变量;# 方式2
             ALT+.  # 方式3
             
             输入命令的开头字母,连续两次'tab键',将显示与该字母开头的所有命令。
    2.管道、重定向
    3.命令别名
    	alias 别名='COMMAND [options] [arguments]'
        在shell 中定义的别名仅在当前shell生命周期中有效:别名的有效范围仅为当前shell进程。
        	# eg: 
            	1. alias 查看系统中已命名的别名
                2. alias cls=clear
        取消别名:
        	unalias 别名
            	# eg: unalias cls
        如果重命名的别名与命令相同且别名后带有参数,想使用原命令,需要 \CMD
        
    4.命令行编辑
		光标跳转:
        	 ctrl+a:跳到命令行首
			ctrl+e:跳到命令行尾
             ctrl+u:删除光标至命令行首的内容
             ctrl+k:删除光标至命令行尾的内容
			ctrl+l:清屏
            
    5.命令行展开
    6.文件名统配:# 通过 man 7 glob 命令查看特殊字符的通配符
    	*:任意长度的任意字符
        ?: 任意单个字符,如果需要匹配指定个数的字符,就需要指定个数的'?'
        []: 匹配指定范围内的单个字符,eg:[abc],[a-m],[A-Z],[0-9],[a-zA-Z],[0-9a-zA-Z]
        [^]:匹配指定范围之外的任意单个字符,eg:ls [^0-9]*
        [:space:]: 空白字符
        [:punct:]: 所有的标点符号
        [:lower:]: 小写字母
        [:upper:]: 大写字母
        [:alpha:]: 大小写字母
        [:digit:]: 数字
        [:alnum:]: 数字和大小写字母
        # eg: 如何表示字母开头、字母结尾、中间有空格的文件?
        	[[:alpha:]]*[[:space:]]*[[:alpha:]]
    7.变量
    	环境变量:
        	PATH:命令搜索路径
            HISTSIZE:命令历史缓冲区大小
            SHELL:用于保存当前用户默认shell的
    8.编程
	9.命令替换: $(COMMAND),使用反引号也是一样的 `COMMAND`
    	把命令中某个子命令替换为其执行结果的过程。
        echo 'the current directory is $(pwd)'
        touch flie-$(date +%F-%H-%M-%S).txt
        touch flie-`date +%F-%H-%M-%S`.txt
        
        bash支持的引号有3种:
        	``:命令替换
             "":弱引用,可以实现变量的替换
             '':强引用,不完成变量的替换

用户、组、权限

# 权限:r、w、x
文件:
    r:可读,可以使用类似cat等命令查看文件内容;
    w:可写,可以编辑或删除此文件;
    x:可执行,executable,可以命令提示符下当作命令提交内核运行;
目录:
	r:可以对此目录执行ls以列出内部的所有文件;
    w:可以在此目录创建文件;
    x:可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;

        
用户:UID,/etc/passwd
组:GID,/etc/group
影子口令:
用户:/etc/shadow  # 用户密码的存放位置
组:/etc/gshadow  # 组密码实际存放位置

用户类别:
	管理员:# UID永远为0
    普通用户:1-65535
    	系统用户:1-499,
        一般用户:500-60000
用户组类别:
	管理员组:
    普通组:
    	系统组:
        一般组:
用户组类别:
	私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
    基本组:用户的默认组
    附加组,额外组:默认组以外的其它组
  
# 分析passwd文件下七个字段的所代表的含义
whatis passwd # 查看passwd有几个章节的慢文档
man 5 passwd # 第5个章节是对配置文件的说明

# /etc/passwd
account:登录名
password:密码  # 如果密码的位置是X,则x是一个占位符,密码真正的存放位置在shadow中
UID:
GID:基本组ID
comment:注释
HOME DIR:家目录
SHELL:用户的默认shell

# 分析shadow文件下七个字段的所代表的含义
 whatis shadow #  查看shadow有几个章节的慢文档
 man 5 shadow # 第5个章节是对配置文件的说明

# /etc/shadow
account:登录名
encrypted password:加密的密码
date of last password change: # 上一次修改密码的时间
minimum password age: # 最短使用天数
maximum password age:# 密码最长使用期限,99999天,表示永不过期
password warning period # 离过期之前的警告时间
password inactivity period: # 
account expiration date:
reserved field


# 查看当前系统中由哪些可用的shell
cat /etc/shells

cat /etc/shadow:

两个 !! 表示不让其登录,所以如果不想让某个用户登录可以在shadow文件中对应的用户加上两个“!!”

$6,表示一种加密方式,其中$1是MD5加密。

用户管理

创建用户和添加密码

useradd(或者adduser) 用户名 # 普通用户或者root用户都可以创建新用户,只不过普通用户没办法给新建用户添加登录的密码,这样用户就没办法登录,要想创建的账户可以登录,需要用root用户给这个用户添加密码。创建用户时,会在passwd,shadow,group,gshadow中分别增加一条记录,只有在给新建用户创建密码后,在shadow中用户的密码才从‘!!’变成加密的密码
passwd 用户名 # 给新建用户添加密码,连续两次输入密码。

useradd 
	-u UID 用户名
	-g GID 用户名  # 指定基本组
    -G GID,...  用户名  # 指定额外组(附加组)
    -c "COMMNET" 用户名  # 指定注释
    -d(directory) /path/to/somedirectory  # 创建用户时给用户指定家目录
    -s shell路径  用户名 # 给新建用户指定shell,最好是/etc/shells文件中已存在的shell
    -m -k   # 如果用户没有家目录,强制给用户创建家目录, -m和-k一般组合使用,在创建用户时,指定-k,会把/etc/skel下的.logout .bash_history .bashrc .bash_profile复制到用户的家目录中
    -M 用户名  # 创建用户,但不给其指定(创建)家目录(默认创建用户时,不指定家目录路径,就以用户名作为用户的家目录),这在 /etc/login.refs文件中都有配置说明,具体详细查看该文件。

image-20210312182959796

删除用户

# id 查看用户信息
id  # 显示当前用户的id信息
id 用户名 # 显示此用户的id信息
id -u  # 只显示用户的uid信息
id -G  # 只显示用户的gid信息
id -u -n  # 显示用户的用户名
id -G -n  # 显示用户的组名

# finger:查看用户账号信息
finger  # 查看当前用户信息
finger USERNAME # 查看指定用户信息
finger -l USERNAME@host # 查看远程用户信息

userdel [OPTION] USERNAME 
userdel 用户名  # 默认是不会删除这个用户的家目录的
		-r 用户名 # 同时删除用户的家目录
    


修改用户账号属性

usermod
	-u: # 修改用户的UID
	-g: # 修改用户的GID
	-a -G: # 不使用-a选项,会覆盖此前的附加组;使用-a则在原有的附加组基础之上追加新的附加组
	-c:
	-d: # 给用户指定新的家目录,通常和 -m一起使用,表示即给用户指定新的家目录,还给用户的家目录下的文件一起复制到新的家目录中。
	-s:  # 修改用户的shell
	-l:  # 修改用户的登录名
	-L(Lock):  # 锁定用户账号,锁定之后这个用户就不能登录了。
	-U(Unlock):  # 解锁账号

chsh(chageshell): # 修改用户的shell
    chsh 用户名
  
chfh(change finger): # 修改账户注释信息(/etc/passwd7个字段中的comment)
    chfh 用户名


用户密码管理

passwd 用户名
	--stdin #  接收标准输入的。Linux的哲学思想是:尽量避免与用户交互
	-l(lock):
	-u(unlock)
	-d(delete):# 删除用户密码,用户就不能登录了。

        
pwck: # 检查用户账号完整性

组管理

创建组

# cat /ect/group
用户组名:
用户密码:
GID:
以这个组为附加组的用户列表:

# 创建组
groupadd 组名 # 不指定组id,默认是从500以后的上一个组加1.
	-g GID

加密方法

对称加密:加密和解密使用同一个密码
公钥加密:每个密码成对儿出现,一个为私钥(secret key),一个为公钥(public key)
单项加密,散列加密(由明文到密文,不可解密):提取数据特征码,常用于数据完整性校验
	1. 雪崩效应 :初始条件微小改变,可能会引起结果的巨大变化(防止暴力破解)
    2. 定长输出
    	MD5:Message Digest:128位的定长输出
        SHA1:Secure Hash Algorithm(安全的hash算法),160位的定长输出。

设备管理
软件管理
进程管理
网络管理

命令小结:

目录管理:
ls/cd/pwd/mkdir/rmdir/tree
文件管理:
touch/stat/file/rm/cp/mv/nano

日期时间:
date/clock/hwclock/cal

文本处理:
cat/more/less/head/tail/cut/sort/uniq/grep

标签:文件,命令,Linux02,passwd,用户组,用户,etc,目录
来源: https://www.cnblogs.com/zhangchaocoming/p/14526884.html