文件及用户管理

文件及用户管理

一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
1. 目录管理类的命令:mkdir、rmdir

mkdir - make directories
mkdir [OPTION]... DIRECTORY...
option:
  • -p,--parents:自动创建父目录;
  • -v,--verbose:显示详细过程;
  • -m,--mode=MODE:创建目录并设置目录的权限;
  • --context[=CTX]:设置SELinux权限;
e.g.
  • 在/tmp目录下创建dirtmp/upload目录

    [root@node1 ~]# mkdir -v /tmp/dirtmp/upload
    mkdir: cannot create directory ‘/tmp/dirtmp/upload’: No such file or directory
    [root@node1 ~]# mkdir -pv /tmp/dirtmp/upload
    mkdir: created directory ‘/tmp/dirtmp’
    mkdir: created directory ‘/tmp/dirtmp/upload’

rmdir - remove empty directories
rmdir [OPTION]... DIRECTORY...
option:
  • -p:删除空目录,包括空的父目录;
  • -v: 显示详细过程;
e.g.
  • 删除/tmp/x/z/y目录,若父目录为空,也一并删除
    [root@node1 ~]# rmdir -pv /tmp/x/y/z/
    rmdir: removing directory, ‘/tmp/x/y/z/’
    rmdir: removing directory, ‘/tmp/x/y’
    rmdir: removing directory, ‘/tmp/x’
    rmdir: removing directory, ‘/tmp’
    rmdir: failed to remove directory ‘/tmp’: Directory not empty
    [root@node1 ~]# 

2. 文件查看类命令:cat, tac, head, tail, more, less、touch,stat
cat - concatenate files and print on the standard output
cat [OPTION]... [FILE]...
option:
  • -A, --show-all,-vET:显示所有符号;
  • -E, --show-ends:显示行结束符;
  • -n, --number:显示行号;
  • -T, --show-tabs:显示制表符;
  • -v, --show-nonprinting:显示非打印字符;
e.g.
  • 显示/etc/issue的所有符号和行号

    [root@node1 ~]# cat -An /etc/issue
         1  \S$
         2  Kernel \r on an \m$
         3  $
    [root@node1 ~]#

tac - concatenate and print files in reverse
tac [OPTION]... [FILE]...
e.g.
  • 显示/etc/issue的内容

    [root@node1 ~]# tac /etc/issue
    
    Kernel \r on an \m
    \S

head - output the first part of files
head [OPTION]... [FILE]...
option:
  • -c, --bytes=[-]K:显示指定的字节数;
  • -n, --lines=[-]K:显示的行数,-n 5可写成-5,默认为10行;
  • -q, --quiet, --silent:不打印文件名
  • -v, --verbose:打印文件名
e.g.
  • 显示/etc/passwd的前5行,并显示出文件名

    [root@node1 ~]# head -5 -v /etc/passwd
    ==> /etc/passwd <==
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    
  • 显示/etc/passwd的前20字节

    [root@node1 ~]# head -c 20 /etc/passwd
    root:x:0:0:root:/roo[root@node1 ~]# 

tail - output the last part of files
tail [OPTION]... [FILE]...
option:
  • -c, --bytes=K:显示指定的字节数;
  • -f, --follow[={name|descriptor}]:查看文件尾部内容且不退出;
  • -n, --lines=K:显示的行数,默认为10行;
  • -q, --quiet, --silent:不打印文件名
  • -v, --verbose:打印文件名
e.g.
  • 显示/etc/passwd的后5行,并显示出文件名

    [root@node1 ~]# tail -n 5 -v /etc/passwd
    ==> /etc/passwd <==
    polkitd:x:997:995:User for polkitd:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    zsjshao:x:1000:1000::/home/zsjshao:/bin/bash
    [root@node1 ~]# 
  • 显示/etc/passwd文件内容不退出(Ctrl+c退出)

    [root@node1 ~]# tail -f /tmp/test 
    test line
    new line

more - file perusal filter for crt viewing
more [options] file [...]
option:
  • +/string :查找指定字符并显示向后的行;
  • +number:打开文件并从number行向后显示;
