第二周 Linux文件管理类命令及bash基本特性

第二周 Linux文件管理类命令及bash基本特性

摘要

1、描述Linux上的文件管理类命令并详解。
2、描述Bash的工作特性。
3、描述文件的元数据信息详解。
4、描述命令别名的使用。
5、详解文件通配符。

一、Linux上的文件管理类命令

[root@localhost etc]# ls -l
-rw-r--r--.  1 root root        0 1019 02:00 3axaxx
-rw-r--r--.  1 root root        0 1019 02:01 abcdefg
drwxr-xr-x.  3 root root       97 1015 17:51 abrt
lrwxrwxrwx.  1 root root       56 1015 17:51 favicon.png -> /usr/share/icons/hicolor
/16x16/apps/fedora-logo-icon.png
    Linux系统上的文件类型:
     - : 常规文件,即f 
     d :directory   即目录文件   
     b :block device   映射块设备文件  ,支持以"block"为单位,支持随机访问
     c: character device   字符设备文件,支持以“character”为单位,支持线性访问(有次序得访问)
           ls - l /dev      crw-rw----. 1 root video    10, 175 11月 10 15:48 agpgart
                major number   主设备号,用表示设备类型,进而确定要加载的驱动程序
                minor number 次设备号,用于表示同一类型中的不同设备
             二者用,来区分
      l: symbolic link  符号链接文件(类似windows的快捷方式,指向另一文件的路径。或称为软连接文件)
      p:pipe  命名管道
      s:socket 套接字文件,实现多个进程之间进行通信,多用于提供服务

二、bash的工作特性

1、bash的工作特性之命令执行状态返回值:
命令的执行状态结果 
    1) bash通过状态返回值来输出此结果
         成功:0            失败:1-255
       命令执行完成之后,其状态返回值保存于bash特殊变量 $? 中 。$?只能获取当前命令的结果
        [root@localhost etc]# echo $?
            0
      2)引用命令的执行结果:
           $(COMMAND) 或者 `COMMAND`
             [root@localhost etc]# mkdir $(date +%T) 
             [root@localhost etc]# ls 
                12:53:45                 hosts.allow               rc0.d
2、bash之history命令
命令历史:shell进程会在其会话中保存此用户提交执行过的命令
             ~]# history
                     定制history的功能,可通过环境变量实现
                         HISTSIZE  shell进程可控制命令历史的条数
                         HSITFILE   持久保存命令历史的文件      
                                 /]# cat /root/.bash_history           
                         HISTFILESIZE  查看命令历史文件的大小
                    -d  删除指定行数    history -d 304 5  从304条往下删除5条
                    -c  清空所有内存中的存储信息       history  -c
                    -r   从文件读取命令历史至历史列表(内存)中
                    -w  把历史列表中的命令追加到文件历史中
                    history #(数字)  显示最近的Number条命令
             调用 命令历史列表中的命令
                    !#  再次执行历史列表中的第#条命令
                    !!再次执行上条命令 
                    !STRING   再一次执行历史列表中最近一个以STRING开头的命令           
              调用上次命令的最后一个参数
                      快捷键 :ESC +  。  或者  符号组合  file + !$
              控制命令历史记录的方式
                      定义环境变量      
                           HISTCONITROL
                                ignoredups  忽略重复的命令   HISTCONITROL=ignoredups                                                                                   
                                ignorespace  忽略以空白字符开头的命令   HISTCONITROL=ignorespace                         
                                ignoreboth 以上两者同时生效
                           修改变量的值
                                   NAME='VALUE'    只对当前进程有效   
3、bash之命令补全:
 命令补全:
          shell程序在接收用户执行命令的请求后,分析完成后,最左侧的字符串会被当做命令;
           处理机制:
           查找内部命令   
           根据PATH环境变量中的设定的目录,自左而有逐个搜索目录下的文件名
           给定的打头字符串如果能唯一标示某命令程序文件,则直接补全,不能唯一标识某命令程序文件,则再点击tab键一次,会给出列表
           路径补全:
                在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每个文件;
                 tab : 如果是唯一标识则自动补全,如果不是,再次点击,给出列表
4、bash之命令引用:
 引用
      强引用   ‘ ’      
      弱引用   “ “   
      命令引用  ` ` 
