; 第二周总结(文件操作命令、用户及组权限管理、BASH命令行展开与执行命令返回值、命令别名使用、执行结果引用、通配符使用) | Linux运维部落

第二周总结(文件操作命令、用户及组权限管理、BASH命令行展开与执行命令返回值、命令别名使用、执行结果引用、通配符使用)

1、常见文件管理命令分类

        1)文件内容查看(cat、tca、more、less、head、tail)

        2)文件字符替换(tr、sed、awk等)

        3)文件创建、移动、复制和删除(touch、mv、cp、scp、rm)

        4)文件权限修改(chown,chmod,chgrp)

        5)文件元数据查看和文件属性(stat、file)

        6)文件查找(find、locate)

     文件内容查看

        cat 

            使用方式:cat <file1>[file2…]

        查看文件内容全文

[root@localhost ~]# cat anaconda-ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable

        tac 

            使用方式:tac <file1>[file2…]

        查看文件内容全文(逆向显示)

[root@localhost ~]# tac anaconda-ks.cfg 
%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

kexec-tools
@core

    more

        more <file1>[file2…]

       以当前终端大小为单位显示文件内容。如果当前终端不能全部显示,则显示第一页内容,使用空格键进行翻页,q键退出。

[root@localhost ~]# more anaconda-ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto
network  --hostname=localhost.localdomain

# Root password
rootpw --iscrypted $6$KI37O.HrF6QsdogV$FarNU1T5m7MJU7AZL66Dsr8YtEBmj9YeXYg8.lbUWAIo0osZcfGNgO7KiKyTRboAbHGNuA42EKfJ2s66hHIR30
# System timezone
timezone America/New_York --isUtc
--More--(68%)

    less

           less <file1>[file2…]       

            以当前终端大小为单位显示文件内容。如果当前终端不能全部显示,则显示第一页内容,使用空格键进行翻页,可使用方向键进行上下进行行级翻动、使用Pageup,PageDown按键进行页面翻动,q键退出。

[root@localhost ~]# less anaconda-ks.cfg 


#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto
network  --hostname=localhost.localdomain

# Root password
rootpw --iscrypted $6$KI37O.HrF6QsdogV$FarNU1T5m7MJU7AZL66Dsr8YtEBmj9YeXYg8.lbUWAIo0osZcfGNgO7KiKyTRboAbHGNuA42EKfJ2s66hHIR30
# System timezone
timezone America/New_York --isUtc
:

    head 

            head [-n] <file1>  

              显示文件的前几行,不加参数默认显示头10行,-n参数指定显示n行。

[root@localhost ~]# head anaconda-ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
# Keyboard layouts

    tail

            tail [-n|f] <file1>  

                

              显示文件的后几行,不加参数默认显示后10行,-n参数指定显示n行,-f显示后10行后不退出持续显示新增加的内容。

[root@localhost ~]# tail anaconda-ks.cfg 
%packages
@^minimal
@core
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

    文件字符替换(tr、sed、awk等)

    tr

        tr [option] [set1] [set2]

            option

                -c或–complerment 取代所有不属于第一字符集([set1])的字符

                -d或–delete 删除所有属于第一字符集([set1])的字符

                -s或–squeeze-repeats 把连续重复的字符单独一个字符表示

                -t或–truncate-set1 先删除第一字符集比第二符集多出的字符

                   不加参数时,使用第二字符集中的字符替代第一字符集中的字符使用较多的是 [a-z] [A-Z] 替换文本中的字母的大小写

            注:tr 命令不能直接操作文件故需要将文件内容读取后通过管道 | 或者使用输入重定向 < 输出给tr命令,tr命令也不会直接修改原文件。

            特殊字符集

                [:space:]  所有空白字符

                [:alnum:]:字母和数字

                [:alpha:]:字母 (包含大小写)

                [:cntrl:]:控制(非打印)字符 

                [:digit:]:数字 

                [:graph:]:图形字符 

                [:lower:]:小写字母 

                [:print:]:可打印字符 

                [:punct:]:标点符号 

                [:space:]:空白字符 

                [:upper:]:大写字母 

                [:xdigit:]:十六进制字符

    示例1:删除anaconda-ks.cfs中的字母

[root@localhost ~]# tr -d [:alpha:] < anaconda-ks.cfg 
#=
#   
 -- --=512