e.g.
  • 使用more命令从第15行开始显示/etc/passwd文件内容;

    [root@node1 ~]# more +15 /etc/passwd
    systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
    systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:997:995:User for polkitd:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    zsjshao:x:1000:1000::/home/zsjshao:/bin/bash
    [root@node1 ~]#

less - opposite of more
less [option] [filename]...
翻屏:
  • 空格键:向文件尾翻一屏;
  • b: 向文件首部翻一屏;
  • Ctrl+d:向文件尾部翻半屏;
  • Ctrl+u:向文件首部翻半屏;
  • 回车键:向文件尾部翻一行;
  • k: 向文件首部翻一行;
  • G:跳转至最后一行;
  • #G: 跳转至指定行;
  • 1G:跳转至文件首部;
文本搜索:
  • /keyword:从文件首部向文件尾部依次查找;不区分字符大小写;
  • ?keyword:从文件尾部向文件首部依次查找;
  • n: 与查找命令方向相同;
  • N: 与查找命令方向相反;
退出:
  • q: quit
e.g.
  • 使用less命令查看/etc/init.d/functions文件

    [root@node1 ~]# less /etc/init.d/functions
    # -*-Shell-script-*-
    #
    # functions     This file contains functions to be used by most or all
    #               shell scripts in the /etc/init.d directory.
    #
    
    TEXTDOMAIN=initscripts
    ...

stat - display file or file system status
stat [OPTION]... FILE...
e.g.
  • 查看/etc/issue的文件属性信息

    [root@node1 ~]# stat /etc/issue
      File: ‘/etc/issue’
      Size: 23              Blocks: 8          IO Block: 4096   regular file
    Device: fd00h/64768d    Inode: 67109017    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: system_u:object_r:etc_t:s0
    Access: 2019-03-31 12:20:00.000000000 +0800
    Modify: 2015-12-09 17:59:15.000000000 +0800
    Change: 2019-03-31 22:24:34.701000000 +0800
     Birth: -
    [root@node1 ~]# 

touch - change file timestamps
touch [OPTION]... FILE...
option:
  • -c, --no-create:不创建空文件;
  • -t STAMP:[[CC]YY]MMDDhhmm[.ss]
  • -r, --reference=FILE:参考给定的文件设置时间戳
  • -a:仅修改访问时间(Access time)
  • -m:仅修改修改时间(Modify time)
e.g.
  • 仅修改/etc/issue的访问时间为3月31日12点20分

    [root@node1 ~]# touch -a -t 03311220 /etc/issue

3. 文件管理工具:cp、mv、rm
cp - copy files and directories
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
单源复制
  • cp [OPTION]... [-T] SOURCE DEST
  • 如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;
  • 如果DEST存在:
    • 如果DEST是非目录文件:则覆盖目标文件;
    • 如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;
多源复制
  • cp [OPTION]... SOURCE... DIRECTORY
  • cp [OPTION]... -t DIRECTORY SOURCE...
  • 如果DEST不存在:错误;
  • 如果DEST存在:
    • 如果DEST是非目录文件:错误;
    • 如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;
option:
  • -a, --archive,-dR --preserve=all:归档;
  • -d,--no-dereference --preserve=links:复制符号链接本身,而非源文件;
  • -f, --force:强制执行;
  • -i, --interactive:交互模式;
  • -L, --dereference:复制源文件;
  • -p,--preserve=mode,ownership,timestamps:保留权限、属主属组、时间戳
  • --preserve[=ATTR_LIST]:要保留的属性:mode(权限),ownership(属主属组),timestamps(时间戳),context(安全标签),links(符号链接),xattr(扩展属性),all(所有属性);
  • -R, -r, --recursive:递归复制目录
e.g.
  • 复制/etc/fstab到/tmp/目录下并重命名为fstab.tmp且保留文件的权限、属主属组、时间戳属性;

    [root@node1 ~]# cp -p /etc/fstab /tmp/fstab.tmp
  • 复制/etc目录到tmp目录并保留所有属性

    [root@node1 ~]# cp -a /etc /tmp

