02.Linux系统基础命令-目录结构

发布于 2020-03-13  156 次阅读


  1. 系统目录结构

    几乎所有的计算机操作系统都是用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树的分支, 所以该结构又被称为"目录树"

    Linux系统中也沿用了这种文件结构, 所有目录和文件都在 "根目录", 目录名为"/"FHS(文件系统层次标准)定义了在根目录下的主要目录以及每个目录应该存放什么文件。


    /etc 系统重要配置文件, 以及常用服务配置文件

    /var
    存放系统引导启动时产生的可变文件,文件通常动态更改的,例如: 缓存目录,日志文件

    /run 系统启动后, 运行的程序产生的运行时数据, 包括进程的pid文件,锁文件等

    /home 普通用户的主目录, 普通用户的家目录默认为/HOME/USERNAME

    /root 超级管理员的主目录, 普通用户无权操作

    /tmp 存放临时文件, 一般存放超过10天以上都会自动删除,可以更改删除临时文件的期限

    /boot 存放系统引导时候需要的文件

    /dev 存放设备文件

    /usr 安装的软件, 共享库, 重要的子目录有

    /usr/bin 用户命令目录

    /usr/sbin 管理员命令目录

    /usr/local 本地自定义安装的软件

     

    //注意:Linux7系统中, /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下,例如:

    /bin --> /usr/bin

    /sbin --> /usr/sbin

    lib -> usr/lib

    lib64 -> usr/lib64

  2. 文件路径定位

    路径的作用:定位文件具体位置信息
    你要在那里创建什么文件?
    你要将什么文件复制到什么地方?
    你要删除的文件在什么地方?


    1.特殊目录: (.)(..)
    在每个目录下, 都会固定存在两个特殊目录, 分别是一个点(.)和两个(..)的目录。一个点代表当的是当前目录, 两个点代表的是当前目录的上层目录。注意: Linux下所有以点开始的文件都是"隐藏文件", 对于这类文件, 只使用命令ls -l是看不到的, 必须要使用ls -la才可以看到,如下所示:

    [root@lxgyw ~]# cd /opt/

    [root@lxgyw opt]# ls

    [root@lxgyw opt]# ls -a

    . ..

    2.绝对路径:

    Linux系统采用了目录树的文件组织结构, Linux下每个目录或文件都可以从根目录处开始寻找, 比如/usr/bin目录。这种从根目录开始的全路径被称为"绝对路径", 绝对路径一定是以 "/" 开头的。

    如何确认当前所在的目录, 可以使用pwd命令查看:

    [root@lxgyw ~]# pwd

    /root

    3.相对路径
    相对路径, 关键点在于当前在什么路径下。假设当前目录在/usr/local, 那么它的上层目录(/usr目录)可以用../表示, `/usr/local的下层目录(src)则可以用./src表示。所谓的(.)(..)目录实际上也是属于相对路径

    //进入/opt目录

    [root@lxgyw ~]# cd /opt/

    [root@lxgyw opt]# ls -la

    total 76

    drwxr-xr-x. 2 root root 69632 Dec 4
    11:00 . #
    代表当前目录

    dr-xr-xr-x. 33 root root 4096 Dec 4
    10:40 .. #
    代表上层目录

     

    //进入当前目录

    [root@lxgyw opt]# cd .

    //显示当前目录

    [root@lxgyw opt]# pwd

    /opt

     

    //进入当前目录的上层目录

    [root@lxgyw opt]# cd ..

    //进入上层目录,也就是/目录

    [root@lxgyw /]# pwd

    /

    cd命令常见用法:

    . 表示用户所处的当前目录

    .. 表示上级目录;

    ~ 表示当前用户自己的家目录

     

     

    cd - //切换上次所在目录

    cd ~ //切换至当前用户家目录

    cd //切换至当前用户家目录

    cd . //.代表当前目录,一般在拷贝、移动等情况下使用

    cd .. //切换至当前目录的上级目录

  3. 目录管理命令

    1.目录创建命令mkdir

    # mkdir dir1

    # mkdir /home/lxgyw/dir1 /home/lxgyw/dir2

    # mkdir /home/lxgyw/{dir4,dir5} -v

    # mkdir /home/lxgyw/dir6/dir6-1 -pv

    2.以树状显示目录结构命令tree

    -L: 显示目录树的层级

     

    //显示当前目录下的结构

    # tree

     

    //显示一级目录

    # tree -L 1 /

  4. 文件管理命令

    Linux一切皆为文件, 在对Linux进行配置时, 很大程度上就是处理文件的过程, 所以掌握文件的相关操作是非常有必要的。下面我们介绍如何对文件进行, 创建、删除、移动、重命名, 以及查看文件内容, 至于如何编辑文件, 在后面具体介绍编辑器的时候在做详细阐述。

    1.文件创建命令touch

    # touch filename

    # touch filename_1 filename_2

    # touch /home/lxgyw/file5 file6

    # touch file{1..10}

    # touch file{a,b,c}

    # touch file{a..z}

    2.文件时间stat

    [root@test-example ~]# stat test.txt


    File:
    'test.txt'


    Size:
    2
    Blocks:
    8
    IO
    Block:
    4096 regular file

    Device: fd00h/64768d Inode:
    67335626
    Links:
    1

    Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

    Context:
    unconfined_u:object_r:admin_home_t:s0

    Access:
    2018-01-21
    12:12:48.949097044 +0800

    Modify:
    2018-01-21
    12:12:35.243302963 +0800

    Change:
    2018-01-21
    12:12:35.243302963 +0800


    Birth: -

     

    访问时间:atime,查看内容

    修改时间:mtime,修改内容

    改变时间:ctime,文件属性,比如权限

    删除时间:dtime,文件被删除的时间

    3.文件目录复制命令cp

    cp [OPTION]... [-T] SOURCE DEST

    cp [OPTION]... SOURCE... DIRECTORY

    cp [OPTION]... -t DIRECTORY SOURCE...

     

    //name文件复制至/tmp目录中

    # cp name /tmp/name_copy

     

    //如果复制过想保持原文件名,不修改名称

    # cp name /tmp/name

     

    //如果复制过想保持原来的属性, -p保持原文件或目录的属性

    # cp -p name /tmp/name_p

     

    //复制目录只需要使用-r参数, 递归复制

    # mkdir name_name

    # cp -r name_name/ /tmp/name_tmp

     

    //将多个文件拷贝同一个目录

    # cp -rv /etc/hosts /etc/hostname /tmp

    # cp -rv /etc/hosts /etc/hostname ./

     

    //

    # cp -rv /etc/hosts /etc/hosts.bak

    # cp -rv /etc/{hosts,hosts.bak}

    # cp -rv /etc/hosts{,-org}

    3.文件目录移动命令mv

    mv [OPTION]... [-T] SOURCE DEST

    mv [OPTION]... SOURCE... DIRECTORY

    mv [OPTION]... -t DIRECTORY SOURCE...

     

    //移动文件至tmp目录

    # mv file /tmp/

     

    //移动文件至tmp目录并修改名称为file_test

    # mv file /tmp/file_test

     

    //移动目录至/tmp目录下

    # mv dir/ /tmp/

     

    //移动多个文件或多个目录至同一个目录

    # touch file{1..3}

    # mv file1 file2 file3 /opt/

     

    # mkdir dir{1..3}

    # mv dir1/ dir2/ dir3/ /opt

    4.文件目录删除命令rm

    rm [OPTION]... FILE...

    -r 递归

    -f 强制删除

    -v 详细过程

     

     

    //删除文件, 默认会提醒是否删除文件

    # rm anan

     

    //强制删除文件, 不提醒

    # rm anan -f

     

    //删除目录,会提醒

    # rm -r dir/

     

    //强制删除目录,不提醒

    # rm -rf dir/

     

     

    //示例

    # mkdir /home/dir10

    # touch /home/dir10/{file2,file3,.file4}

    # rm -rf /home/dir10/* //不包括隐藏文件

    # ls /home/dir10/ -a

    . .. .file4

     

    //示例2

    # touch file{1..10}

    # touch {1..10}.pdf

    # rm -rf file*

    # rm -rf *.pdf

  5. 文件查看命令

    cat //查看文件内容

    示例:cat /etc/passwd

    示例:cat -n /etc/passwd //-n参数行号

    示例:cat >> lxgyw.txt <<EOF //追加数据

    test

    EOF

     

    head //查看文件头部内容,默认前十行

    示例:head /etc/passwd

    示例:head -n5 /etc/passwd //-n参数指定查看头几行

     

     

    tail //查看文件尾部内容,默认最后十行

    示例:tail /etc/passwd

    示例:tail -f /var/log/messages // -f参数跟随尾部输出而变化

     

     

    more //按空格可翻页查看文件内容,按q可推出

    示例:more /etc/passwd

     

     

    less //more类似

    示例:less /etc/passwd

  6. 文件下载命令

    wget //文件下载

    -O //指定下载地址,更改名称

    -T //超时时间

    -q //安静下载(关闭wget输出)

    --spider //网络爬虫

     

    示例:wget http://www.baidu.com

     

    curl //文件下载

    示例:curl -o http://www.baidu.com

     

     

    yum install lrzsz

    rz //文件上传

     

    sz //文件下载

    示例:sz filename

  7. 命令查找命令

    locate //查找文件或者目录

    示例:locate /etc/sh //搜索etc目录下所有以sh开头的文件

    示例:locate -i /etc/sh //搜索etc目录下,所有以sh开头的文件,忽略大小写

     

    which //查找系统PATH变量目录下的命令(绝对路径)

    示例:which ls

     

    whereis //查找文件索引数据库下的命令、源文件、man文件。非PATH变量查找,所以查找的面比which要广 -b,-m

    示例:whereis ls

    示例:whereis -b ls

  8. 字符处理命令

    1.使用sort排序
    很多情况下需要对无序的数据进行排序, 这时就需要用到sort排序了。

    sort [OPTION]... [FILE]...

    -r:倒序

    -n:按数字排序

    -t:指定分隔符(默认空格)

    -k:指定第几列, 指定几列几字符(指定1,1
    3.1,3.3

     

     

    //演示soft的用法, 首先创建一个文件:

    [root@lxgyw ~]# cat >> sort.txt <<EOF

    b:3

    c:2

    a:4

    e:5

    d:1

    f:11

    EOF

     

    //下面对输出的内容进行排序:

    [root@lxgyw ~]# sort sort.txt

    a:4

    b:3

    c:2

    d:1

    e:5

    f:11

     

    //可观察到, sort文件具有一个特点, 第一个字符是字母, 第三个字符是数字, 中间是用冒号隔开。

    //这样我们可以使用-t指定分隔符, 使用-k指定用于排序的列了。

    [root@lxgyw ~]# sort -t ":" -k2 sort.txt

    d:1

    f:11
    //
    第二行为什么是11?不应该按照顺序排列?

    c:2

    b:3

    a:4

    e:5

     

    //按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。

    //如果想要按照数字的方式进行排序, 需要使用 -n参数。

    [root@lxgyw ~]# sort -t ":" -n -k2 p.txt

    d:1

    c:2

    b:3

    a:4

    e:5

    f:11

     

     

    //测试案例,对下面内容进行排序

    192.168.3.1
    00:0F:AF:81:19:1F

    192.168.3.2
    00:0F:AF:85:6C:25

    192.168.3.3
    00:0F:AF:85:70:42

    192.168.2.20
    00:0F:AF:85:55:DE

    192.168.2.21
    00:0F:AF:85:6C:09

    192.168.2.22
    00:0F:AF:85:5C:41

    192.168.0.151
    00:0F:AF:85:6C:F6

    192.168.0.152
    00:0F:AF:83:1F:65

    192.168.0.153
    00:0F:AF:85:70:03

    192.168.1.10
    00:30:15:A2:3B:B6

    192.168.1.11
    00:30:15:A3:23:B7

    192.168.1.12
    00:30:15:A2:3A:A1

    192.168.1.1
    00:0F:AF:81:19:1F

    192.168.2.2
    00:0F:AF:85:6C:25

    192.168.3.3
    00:0F:AF:85:70:42

    192.168.2.20
    00:0F:AF:85:55:DE

    192.168.1.21
    00:0F:AF:85:6C:09

    192.168.2.22
    00:0F:AF:85:5C:41

    192.168.0.151
    00:0F:AF:85:6C:F6

    192.168.1.152
    00:0F:AF:83:1F:65

    192.168.0.153
    00:0F:AF:85:70:03

    192.168.3.10
    00:30:15:A2:3B:B6

    192.168.1.11
    00:30:15:A3:23:B7

    192.168.3.12
    00:30:15:A2:3A:A1

     

    //针对第三列的第一个字符,第四列的第一个字符到第三个字符排序才是正确

    [root@student tmp]# sort -t. -k3.1,3.1nr -k4.1,4.3nr test.txt

    2.使用uniq删除重复内容

    如果文件中有多行完全相同的内容, 当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq命令解决这个问题(但是必须配合sort使用)

    uniq [OPTION]... [INPUT [OUTPUT]]

    -c 计算重复的行

     

    //演示uniq的用法, 首先创建一个文件:

    [root@lxgyw ~]# cat uniq.txt

    abc

    123

    abc

    123

     

    //uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起

    [root@lxgyw ~]# cat uniq.txt |sort

    123

    123

    abc

    abc

     

    //使用uniq去除相邻重复的行

    [root@lxgyw ~]# cat uniq.txt |sort|uniq

    123

    abc

     

    //使用-c参数, 能统计出文件中每行内容重复的次数

    [root@lxgyw ~]# cat uniq.txt |sort|uniq -c


    2
    123


    2 abc

    3.使用cut命令截取某一个字段

    cut OPTION... [FILE]...

    -d:指定分隔符

    -f:数字,取第几列 –f3,6三列和6

    -c:按字符取(空格也算)

     

    //测试数据, 过滤出文件里 lxgyw以及552408925

    #echo "Im lxgyw, is
    QQ
    552408925" >lxgyw.com

     

    //实践思路

    # sed 's#,# #g' lxgyw.txt | cut -d " " -f2,6

    # sed 's#,# #g' lxgyw.txt | awk -F
    " " '{print $2
    " " $5}'

    # awk -F '[, ]+' '{print $2,$5}' lxgyw.txt

    # awk '{print $2 $5}' lxgyw.txt | awk -F
    "," '{print $1" " $2}'

    # awk -F
    "[, ]" '{print $2
    " " $6}' lxgyw.txt

     

     

     

    此类问题是运维工作中最常见的问题。可以演变成分析日志,查看TCP各个状态连接数,查看单IP连接数排名等

    [root@student tmp]# cat web.log

    http://www.lxgyw.com/index.html

    http://www.lxgyw.com/1.html

    http://post.lxgyw.com/index.html

    http://mp3.lxgyw.com/index.html

    http://www.lxgyw.com/3.html

    http://post.lxgyw.com/2.html

     

    [root@student tmp]# awk -F '/' '{print $3}' web.log|sort -rn|uniq –c


    3 www.lxgyw.comlxgyw.com


    2 post.lxgyw.comlxgyw.com


    1 mp3.lxgyw.comlxgyw.com

    [root@student tmp]# cut -d / -f3 web.log|sort -rn|uniq –c


    3 www.lxgyw.comlxgyw.com


    2 post.lxgyw.comlxgyw.com


    1 mp3.lxgyw.comlxgyw.com

    4.使用wc统计

    wc - print newline, word, and byte counts for
    each file
    显示文件的行、单词与字节统计信息

    wc [OPTION]... [FILE]...

    -l:显示文件行数

    -c:显示文件字节

    -w:显示文件单词

     

     

    //统计fstab有多少行

    [root@student ~]# wc -l /etc/fstab

    15 /etc/fstab

     

    显示/etc/services 文件行号

    [root@student ~]# wc -l /etc/services

    10774 /etc/services

     

     

    //扩展方法

    [root@student ~]# grep -n "." /etc/services | tail -1

    [root@student ~]# awk '{print NR $0}' /etc/services | tail -1

    [root@student ~]# cat -n /etc/services | tail -1

    [root@student ~]# sed '=' /etc/services | tail -2

  9. 练习如下命令

    用普通用户身份登陆虚拟机上完成练习
    在用户家目录下创建6个文件 song1.mp3 ~ song6.mp3
    把上出创建的songX.mp3文件移动到Music目录下(不存在则创建)
    在用户家目录下创建三个目录,分别为 friends,family,work
    切换到friends目录下,Music目录下的song1.mp3 ~ song3.mp3 拷贝到当前目录
    切换到family目录下,Music目录下的song4.mp3 ~ song6.mp3 移动到当前目录
    切换到用户主目录
    删除family目录
    切换到friends目录,把目录下的所有文件删除
    切换到主目录,friends目录删除.

     

     

     

     

     

     

     

     

     

        


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。