#    

#   

#       
 --
#  
 --= --=''
#  
 _.-8

#  
  --= --=16777736 --= --6=

示例2 将anaconda-ks.cfs中的字母替换成大写

root@localhost ~]# tr [a-z] [A-Z] < anaconda-ks.cfg 
#VERSION=DEVEL
# SYSTEM AUTHORIZATION INFORMATION
AUTH --ENABLESHADOW --PASSALGO=SHA512
# USE CDROM INSTALLATION MEDIA
CDROM
# USE GRAPHICAL INSTALL
GRAPHICAL
# RUN THE SETUP AGENT ON FIRST BOOT
FIRSTBOOT --ENABLE
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8

# NETWORK INFORMATION
NETWORK  --BOOTPROTO=DHCP --DEVICE=ENO16777736 --ONBOOT=OFF --IPV6=AUTO
NETWORK  --HOSTNAME=LOCALHOST.LOCALDOMAIN

# ROOT PASSWORD
ROOTPW --ISCRYPTED $6$KI37O.HRF6QSDOGV$FARNU1T5M7MJU7AZL66DSR8YTEBMJ9YEXYG8.LBUWAIO0OSZCFGNGO7KIKYTRBOABHGNUA42EKFJ2S66HHIR30
# SYSTEM TIMEZONE
TIMEZONE AMERICA/NEW_YORK --ISUTC
# SYSTEM BOOTLOADER CONFIGURATION
BOOTLOADER --APPEND=" CRASHKERNEL=AUTO" --LOCATION=MBR --BOOT-DRIVE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --NONE --INITLABEL

%PACKAGES
@^MINIMAL
@CORE
KEXEC-TOOLS

%END

%ADDON COM_REDHAT_KDUMP --ENABLE --RESERVE-MB='AUTO'

%END
123123

    sed命令和awk命令使用比较复杂,在此不提。

    文件创建、移动、复制和删除

        文件创建

                touch [option] <filename1> [filename2] 

                    创建一个普通的空文件

                option    

                    -a 修改文件的change time

                    -m 修改文件的modify time

                    -d或–date=STRING 创建时文件使用字符串指定的时间而非当前时间

                    -r或–reference=FILE 创建文件时使用引用文件的时间而非当前时间

                    -t  STAMP  或–time=WORD 使用指定时间而非当前时间

        示例1 创建文件 123.txt

[root@localhost ~]# touch 123.txt 
[root@localhost ~]# ll 123.txt 
-rw-r--r-- 1 root root 0 Jan 30 18:17 123.txt

        示例2 修改文件的change time

[root@localhost ~]# stat 123.txt 
  File: ‘123.txt’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 68046578    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-01-30 18:17:01.353846432 -0500
Modify: 2017-01-30 18:17:01.353846432 -0500
Change: 2017-01-30 18:17:01.353846432 -0500
 Birth: -
[root@localhost ~]# touch 123.txt 
[root@localhost ~]# stat 123.txt 
  File: ‘123.txt’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 68046578    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-01-30 18:18:10.357844376 -0500
Modify: 2017-01-30 18:18:10.357844376 -0500
Change: 2017-01-30 18:18:10.357844376 -0500
 Birth: -

        文件移动

    mv

        mv [option] file1 file2

                    移动file1 到file2位置,在同一目录使用mv时是重命名效果,如移动的到的目录有同名文件将会覆盖已有文件。

            option

                -i 移动时如果有同名文件提示是否覆盖(默认选项)

                -f 移动时如果有同名文件直接覆盖

    实例:

[root@localhost ~]# mv anaconda-ks.cfg /usr/local/
[root@localhost ~]# ls /usr/local/
anaconda-ks.cfg  bin  etc  games  include  lib  lib64  libexec  sbin  share  src

    文件删除

  rm

    rm [option] <filename>[filename_n]

        删除单个、多个文件或目录。

    option(常用)

        -r 递归删除

        -f 强制删除

示例:删除文件anaconda-ks.cfg.1

[root@localhost ~]# ls
anaconda-ks.cfg  anaconda-ks.cfg.1
[root@localhost ~]# rm -rf anaconda-ks.cfg.1
[root@localhost ~]# ls 
anaconda-ks.cfg