二、bash基础特性:命令行展开
~:自动展开为用户的家目录,或指定的用户的家目录;
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;
e.g.
  • 使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z

    [root@node1 ~]# mkdir -pv /tmp/{a1/{a,b},a2} /tmp/{x,q}_{y,z}
    mkdir: created directory ‘/tmp/a1’
    mkdir: created directory ‘/tmp/a1/a’
    mkdir: created directory ‘/tmp/a1/b’
    mkdir: created directory ‘/tmp/a2’
    mkdir: created directory ‘/tmp/x_y’
    mkdir: created directory ‘/tmp/x_z’
    mkdir: created directory ‘/tmp/q_y’
    mkdir: created directory ‘/tmp/q_z’
    [root@node1 ~]# 

三、文件元数据
  • 文件的元数据有:File、Size、Blocks、IO Block、regular file、Device、Inode、Links、Access、Uid、Gid、Context、Access time、Modify time、Change time、Birth等信息
  • stat命令可查看文件元数据信息
  • touch命令可修改文件的时间戳
e.g.
  • 查看anaconda-ks.cfg的元数据信息

    [root@node1 ~]# stat anaconda-ks.cfg 
      File: ‘anaconda-ks.cfg’
      Size: 942             Blocks: 8          IO Block: 4096   regular file
    Device: fd00h/64768d    Inode: 135128483   Links: 1
    Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:admin_home_t:s0
    Access: 2019-03-31 23:28:37.364000000 +0800
    Modify: 2019-03-31 23:29:06.057000000 +0800
    Change: 2019-03-31 23:29:06.057000000 +0800
     Birth: -
    [root@node1 ~]#
  • 修改文件的access time

    [root@node1 ~]# touch -a anaconda-ks.cfg
  • 修改文件的Modify time

    [root@node1 ~]# touch -m anaconda-ks.cfg 

四、命令引用
引用命令的执行结果
$(COMMAND)
COMMAND
e.g.
  • 在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

    [root@node1 ~]# touch tfile-$(date '+%F-%H-%M-%S')

五、globbing
文件名通配(整体文件名匹配,而非部分)
匹配模式:元字符
*:匹配任意长度的任意字符
?:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
  • 有几种特殊格式:
  • [a-z], [A-Z], [0-9], [a-z0-9]
  • [[:upper:]]:所有大写字母
  • [[:lower:]]:所有小写字母
  • [[:alpha:]]:所有字母
  • [[:digit:]]:所有数字
  • [[:alnum:]]:所有的字母和数字
  • [[:space:]]:所有空白字符
  • [[:punct:]]:所有标点符号
[^]:匹配指定范围外的任意单个字符
  • [^[:upper:]]
  • [^0-9]
  • [^[:alnum:]]
e.g.
  • 复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

    [root@node1 ~]# mkdir /tmp/mytest1
    [root@node1 ~]# cp -r /etc/p*[^0-9] /tmp/mytest1
    [root@node1 ~]# tree -L 1 /tmp/mytest1
    /tmp/mytest1
    ├── pam.d
    ├── passwd
    ├── passwd-
    ├── pki
    ├── plymouth
    ├── pm
    ├── popt.d
    ├── postfix
    ├── ppp
    ├── prelink.conf.d
    ├── printcap
    ├── profile
    ├── profile.d
    ├── protocols
    └── python
    
    10 directories, 5 files
    [root@node1 ~]# 

六、用户和组管理
创建组:groupadd
groupadd - create a new group
groupadd [options] group
option:
  • -g GID:指定GID;默认是上一个组的GID+1;
  • -r: 创建系统组;
e.g.
  • 创建jack组

    [root@node1 ~]# groupadd jack

修改组:groupmod
groupmod - modify a group definition on the system
groupmod [options] GROUP
option:
  • -g GID:修改GID;
  • -n new_name:修改组名;
e.g.
  • 将jack组的GID设置为5010,并将jack更名为jacker

    [root@node1 ~]# groupmod -g 5010 -n jacker jack