5、bash之命令行快捷键
命令行快捷键
    ctrl+a   跳转至命令行首字段         
    ctrl+e   跳转至命令行尾字段
    ctrl+u   删除从命令行首到光标处所有字符
    ctrl+k   删除从光标所在处至行尾的所有字符
    ctrl+l 或者clear   清屏
6、I\O重定向及管道
  程序:指令+数据  或者   数据结构+算法
             程序:IO   
             程序的数据流有三种:
                  输入的数据流:<-- 标准输入(stdin) 键盘
                  输出的数据流:-->标准输出(stdout) 显示器
            fd:file descriptor   文件描述符
                   标准输入:0
                   标准输出:1
                   错误输出:2
  IO重定向:   改变标准位置
             输出重定向:  >
                    特性:覆盖输出重定向(危险操作!!!)
             输出追加重定向:  >>
                     特性:追加输出,保留原有内有,增加新的内容
                                  cat /var/a  >>  /tmp/a                              
                 # set -C   禁止覆盖输出重定向至已存在的文件 (该特性只对当前特性有效)
                  cat /etc/a  >|  /tmp/a    启用set -c的情况下,可以强制覆盖输出  >|
                 # set +C  关闭上述特性
               错误输出流重定向: 
                        2>    覆盖输出    2>>    追加输出
               合并正常输出流和错误输出流:
                             1) &>     &>>
                             2)COMMAND > /path/to/somefile  2>&1
                                COMMAND >> /path/to/somefile 2>&1
                       特殊设备: /dev/null
              输入重定向: <

 tr命令:
          tr [OPTION]... SET1 [SET2]
            把输入的数据当中的字符,凡是在set1定义范围内出现的,通通按位对应为set2出现的字符
               tman]# tr [a-z] [A-Z]  < /etc/abc
                           把abc中小写的全部换成大写
               tr -d '[0-9]'  <  /etc/abc     
                             把abc中含有0-9的全部删除掉
                 注意:不修改源文件
                <<   此处创建文档
                         cat /tmp/a << EOF    (EOF 为结束符)
                         cat  > /path/to/somefie << EOF
    管道:连接程序,实现将前一个命令的输出直接定向后一个程序当做输入数据流
          COMMAND1 | COMMAND2 | COMMAND3|...
tee:    cat  /etc/a | tee /tmp/a | tr -d 'a-z'
                  tee  保存上个输出流的记录,并可以指向下个输入流

 练习:    1)把./etc/passwd文件的前6行信息转换为大写字符输出
                   head -n 6 /etc/passwd | tr 'a-z' 'A-Z'           
7、基础命令:
1)cp:copy  文件复制功能
源文件:目标文件         
   单源复制     cp [OPTION]... [-T] SOURCE DEST
        如果dest路径不存在,则复制原内容,粘贴创建该目录dest内
        如果dest存在,1)dest是非目录文件,则会复制目标文件   2)dest是目录文件,则先在dest目录下创建一个与源文件同名的文件,并复制过来
    多源复制     cp [OPTION]... SOURCE... DIRECTORY
                    cp [OPTION]... -t DIRECTORY SOURCE...
                    如果dest不存在,返回错误
                    如果dest存在,分别复制每个文件到目标目录中,并保持原名
     常用选项:
                 -i  交互式复制  覆盖之前提醒客户确认
                 -f  强制性覆盖目标文件           
                 -r  递归复制目录  
                 -d  复制符号链接文件本身,而非其指向的源文件本身
                 --preserv=
                              mode   权限
                              ownership  属主和属组
                              timestamps  时间戳    
                              context  安全标签
                              links  符号链接
                              xattr:扩展属性
                              all  上述所有属性
                  -a   -dr --preserve=all    archive   用于实现归档,备份使用

2)mv: move 移动
     常用选项
                -i 交互式
                -f force           