文件复制

    cp

       cp [option] file1 file2

    复制文件或目录,如果复制到的目录有同名文件将会覆盖掉该文件   

        option(常用)

        -i  覆盖前提示是否覆盖(默认选项)

        -f  强制覆盖没有提示信息

        -R|r 递归复制目录

        -d 复制符号链接本身而非符号链接指向的源文件

        -p 复制时同时复制源文件的权限

示例:复制文件anaconda-ks.cfg为anaconda-ks.cfg.1

[root@localhost ~]# cp anaconda-ks.cfg anaconda-ks.cfg.1
[root@localhost ~]# ls
anaconda-ks.cfg  anaconda-ks.cfg.1

    scp

        scp [option]  file1 username@address:/path/file2 

       跨系统复制文件或目录

            option

            -r 递归复制目录

[root@localhost ~]# scp anaconda-ks.cfg root@192.168.241.10:/root/anaconda-ks.cfg.1
The authenticity of host '192.168.241.10 (192.168.241.10)' can't be established.
ECDSA key fingerprint is 64:d4:58:c7:00:70:f0:98:2d:76:9c:fb:ed:ef:5c:6f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.241.10' (ECDSA) to the list of known hosts.
root@192.168.241.10's password: 
Permission denied, please try again.
root@192.168.241.10's password: 
anaconda-ks.cfg

文件权限修改

    linux系统中相对于文件有三种身份分别是 文件属主,文件属组和其他(既不是文件属主也不是文件属组)

修改文件的属主

    chown [option] username[:groupname] file

            option

                   -R 递归处理目录下的所有目录或文件 

          示例:修改文件 anaconda-ks.cfg的属主为ftp

[root@localhost ~]# chown ftp anaconda-ks.cfg
[root@localhost ~]# ll 
总用量 8
-rw-------. 1 ftp  root 1116 11月  1 22:58 anaconda-ks.cfg

修改文件的属组

  

    chgrp [option] groupname file

            option

                   -R 递归处理目录下的所有目录或文件 

          示例1:修改文件 anaconda-ks.cfg的属组为ftp

[root@localhost ~]# chgrp ftp anaconda-ks.cfg
[root@localhost ~]# ll 
总用量 8
-rw-------. 1 ftp  ftp  1116 11月  1 22:58 anaconda-ks.cfg

          示例2:修改文件 anaconda-ks.cfg的属组为ftp

[root@localhost ~]# chown :ftp anaconda-ks.cfg
[root@localhost ~]# ll 
总用量 8
-rw-------. 1 ftp  ftp  1116 11月  1 22:58 anaconda-ks.cfg

   linux系统中有3种权限读(r) 、写 (w)、执行(x),这三种权限转换成8进制对应的数字为 4  2 1

    文件的权限修改

            chown

               chown [option] MODE file1

                        修改文件的属主,属组,或其他权限

                option

                    -r 递归修改

示例:修改文件 anaconda-ks.cfg属组权限为读写执行

[root@localhost ~]# ll 
总用量 8
-rw-------. 1 ftp  ftp  1116 11月  1 22:58 anaconda-ks.cfg
-rw-------. 1 root root 1116 12月  6 20:52 anaconda-ks.cfg.1
[root@localhost ~]# chmod g+rwx anaconda-ks.cfg
[root@localhost ~]# ll 
总用量 8
-rw-rwx---. 1 ftp  ftp  1116 11月  1 22:58 anaconda-ks.cfg

文件元数据查看和文件属性

    stat

        stat [option] file

            查看文件的元数据

                option

                        -f 查看文件在文件系统中的信息

示例:显示文件anaconda-ks.cfg的文件所在文件系统信息和元数据信息

[root@localhost ~]# stat -f anaconda-ks.cfg
  文件:"anaconda-ks.cfg"
    ID:80300000000 文件名长度:255     类型:xfs
块大小:4096       基本块大小:4096
    块:总计:4926720    空闲:4686159    可用:4686159
Inodes: 总计:19717120   空闲:19689072
[root@localhost ~]# stat anaconda-ks.cfg
  文件:"anaconda-ks.cfg"
  大小:1116      	块:8          IO 块:4096   普通文件