删除组:groupdel
groupdel - delete a group
groupdel [options] GROUP
e.g.
  • 删除jacker组

    [root@node1 ~]# groupdel jacker

用户创建:useradd
useradd - create a new user or update default new user information
useradd [options] LOGIN
option:
  • -c, --comment COMMENT:注释信息;
  • -d, --home-dir HOME_DIR:用户家目录;
  • -D, --defaults:创建用户的一些属性信息;
  • -e, --expiredate EXPIRE_DATE:过期时间;
  • -f, --inactive INACTIVE:非活动时间;
  • -g, --gid GROUP:基本组,组得预先存在;
  • -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:附加组,用逗号分隔;
  • -k, --skel SKEL_DIR:从指定的目录复制初始配置文件;
  • -m, --create-home:创建家目录;
  • -M, --no-create-home:不创建家目录;
  • -r, --system:系统用户;
  • -s, --shell SHELL:用户默认shell;
  • -u, --uid UID:指定UID;
e.g.
  • 创建用户tom,指定UID为5001,指定家目录为/tmp/tom, 指定shell为/bin/zsh,指定基本组为tom,附加组为jack

    [root@node1 ~]# useradd -u 5001 -d /tmp/tom -s /bin/zsh -G jack tom

修改用户属性:usermode
usermod - modify a user account
usermod [options] LOGIN
option:
  • -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;
  • -e, --expiredate EXPIRE_DATE:修改过期时间;
  • -f, --inactive INACTIVE:修改非活动时间;
  • -L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
  • -U, --unlock:解锁用户的密码;
e.g.
  • 修改用户tom的UID为5002,登录名为jack,shell为/bin/bash

    [root@node1 ~]# usermod -u 5002 -s /bin/bash -l jack tom

删除用户:userdel
userdel - delete a user account and related files
userdel [options] LOGIN
option:
  • -r, --remove:删除用户时将家目录、邮箱也删除
e.g.
  • 删除jack用户并将家目录、邮箱也删除

    [root@node1 ~]# userdel -r jack

切换用户:su
su - run a command with substitute user and group ID
su [options...] [-] [user [args...]]
option:
  • -, -l, --login:切换至指定用户;
  • -c command, --command=command:以指定用户的身份执行command命令;
e.g.
  • 仅以zsjshao用户的身份执行whoami命令;

    [root@node1 ~]# su - zsjshao -c 'whoami'
    zsjshao
    [root@node1 ~]# 
  • 切换到zsjshao用户,并执行whoami命令

    [root@node1 ~]# su - zsjshao -c 'whoami'
    zsjshao
    [root@node1 ~]# su - zsjshao
    Last login: Mon Apr  1 00:28:07 CST 2019 on pts/0
    [zsjshao@node1 ~]$ whoami
    zsjshao
    [zsjshao@node1 ~]$

查看用户id:id
id - print real and effective user and group IDs
id [OPTION]... [USER]
option:
  • -u: 仅显示有效的UID;
  • -g: 仅显示用户的基本组ID;
  • -G:仅显示用户所属的所有组的ID;
  • -n: 显示名字而非ID;
e.g.
  • 查看root用户的uid

    [root@node1 ~]# id -u root
    0
    [root@node1 ~]# 
    修改用户密码:passwd
    passwd - update user's authentication tokens
    passwd [option] [username]
option:
  • -l, -u:锁定和解锁用户;
  • -d:清除用户密码串;
  • -e DATE: 过期期限,日期;
  • -i DAYS:非活动期限;
  • -n DAYS:密码的最短使用期限;
  • -x DAYS:密码的最长使用期限;
  • -w DAYS:警告期限;
  • --stdin:从标准输入(管道)获取新密码;
e.g.
  • 使用echo命令给passwd命令传递密码zsjshao用来修改root用户的密码

    [root@node1 ~]# echo "zsjshao" | passwd --stdin root
    Changing password for user root.
    passwd: all authentication tokens updated successfully.

转载于:https://blog.51cto.com/zengshao/2372109

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值