3)rm:remove  删除文件(建议move到一个单独的文件夹,作用类似回收站)
                -i
                -r   删除命令,每个文件都会确认一遍
                -rf   强制删除           
                        危险操作,勿操作!!! rm-rf /或者rm  -rf /*
4)目录管理类的命令:
     mkdir , rmdir 
     mkdir          make  DIRECTORY 创建目录
            mkdir [OPTION]... DIRECTORY...
              注意:路径基名方为命令的作用对象,基名之前的路径必须存在。             
            -p   自动按需创建父目录
            -v   verbose   显示详细过程
            -m  MODE    直接给定权限    
         rmdir   rmdir [OPTION]... DIRECTORY...
                 删除文件下的空目录,如果删除为非空目录,则失败,需要先删除里面内容再删除外部
             -p   删除某目录后,如果其父目录为空,则一并删除之
             -v   显示过程
                             pwd:printing woking  directory     显示工作目录
5)cd: change directory      切换目录
         cd   [/PATH/TO/SOMENDIR]
            只输入 cd    切换回家目录
             bash中,~也表示家目录
                 cd ~   切换回自己的家目录
                 输入cd ~USERNAME ;切换至指定用户的家目录,只有管理员可以切换至其他用户家目录
                 cd -  在上一次所在目录与当前目录来回切换
                    $PWD:当前工作目录
                    $OLDPWD:上一次的工作目录
6)ls:list   列出指定目录下的内容                               
          ls [OPTION]... [FILE]...
               -a  显示所有文件,包括隐藏文件
               -A:显示除了。和。。之外的所有文件,包括隐藏文件
                         ls -A /etc
               -l     --long   长格式列表,显示文件的详细属性信息:
                         /]# ls -l /etc
                          -rw-r--r--.  1 root root    16 10月 10 14:35 adjtime
                     -r :文件类型,- ,d,b,c,l,s,p
                           -rw-r--r--.  
                             rw-    文件属主权限 
                             r--    文件属组权限
                             r--      其他用户(非属主、属组)的权限
                             1:数字表示文件被硬链接的次数,
                             root   第一个root   文件的属主
                             root   第二个root    文件的属组
                             16: 数字表示文件大小,单位是字节   
                             16 10月 10 14:35    文件最近一次修改时间
                             adjtime    文件名       
                     -h   对文件大小单位换算,换算后的结果非精确值
                     -ld  查看文件本身的信息,而非其自身内部的文件内容
                             /]# ls -ld /etc
                              drwxr-xr-x. 74 root root 8192 10月 12 02:24 /etc
                     -r或者-lr    对文件排序呈降序排序
                     -R    recursive   递归显示
7) cat:  concatenate file  连接文件   文件正序显示
               文本文件查看工具
               cat  /etc/fstab
               cat后可以跟多个路径文件
                     -n :显示的文件内容进行统一编号
                          cat -n [COMMAND] [COMMAND]
                     -E:显示行结束符$
8) tac    文本 逆序显示                        
                文本文件查看工具
                tac  /etc/fstab
                   tac后可以跟多个路径文件
                -n :显示的文件内容进行统一编号
                   tac -n [COMMAND] [COMMAND] 
                -E:显示行结束符$
9)file:查看文件内容类型
                 file  [FILE].................
10)echo :回显命令 
                echo [SHORT-OPTION]... [STRING]...
           STRING 可以使用引号,单引号和双引号均可用
           单引号:强引用,变量引用不执行替换
                 [root@localhost /]# echo '$SHELL'
                    $SHELL
           双引号:  弱引用,变量引用会被替换
                 [root@localhost /]# echo "$SHELL"
                     /bin/bash 
                 [root@localhost /]# echo "DAA"
                      DAA
            -n   输出后不自动换行操作
                 [root@localhost /]# echo  -n "DAA"
                      DAA[root@localhost /]# 
            -e   让转义符生效      \n显示换行   \t:制表符,类似增加新字段
                  [root@localhost /]# echo  -e "D \nAA"
                       D 
                       AA
11)tree 目录结构查看:
    -d:只显示目录
    -L level :指定显示的层及目录
    -P pattern :只显示指定pattern匹配到的路径

三、完成以下练习(1)

命令行展开
    ~ :自动展开为用户的家目录,或指定的用户的家目录
    { }:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
(1)创建/tmp目录下的:a_c, a_d, b_c, b_d
[root@localhost tmp]# mkdir -pv /tmp/{a,b}_{c,d}
                mkdir: 已创建目录 "/tmp/a_c"
                mkdir: 已创建目录 "/tmp/a_d"
                mkdir: 已创建目录 "/tmp/b_c"
                mkdir: 已创建目录 "/tmp/b_d"
[root@localhost tmp]# ls
                a_c  a_d  b_c  b_d  
创建/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 tmp]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,syscon
fig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lo_{ck,g},run}}
                mkdir: 已创建目录 "/tmp/mylinux"
                mkdir: 已创建目录 "/tmp/mylinux/bin"
                mkdir: 已创建目录 "/tmp/mylinux/boot"
                mkdir: 已创建目录 "/tmp/mylinux/boot/grub"
                mkdir: 已创建目录 "/tmp/mylinux/dev"
                mkdir: 已创建目录 "/tmp/mylinux/etc"
                mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d"
                mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d/init.d"
                mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig"
                mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig/network-scripts"
                mkdir: 已创建目录 "/tmp/mylinux/lib"
                mkdir: 已创建目录 "/tmp/mylinux/lib/modules"
                mkdir: 已创建目录 "/tmp/mylinux/lib64"
                mkdir: 已创建目录 "/tmp/mylinux/proc"
                mkdir: 已创建目录 "/tmp/mylinux/sbin"
                mkdir: 已创建目录 "/tmp/mylinux/sys"
                mkdir: 已创建目录 "/tmp/mylinux/tmp"
                mkdir: 已创建目录 "/tmp/mylinux/usr"
                mkdir: 已创建目录 "/tmp/mylinux/usr/local"
                mkdir: 已创建目录 "/tmp/mylinux/usr/local/bin"
                mkdir: 已创建目录 "/tmp/mylinux/usr/local/sbin"
                mkdir: 已创建目录 "/tmp/mylinux/var"
                mkdir: 已创建目录 "/tmp/mylinux/var/lo_ck"
                mkdir: 已创建目录 "/tmp/mylinux/var/lo_g"
                mkdir: 已创建目录 "/tmp/mylinux/var/run"
[root@localhost tmp]# cd mylinux/
[root@localhost mylinux]# ls
                bin  boot  dev  etc  lib  lib64  proc  sbin  sys  tmp  usr  var

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

1、文件的元数据
文件的元数据包括:名称,路径,大小,inode号,文件类型,硬链接数,权限,时间戳等
                stat [option] file…
file 文件名称
size 文件大小 单位K
blocks 所占块的个数
IO blocks 单块的大小
device 设备标识
inode 节点id,文件的元数据保存在磁盘上的inode区域中,每一个文件都有一个对应的inode号码
links 硬链接数,一个文件的硬链接数为N,表示该文件在磁盘上有N个与其对应的inode号码相同的文件
access 权限,文件的权限包括r(读),w(写),x(执行),suid,sgid,sbit这几种权限,它们可以分别对应到文件的属主、属组和其他人上
uid 属主信息
gid 属组信息
access 最后一次访问时间,文件被访问,即文件在使用cat, more, less, head等命令查看,或者cp等命令将其作为源文件复制给其他路径下,或者使用grep命令进行匹配查找等操作时,atime都会改变
modify 最后一次修改时间,指文件内容被修改时,mtime会改变
change 最后一次更正时间,指文件的元数据被改变,例如chmod, chown, mv等命令改变了文件权限名称路径等信息,ln命令增加了文件的硬链接等操作都会改变ctime
[root@localhost mylinux]# stat -L /tmp/mylinux/
  文件:"/tmp/mylinux/"
  大小:4096       块:8          IO 块:4096   目录
设备:fd00h/64768d Inode:202724745   硬链接:14
权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-11-29 14:28:11.973040042 +0800
最近更改:2017-11-29 14:28:02.480300238 +0800
最近改动:2017-11-29 14:28:02.480300238 +0800
创建时间:-
使用touch修改时间戳
用法:touch [选项]... 文件...
参数:
-a  只更改访问时间
-c, --no-create 不创建任何文件
-d, --date=字符串  使用指定字符串表示时间而非当前时间
-f          (忽略)
-h, --no-dereference        会影响符号链接本身,而非符号链接所指示的目的地
            (当系统支持更改符号链接的所有者时,此选项才有用)
-m      只更改修改时间
-r, --reference=FILE   use this file's times instead of current time
-t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time
--time=WORD        change the specified time:
                       WORD is access, atime, or use: equivalent to -a
                       WORD is modify or mtime: equivalent to -m
--help      显示此帮助信息并退出
--version       显示版本信息并退出
        请注意,-d 和-t 选项可接受不同的时间/日期格式。
[root@localhost mylinux]#  touch -m -t 021211221133.00  /tmp/mylinux/
[root@localhost mylinux]# stat -L /tmp/mylinux/
          文件:"/tmp/mylinux/"
          大小:4096       块:8          IO 块:4096   目录
        设备:fd00h/64768d Inode:202724745   硬链接:14
        权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
        环境:unconfined_u:object_r:user_tmp_t:s0
        最近访问:2017-11-29 16:13:38.263642314 +0800
        最近更改:0212-11-22 11:33:00.000000000 +0805
        最近改动:2017-11-29 16:14:10.970745835 +0800
        创建时间:-

五、命令的别名

 命令别名:
     获取所有可用别名的定义:
           ~]#alias
     定义别名 
            ~]#alias  NAME=‘COMMAND’   
     注意:只对当前shell进程设置有效
            /]# alias cls=clear
     撤销别名
           /]# cls
           ~]#unalias   NAME 
 which    
      显示文件完成路径 which - shows the full path of (shell) commands.
       which [options] [--] programname [...]
           ~]# which which
                alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
                /usr/bin/alias
                /usr/bin/which
         --COMMAND-alias   忽略别名

   whereis  
          显示文件的路径,手册页,
          -b  只看二进制文件路径
          -m 只看使用手册文件路径                      
    who 
           查看登录当前用户的相关信息
           -b  显示系统此次启动时间
           -d  显示此次死亡进程
            -l  显示登录进程
            -u 比who多显示端口号
            -r  运行级别
    w
           查看当前用户和其现阶段工作内容

六、详解文件通配符并完成以下练习

详解文件通配符
globbing :文件名通配
       匹配模式:元字符     
            *:匹配任意长度的任意字符
            ? :匹配任意单个字符
                   pa?   ??pa   p?a   p?a?
            [ ]: 匹配指定范围内的任意单个字符
            有几种特殊格式:
                    [a-z]  [A-Z] [0-9] [a-z0-9] [abcxyz]
                        pa[0-9][a-z]    pa2[0-9][0-9]
                    [[:upper:]]  只匹配大写字母
                    [[:lower:]]   只匹配小写字母
                    [[:alpha:]]   只匹配所有字母
                    [[:digit:]]     只匹配所有数字
                    [[:alnum:]]  只匹配所有字母和数字
                    [[:space:]]   所有空白字符  touch p \空格  a
                    [[:punct:]]    匹配所有符号
                    [^] :匹配指定范围外的单个字符(非!!)
                          [^[:upper:]]  
                          [^0-9]
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录
[root@localhost var]# ls -d l*[[:alnum:]] 
lib  local  local01  local02  lock  log
2、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[root@localhost var]# ls -d [0-9]*[^0-9]
0_abcc  0_bafaf  2_abcc  2_bafaf
3、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[root@localhost etc]# ls -d /etc/[^[:alpha:]][a-zA-Z]*
/etc/3axaxx  /etc/,avc23
4、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost etc]# touch /tmp/tfile-$(date +"%Y-%m-%d-%H-%M-%S")
[root@localhost etc]# ls /tmp
a_c  a_d  b_c  b_d  magedu1.com  mylinux  tfile-2017-11-29-18-08-27
5、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest2目录中。
[root@localhost mytest2]# cp -a /etc/p*[^[:digit:]] /tmp/mytest2/
[root@localhost mytest2]# ls
pam.d   passwd-  pki       pm      postfix  prelink.conf.d  profile    protocols
passwd  pinforc  plymouth  popt.d  ppp      printcap        profile.d
6、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest1目录中。
[root@localhost mytest2]# mkdir -pv /tmp/mytest1
mkdir: 已创建目录 "/tmp/mytest1"
[root@localhost ~]# cp -a /etc/*.d /tmp/mytest1
[root@localhost ~]# ls /tmp/mytest1
bash_completion.d  gdbinit.d     modules-load.d  rc1.d  rsyslog.d    usb_modeswitch.d
binfmt.d           grub.d        my.cnf.d        rc2.d  rwtab.d      xinetd.d
7、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中
[root@localhost ~]# mkdir -pv /tmp/mytest3
mkdir: 已创建目录 "/tmp/mytest3"
[root@localhost ~]# cp /etc/[lmn]*.conf /tmp/mytest3
[root@localhost ~]# ls  /tmp/mytest3
ld.so.conf     libuser.conf  logrotate.conf  mke2fs.conf  nsswitch.conf
libaudit.conf  locale.conf   man_db.conf     named.conf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值