设备:803h/2051d	Inode:67404352    硬链接:1
权限:(0670/-rw-rwx---)  Uid:(   14/     ftp)   Gid:(   50/     ftp)
环境:system_u:object_r:admin_home_t:s0
最近访问:2016-12-06 20:36:13.086316361 +0800
最近更改:2016-11-01 22:58:52.158040304 +0800
最近改动:2016-12-06 21:26:25.225548862 +0800
创建时间:-

    file

        file [option] filename

        查看文件属性类型

        option

        -L 查看软连接文件对应的源文件类型

示例:查看文件anconda-ks.cfg

[root@localhost ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text

文件查找

    locate

        locate [option] pattern

            基于 /var/lib/slocate/slocate.db内的数据查找系统中的匹配关键字的文件或目录(使用update命令可更新该数据库)

            option

                -b 只查找基名匹配的文件或目录

    示例:查找文件名中包含anac的文件或目录

[root@localhost ~]# locate -b anac
/etc/anacrontab
/etc/cron.hourly/0anacron
/etc/selinux/targeted/modules/active/modules/anaconda.pp
/root/anaconda-ks.cfg
/usr/sbin/anacron
/usr/share/anaconda

    find

        find [options] [查找起始路径] [查找条件]  [找到后的操作]

        实时查找当前系统中匹配的文件或目录(此命令较为复杂,此刻只做简单示范)

  示例:查找文件名中包含anac的文件或目录    

[root@localhost ~]# find / -name anac*
/root/anaconda-ks.cfg

命令执行返回值

    linux中命令执行后的状态返回值保存在bash的$?变量中,可在命令执行后执行echo $? 命令来查看该值。    

        示例,查看上一个命令的命令执行返回值

[root@localhost ~]# find / -name anac*
/root/anaconda-ks.cfg
[root@localhost ~]# echo $?
0

                该值为0 命令执行成功

                            1 命名执行错误

                            127 命令不存在

命令行展开

    linux命令行中可使用{}对列表进行承载,并将其展开为多个路径

        示例1:创建/tmp目录下的:a_c, a_d, b_c, b_d

[root@localhost ~]# mkdir /tmp/{a,c}_{b,d}
[root@localhost ~]# ls /tmp/
a_b  a_d  c_b  c_d

       示例2 :创建/tmp/mylinux目录下的:

    mylinux/
        ├── bin
        ├── boot
        │   └── grub
        ├── dev
        ├── etc
        │   ├── rc.d
        │   │   └── init.d
        │   └── sysconfig
        │       └── network-scripts
        ├── lib
        │   └── modules
        ├── lib64
        ├── proc
        ├── sbin
        ├── sys
        ├── tmp
        ├── usr
        │   └── local
        │       ├── bin
        │       └── sbin
        └── var
            ├── lock
            ├── log
            └── run

[root@localhost ~]# mkdir -p /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,user/local/{bin,sbin},var/{lock,log,run}}
[root@localhost ~]# tree /tmp/mylinux/
/tmp/mylinux/
├── bin
├── boot
│   └── grub
├── dev
├── etc
│   ├── rc.d
│   │   └── init.d
│   └── sysconfig
│       └── network-scripts
├── lib
│   └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── user
│   └── local
│       ├── bin
│       └── sbin
└── var
    ├── lock
    ├── log
    └── run

命令别名使用

        alias

                linux中可使用alias定义一个命令的别名,常用来讲一个复杂命名用一个简单别名的方式进行使用,此方法定义的别名只在当前shell中生效,如果需要在全局或者重启服务器依然生效需要将该命令声明为环境变量并写入/etc/bashrc 中。

        alias new_name='command option'

   示例:给命令 ls -al 定义一个别名 lsl

[root@localhost ~]# alias lsl='ls -ll'
[root@localhost ~]# lsl
total 28
-rwxr-xr-x  1 root root  271 Dec 24 11:18 1.sh
-rw-r--r--  1 root root   72 Dec 24 12:00 2.sh
-rw-r--r--  1 root root   90 Dec 24 12:08 3.sh
-rw-r--r--  1 root root    0 Feb  1 15:54 4
-rwxr-xr-x  1 root root  135 Dec 24 12:22 4.sh
-rw-------. 1 root root  932 Oct 27 18:30 anaconda-ks.cfg
-rw-r--r--  1 root root  465 Dec 24 12:19 fstab
-rw-r--r--  1 root root 1040 Dec 24 12:19 passwd1

命令执行结果引用

    linux中有两种方式可直接引用命令执行结果

        1、 在反引号中执行命令 `command`

        2、$(command)

    示例:显示当前用户家目录的文件

[root@localhost ~]# echo `ls`
1.sh 2.sh 3.sh 4 4.sh anaconda-ks.cfg fstab passwd1
[root@localhost ~]# echo $(ls)
1.sh 2.sh 3.sh 4 4.sh anaconda-ks.cfg fstab passwd1

linux系统中的时间

    date

        用于显示当前系统的时间

        date "+option"

        option   

            %Y : 完整年份 (0000-9999)

            %m : 月份 (01-12)

            %d : 日 (01-31)

            %H : 小时(00-23)

            %M : 分钟(00-59)

            %T : 直接显示时间 (24 小时制)

            %S : 秒(00-60)

            %s : 时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数)

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

