zoukankan      html  css  js  c++  java
  • Linux基础命令之文件和目录操作(一)

    • pwd

        print working directory的缩写,作用是显示当前工作目录的绝对路径,一般进行频繁切换路径时使用。

        -L  显示逻辑路径(或略软链接文件),不常用。

        -P  显示物理路径,不常用。

        环境变量:PWD  功能等价于 pwd -L

    [root@mysql-141 etc]# cd /root
    [root@mysql-141 ~]# echo $PWD
    /root
    • cd

        change directory的缩写,作用是进行目录之间的切换。

        - (我是减号)    会调用环境变量OLDPWD的值,作用是切换到上一次所在的目录路径。

        ~(我是波浪线)    会调用环境标量HOME的值,用户家目录。作用是切换到用户家目录。

        ..  (我是两个小数点)  作用是切换到当前目录的上一级目录

        示例如下:

    [root@mysql-141 ~]# pwd               # 当前路径为家目录
    /root
    [root@mysql-141 ~]# cd /server/          # 切换到/server/目录下
    [root@mysql-141 server]# pwd
    /server
    [root@mysql-141 server]# cd ~            # 切换回家目录
    [root@mysql-141 ~]# pwd
    /root
    [root@mysql-141 ~]# cd -              # 切换到最近一次操作的文件路径
    /server
    [root@mysql-141 server]# pwd
    /server
    [root@mysql-141 server]# cd ..            # 切换到上一级目录,还一种是上N级目录,如cd ../../../../../..N/
    [root@mysql-141 /]# pwd
    /
    [root@mysql-141 /]# echo $HOME             # 输出环境变量家目录的路径     
    /root
    [root@mysql-141 /]# echo $OLDPWD                # 输出环境变量最近一次操作的文件路径
    /server

        相对路径:不是从根目录开始的路径,如,data/,tools/等。

        绝对路径:从根目录开始的文件路径,如,/root,/etc等,另,这个符号  "  /  "表示根。

        PS:这个命令熟悉了之后,可以在任意目录之间穿梭。

    • tree

        以树形结构列出指定目录下所有文件,子目录和子目录中的文件。

        -a      # all显示所有文件,包括隐藏文件(以“.”开头的文件)。

        -d      # directory,只显示目录。

        -L level   # 显示目录的最大层数,level为大于0的正整数。

        -f      # 显示文件的全路径。统计系统内软件包,可能会用到。          

        -i      # 不显示树枝,常与-f参数配合使用。

      # 先确认系统是否已经安装了此命令

    [root@mysql-141 ~]# rpm -qa tree  # 查询tree命令是否安装
      tree-1.5.3-3.el6.x86_64

     [root@mysql-141 ~]# yum -y install tree  # 如果上一条没有结果显示,使用此条命令进行安装

      # 字符集乱码问题解决

        1.命令行操作

          LANG=en_US.UTF-8

        2.编辑字符集文件

          vim /etc/sysconfig/i18n

    [root@mysql-141 ~]# cd ~      # 切换到家目录下
    [root@mysql-141 ~]# tree      # 不加参数情况下,会列出当前目录下的所有文件(除了隐藏文件)
    ├── anaconda-ks.cfg

    ├──
    install.log ├── install.log.syslog └── youhua.sh 0 directories, 4 files
    [root@mysql
    -141 ~]# tree -a    # 列出所有目录和文件,包括隐藏文件 . ├── anaconda-ks.cfg ├── .bash_history ├── .bash_logout ├── .bash_profile ....省略好几行... ├── .viminfo └── youhua.sh 2 directories, 12 files
    [root@mysql
    -141 ~]# tree -L 1 / # 在根目录下的一级子目录 / ├── application ├── backup ...省略好几行... ├── usr └── var 24 directories, 0 files
    [root@mysql
    -141 ~]# tree -d /etc/  # /etc/目录下所有子目录 /etc/ ├── dbus-1 │   ├── session.d │   └── system.d ├── default ├── hal │   └── fdi │   ├── information │   ├── policy │   └── preprobe
    ...省略好几行...   ├── ca-trust │   │   ├── extracted │   │   │   ├── java │   │   │   ├── openssl │   │   │   └── pem │   │   └── source │   │   ├── anchors │   │   └── blacklist └── yum.repos.d 191 directories
    [root@mysql
    -141 ~]# tree -L 1 -f /boot/    # 显示内容的完整路径 /boot ├── /boot/config-2.6.32-696.el6.x86_64 ├── /boot/efi ├── /boot/grub ├── /boot/initramfs-2.6.32-696.el6.x86_64.img ├── /boot/lost+found ├── /boot/symvers-2.6.32-696.el6.x86_64.gz ├── /boot/System.map-2.6.32-696.el6.x86_64 └── /boot/vmlinuz-2.6.32-696.el6.x86_64 3 directories, 5 files
    [root@mysql
    -141 ~]# tree -L 1 -fi /boot/   # 不显示枝杆信息 /boot /boot/config-2.6.32-696.el6.x86_64 /boot/efi /boot/grub /boot/initramfs-2.6.32-696.el6.x86_64.img /boot/lost+found /boot/symvers-2.6.32-696.el6.x86_64.gz /boot/System.map-2.6.32-696.el6.x86_64 /boot/vmlinuz-2.6.32-696.el6.x86_64 3 directories, 5 files
    • mkdir

        make directory的缩写,作用是创建目录,若要创建的目录已经存在,则会提示,不会继续创建。同时还可以创建多级目录。

        -p  # 递归创建目录,就是一级一级的去创建需要的目录。如果目录已经存在了,也不会进行告知。比较常用

        -m  # 设置新创建目录的默认目录对应的权限。

        -v  # 显示创建目录的过程

    [root@mysql-141 ~]# ls
    anaconda-ks.cfg  install.log  install.log.syslog  youhua.sh
    [root@mysql-141 ~]# mkdir data                        # 此时目录已经创建
    [root@mysql-141 ~]# mkdir data                        # 重新执行一遍,在不加参数p的情况下会报错
    mkdir: cannot create directory `data': File exists
    
    [

    root@mysql
    -141 ~]# mkdir oldboy/1/2/3                    # 不加参数p的情况下,创建多级目录会报错 mkdir: cannot create directory `oldboy/1/2/3': No such file or directory [root@mysql-141 ~]# mkdir oldboy/1/2/3 -p                  # 创建多级目录 [root@mysql-141 ~]# tree oldboy/                       # 查看下目录结构 oldboy/ └── 1 └── 2 └── 3 3 directories, 0 files

    [root@mysql
    -141 ~]# mkdir -pv test              # 显示目录文件创建过程 mkdir: created directory `test' [root@mysql-141 ~]# mkdir -pv test/1/2/3           # 显示多级目录创建过程,你会发现,目录是一级一级向下创建的 mkdir: created directory `test/1' mkdir: created directory `test/1/2' mkdir: created directory `test/1/2/3'
    [root@mysql
    -141 ~]# mkdir lipeng              # 创建一个目录 [root@mysql-141 ~]# ll drwxr-xr-x 2 root root 4096 Apr 2 11:40 lipeng    # 目录权限为755

    [root@mysql
    -141 ~]# mkdir -m 333 lipeng2          # 重新创建一个新目录,并制定目录权限为333 [root@mysql-141 ~]# ll drwxr-xr-x 2 root root 4096 Apr 2 11:40 lipeng d-wx-wx-wx 2 root root 4096 Apr 2 11:41 lipeng2    #创建出来的目录是333

    [root@mysql-141 ~]# mkdir /test/{A,B,C}/{1,2,3} -pv    # 创建多个目录,及其子目录。创建规则想象下数学中的乘法【 a*(1,2),a*( ,3) 】
    mkdir: created directory `/test'
    mkdir: created directory `/test/A'
    mkdir: created directory `/test/A/1'
    mkdir: created directory `/test/A/2'
    mkdir: created directory `/test/A/3'
    mkdir: created directory `/test/B'
    mkdir: created directory `/test/B/1'
    mkdir: created directory `/test/B/2'
    mkdir: created directory `/test/B/3'
    mkdir: created directory `/test/C'
    mkdir: created directory `/test/C/1'
    mkdir: created directory `/test/C/2'
    mkdir: created directory `/test/C/3'
    [root@mysql-141 ~]# tree /test/
    /test/
    ├── A
    │   ├── 1
    │   ├── 2
    │   └── 3
    ├── B
    │   ├── 1
    │   ├── 2
    │   └── 3
    └── C
    ├── 1
    ├── 2

    # 如果我们需要克隆上面的多级目录,假设一个测试环境,目录层级比上面的更多,该如何操作呢?

    [root@mysql-141 tmp]# cd /    # 切换到根目录下,使用相对路径
    [root@mysql-141 /]# tree -fid --noreport test>/tmp/test_directory.txt     # 将tree命令得到的内容重定向到临时文件/tmp/test_directory.txt中
    [root@mysql-141 /]# cat /tmp/test_directory.txt                  # 查看文件内容
    test
    test/A
    test/A/1
    ...省略好几行...
    test/C/3  
    [root@mysql-141 /]# cd tmp/                              # 切换到临时目录下
    [root@mysql-141 tmp]# mkdir -p `cat test_directory.txt`             # 将文件中的内容交给mkdir -p 这个命令来执行
    [root@mysql-141 tmp]# tree test                            # 查看执行结果 ,原来还可以这么玩。。  
    test
    ├── A
    │   ├── 1
    │   ├── 2
    │   └── 3
    ├── B
    │   ├── 1
    │   ├── 2
    │   └── 3
    └── C
    ├── 1
    ├── 2
    └── 3

    • touch

        主要有两个功能:

              一:创建新的内容为空的文件

              二:改变已有文件的时间戳属性

        -a        # 更改指定文件的最后访问时间

        -m         # 更改指定文件的最后修改时间

        -r  file       # 将指定文件的时间属性设置为与模板文件file的时间属性相同

        -t  STAMP     # 使用特定格式的时间设置文件的时间属性

                  【[CC]YY】MMDDhhmm[.ss],世纪,年,月,日,时,分,秒

    [root@mysql-141 test]# touch stu{01..05}
    [root@mysql-141 test]# ll
    total 0
    -rw-r--r-- 1 root root 0 Apr  2 20:52 stu01
    -rw-r--r-- 1 root root 0 Apr  2 20:52 stu02
    -rw-r--r-- 1 root root 0 Apr  2 20:52 stu03
    -rw-r--r-- 1 root root 0 Apr  2 20:52 stu04
    -rw-r--r-- 1 root root 0 Apr  2 20:52 stu05
    [root@mysql-141 test]# stat stu01        # stat命令用于查看文件状态信息
      File: `stu01'
      Size: 0             Blocks: 0          IO Block: 4096   regular empty file
    Device: 803h/2051d    Inode: 262164      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2019-04-02 20:52:02.334941194 +0800
    Modify: 2019-04-02 20:52:02.334941194 +0800
    Change: 2019-04-02 20:52:02.334941194 +0800
    

    [root@mysql
    -141 test]# touch -a stu01      # 修改用户访问时间,注意“ACCESS”行的时间变化

    [root@mysql
    -141 test]# stat stu01 File: `stu01' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 262164 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-04-02 20:53:14.349937753 +0800 Modify: 2019-04-02 20:52:02.334941194 +0800 Change: 2019-04-02 20:53:14.349937753 +0800
    [root@mysql
    -141 test]# touch -m stu01      # 更改最后修改的时间,注意“modify”行的时间变化 [root@mysql-141 test]# stat stu01 File: `stu01' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 262164 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-04-02 20:53:14.349937753 +0800 Modify: 2019-04-02 20:53:53.427947885 +0800 Change: 2019-04-02 20:53:53.427947885 +0800 [root@mysql-141 test]# ls -lh stu01 -rw-r--r-- 1 root root 0 Apr 2 20:53 stu01 [root@mysql-141 test]# touch -d 20200101 stu01  # 更改文件被创建的时间 [root@mysql-141 test]# ls -lh stu01 -rw-r--r-- 1 root root 0 Jan 1 2020 stu01
      [root@mysql-141 test]# touch -r stu02 stu01    # 使得stu01的时间属性与stu02保持一致 [root@mysql-141 test]# ll total 0 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu01 -rw-r--r-- 1 root root 0 Apr 2 20:52 stu02

      PS:Linux中三种时间戳类型

          Acess    # 最后访问文件的时间  atime  查看文件内容时悔改属性

          Modify    # 最后修改文件的时间  mtime 编辑文件内容时会改变属性

          Change   # 最后改变文件状态的时间  ctime  编辑文件,移动文件,改变文件属性

    • ls

        list directory contents,作用是列出目录或者文件的属性信息。与DOS系统和Linux系统中的dir命令类似。

        -l  # 长格式列出文件目录信息

        -a  # 显示目录下的所有文件,包括隐藏文件

        -t  # 根据最后修改时间mtime排序,默认是以文件名排序

        -r  # 倒序排列

        -d  # 列出目录本身,遇到符号链接,只显示目录

        -h  # 列出的信息可读性高

        -i  # 显示inode节点信息

        -A  # 列出除了隐藏文件.和.. 这两个目录之外的所有文件

        -F  # 查看文件结尾信息  / 目录结尾  @ 链接文件结尾  * 命令结尾,可执行的普通文件 = 套接字文件

    ps:通过ls命令可以查看文件的属性及权限,这里不进行一一列举,可以自行了解每一列的含义

    • cp

        copy缩写,作用是复制或覆盖文件或目录

        -a  # 等同于pdr这三个参数功能的总和

        -r  # 递归复制目录

        -p  # 复制文件时保持源文件的属性信息不变

        -d  # 若复制的源文件是符号链接,那仅复制符号链接本身,并保留指向的目标文件或目录

        -i  # 覆盖已有文件前提示用户确认

        -t  # 复制格式为 “cp 源文件 目标文件”,加上此参数后,“cp -t 目标文件,源文件”,此种用法,一般结合find命令+管道使用

      ps:针对cp命令的系统别名问题,可在命令行中开头采用转译符号(),来屏蔽系统别名。或者直接unalias取消别名功能

        快速备份备件:  cp a.txt{,.bak}

        # 此类命令慎用

    • mv

        move缩写,移动或重命名文件

        -f  # 若目标文件已存在,直接覆盖

        -i  # 若目标文件已存在,询问是否覆盖

        -n  # 不覆盖已经存在的文件

        -t  # 与cp命令功能一致

        # 此类命令慎用

        

    • rename

        

    • rm

        remove缩写,删除文件或目录

        -f  # 强制删除

        -i  # 删除前需要确认

        -r  # 递归删除目录及内容

        -I  # 在删除超过3个文件或者递归删除前要求确认请求

      ps:此条命令也是有别名的,并且是危险命令。尽量使用mv代替rm,不着急删除,先移动到/tmp目录下。

        删库命令:rm -rf /.* 或者 rm -rf /etc/* # 请忘掉此命令。。尽量不用通配符。

        文件被删除后,也会有恢复工具,前提是要学会未雨绸缪。

    • rmdir

        remove empty directory缩写,删除空目录,不为空时,命令不起作用。工作中用的极少

        -p  # 递归删除空目录

        -v  # 查看执行过程

      

    • ln

        make links between files,作用是创建文件的软硬连接

        格式:

          ln 选项 源文件或目录 目标文件或目录

          -s # 创建软连接

        软硬连接的区别及含义可自行了解。一般在发版时会采用符号连接进行秒级切换

        例如:

           ln -s /etc/hosts soft_link  # 为/etc/hosts创建soft_link.注意,soft_link这个文件不能事先存在。

      

  • 相关阅读:
    Uncaught TypeError: Cannot read property 'PRINT_INIT' of undefined user:100
    haproxy 负载elasticsearch 切换
    高德地图-展示多个信息窗口
    elasticsearh 中每个节点中需要有相同的插件
    haporxy 负载elasticsearch
    AngularJS之ng-if指令
    文件上传并展示上传文件
    json编解码
    Grok 正则捕获
    logstash date插件介绍
  • 原文地址:https://www.cnblogs.com/flashfish/p/10646004.html
Copyright © 2011-2022 走看看