[root@localhost ~]# touch /tmp/tfile-$(date "+%Y-%m-%d-%H-%M-%S")
[root@localhost ~]# ls /tmp/
 tfile-2017-02-01-16-59-50

bash中的特殊符号

        linux中有一些特殊符号在使用中有特殊意义

            *   通配符,代表任意字符(0到多个)

            ?   通配符,代表一个字符

            #   注释

            /   跳转符号,将特殊字符或通配符还原成一般符号

            |   分隔两个管线命令的界定

            ;    连续性命令的界定

            ~    用户的根目录

            $    变量前需要加的变量值

            !    逻辑运算中的"非"(not)

            /    路径分隔符号

            >, >>   输出导向,分别为"取代"与"累加"

            '   单引号,不具有变量置换功能

            "   双引号,具有变量置换功能

            `   quote符号,两个“中间为可以先执行的指令

            ()   中间为子shell的起始与结束

            []   中间为字符组合

                [:space:]  所有空白字符

                [:alnum:]:字母和数字

                [:alpha:]:字母 (包含大小写)

                [:cntrl:]:控制(非打印)字符 

                [:digit:]:数字 

                [:graph:]:图形字符 

                [:lower:]:小写字母 

                [:print:]:可打印字符 

                [:punct:]:标点符号 

                [:space:]:空白字符 

                [:upper:]:大写字母 

                [:xdigit:]:十六进制字符

            [^]  对中间字符组合取反

            {}   中间为命令区块组合

示例1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。

ls -d /var/l*[[:digit:]]*[[:lower:]]
/var/l2a

示例2:显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。

[root@localhost ~]# ls /etc/[0-9]*[^0-9] 
/etc/12d

示例3:显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。

[root@localhost ~]# ls /etc/[^[:alpha:]][[:alpha:]]*
/etc/5a2345  /etc/5awww

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

[root@localhost ~]# cp -a /etc/p*[^[:digit:]] /tmp/mytest1/
[root@localhost ~]# ls /tmp/mytest1/
pam.d  passwd  passwd-  pki  plymouth  pm  popt.d  postfix  ppp  prelink.conf.d  printcap  profile  profile.d  protocols  python

示例5:复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录

[root@localhost ~]# cp -a /etc/*.d /tmp/mytest2
[root@localhost ~]# ls /tmp/mytest2
bash_completion.d  depmod.d       init.d        modules-load.d  prelink.conf.d  rc2.d  rc6.d      statetab.d  xinetd.d
binfmt.d           dnsmasq.d      ld.so.conf.d  my.cnf.d        profile.d       rc3.d  rc.d       sudoers.d   yum.repos.d
chkconfig.d        dracut.conf.d  logrotate.d   pam.d           rc0.d           rc4.d  rsyslog.d  sysctl.d
cron.d             grub.d         modprobe.d    popt.d          rc1.d           rc5.d  rwtab.d    tmpfiles.d

示例6:复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

[root@localhost ~]# cp -a /etc/[l,m,n]*.conf /tmp/mytest3
[root@localhost ~]# ls /tmp/mytest3
ld.so.conf  libaudit.conf  libuser.conf  locale.conf  logrotate.conf  man_db.conf  mke2fs.conf  nsswitch.conf

原创文章,作者:胡安慧,如若转载,请注明出处:http://www.178linux.com/67294

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班