Linux 基础学习2

文件目录结构

  • 文件和目录被组织成一颗倒置的树状结构
  • 文件系统从根开始,“/”
  • 文件名称严格区分大小写
  • 隐藏文件以"."开头
  • 路径的分隔符为"/"

文件命名规范

  • 文件字符最长为255个字符
  • 包括路径在内文件名称最长为4095个
  • 颜色表示
    • 蓝色文件 --> 目录

  • 绿色文件 --> 可执行文件,可执行的程序

  • 红色文件 --> 压缩文件或者包文件

  • 浅蓝色文件 --> 链接文件,主要是使用ln命令建立的文件

  • 白色文件 --> 一般性文件,如文本文件,配置文件,源码文件等
  • 红色闪烁:表示链接的文件有问题
  • 黄色:表示设备文件
  • 灰色文件 -->其他文件
  • 除了斜杠和NULL,其他所有字符都可以使用
  • 对大小写敏感

文件系统结构

  • /boot 引导文件的存放位置,内核文件、引导加载器都在此目录
  • /bin 所有的用户都可以使用的命令
  • /sbin 管理类的命令
  • /lib 启动时程序使用的基本库文件 .so结尾
  • /lib64 专门存放X86_64系统上得辅助库文件
  • /etc 存放配置文件
  • /home/USERNAME 普通用户的家目录
  • /root 管理员的家目录
  • /media 便携式移动设备的挂载点
  • /mnt 临时文件的挂载点
  • /dev 设备文件和特殊文件的存放位置
  • /opt 第三方的应用的安装位置
  • /tmp 临时文件的存放位置
  • /usr 存放安装程序
  • /var 存放经常变化的文件,比如日志
  • /proc 存放内核启动和进程相关的虚拟文件
  • /sys 输出当前系统上的硬件相关的文件
  • /srv 系统上允许的服务用到的数据

linux应用程序的组成

  • 二进制文件

    • /bin
    • /sbin
    • /usr/bin
    • /usr/sbin
    • /usr/local/bin
    • /usr/local/sbin
  • 库文件
    • /lib
    • /lib64
    • /usr/lib
    • /usr/lib64
    • /usr/local/lib
    • /usr/local/lib64
  • 配置文件
    • /etc
    • /etc/name
    • /usr/local/etc
  • 帮助文件
    • /usr/share/man
    • /usr/share/doc
    • /usr/local/share/man
    • /usr/local/share/doc

绝对路径和相对路径

  • 绝对路径

    • 以根开始
    • 完整的文件的存放位置
    • 可以读取到任何一个文件或者文件夹
  • 相对路径
    • 不以根开始
    • 相对当前的位置来决定
    • 可以简短的表示一个文件或者文件夹
    • . 当前目录
    • .. 父级目录

目录名和基名

  1. [root@localhost log]#basename /etc/sysconfig/network-scripts/ifcfg-ens33
  2. ifcfg-ens33
  3. [root@localhost log]#basename /etc/sysconfig/network-scripts
  4. network-scripts
  5. [root@localhost log]#dirname /etc/sysconfig/network-scripts
  6. /etc/sysconfig
  7. [root@localhost log]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33
  8. /etc/sysconfig/network-scripts

切换目录

cd 切换目录 change directory

  • 可以使用相对路径
  • 可以使用绝对路径

切换到家目录

  1. [root@localhost log]#cd
  2. [root@localhost ~]#

切换到上一次的目录

  1. [root@localhost ~]#cd /etc/sysconfig/network-scripts/
  2. [root@localhost network-scripts]#cd -
  3. /root
  4. [root@localhost ~]#cd -
  5. /etc/sysconfig/network-scripts

显示当前的工作目录

pwd print working directory

  1. [root@localhost network-scripts]#pwd
  2. /etc/sysconfig/network-scripts
  3. # 查看链接的真正目录
  4. [root@localhost /]#cd lib
  5. [root@localhost lib]#pwd -P
  6. /usr/lib

列出目录或者文件

ls list

命令格式:Usage: ls [OPTION]... [FILE]...

  1. ls -a 显示所有文件
  2. [root@root ~]# ls -a
  3. . .cshrc file15 file3 .passwd.swo
  4. .. file1 file16 file4 .tcshrc
  5. anaconda-ks.cfg file10 file17 file5 teaching_plan.zip
  6. ls -l 以长格式显示文件列表
  7. [root@root ~]# ls -l
  8. total 8
  9. -rw-------. 1 root root 1414 Aug 22 2019 anaconda-ks.cfg
  10. -rw-r--r--. 1 root root 0 Mar 1 18:28 file1
  11. -rw-r--r--. 1 root root 0 Aug 22 17:21 10
  12. 权限 硬盘的引用次数 属主 属组 大小 访问时间 文件名称
  13. ls -R 递归显示目录
  14. [root@root ~]# ls -R
  15. .:
  16. anaconda-ks.cfg file12 file16 file2 file5 file9
  17. file1 file13 file17 file20 file6 teaching_plan.zip
  18. ls -d 显示目录本身
  19. [root@root ~]# ls -d
  20. .
  21. ls -1(数字1 文件分行显示
  22. [root@root ~]# ls -1
  23. anaconda-ks.cfg
  24. file1
  25. file10
  26. file11
  27. file12
  28. ls -S 安装文件大小排序
  29. [root@root ~]# ls -S
  30. teaching_plan.zip file11 file15 file19 file4 file8
  31. ls -r 倒序显示
  32. [root@root ~]# ls -r
  33. teaching_plan.zip file6 file20 file17 file13 file1
  34. ls -t 按照时间来排序
  35. [root@root ~]# ls -t
  36. file18 file11 file15 file3 file7 teaching_plan.zip
  37. ls -lh 显示人类易读的方式
  38. [root@root ~]# ls -1h
  39. anaconda-ks.cfg
  40. file1
  41. file10
  42. file11
  43. file12
  44. file13
  45. ls -d */ 显示当前目录下的文件夹
  46. l. 只显示隐藏文件
  47. #修改文件创建时间
  48. [root@root ~]# touch -c -m -t 201301211925 b19
  49. [root@root ~]# ll b19
  50. -rw-r--r--. 1 root root 0 Jan 21 2013 b19
  51. #ls -l 等同于 ll
  52. [root@root ~]# ls -l b19
  53. -rw-r--r--. 1 root root 0 Jan 21 2013 b19
  54. [root@root ~]# ll b19
  55. -rw-r--r--. 1 root root 0 Jan 21 2013 b19

linux下的目录类型

  • - 用来表示文件
  • d 用来表示目录
  • b 块设备
  • c 字符设备
  • l 表示符号链接文件
  • s socket套接字

查看文件状态

  1. File: anaconda-ks.cfg
  2. Size: 1747 Blocks: 8 IO Block: 4096 regular file
  3. Device: fd00h/64768d Inode: 33574992 Links: 1
  4. Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
  5. Context: system_u:object_r:admin_home_t:s0
  6. Access: 2019-08-22 12:09:03.288000381 +0900 # 访问时间
  7. Modify: 2019-08-22 11:47:12.262947345 +0900 # 修改时间
  8. Change: 2019-08-22 11:47:12.262947345 +0900 # 改动时间
  9. atime 访问时间 查看文件内容就会改变
  10. mtime 修改时间 改变内容发生变化
  11. ctime 改动时间 元数据发生变化

touch

创建空文件和刷新时间,如果文件存在,则刷新时间,如果文件不存在,则创建文件

-a 只修改atime和ctime

-m 只修改mtime和ctime

文件通配符

  • * 所有
  • ? 匹配的是任意单个字符
  • ~ 表示用户的家目录
  • [123] 其中一个
  • [^123] 取反
  • [0-9] 表示数字
  • file[a-z] 字母(有坑)缺少Z
  • file[A-Z] 字母(有坑)缺少a
  • [:lower:] 小写字母
  • [:upper:] 大写字母
  • [:alpha:] 所有字母 a-zA-Z
  • [:alnum:] 表示字母和数字
  • [:digit:] 表示数字

创建目录

mkdir 创建目录

  • -p 递归创建
  • -v 显示详细过程

显示目录树

安装:yum install -y tree

tree 显示目录树

  1. [root@root ~]# tree
  2. .
  3. ├── anaconda-ks.cfg
  4. ├── file1
  5. ├── file10
  6. ├── file11
  7. ├── file12
  8. ├── file13
  9. ├── file14
  10. ├── file15
  11. ├── file16
  12. ├── file17
  13. ├── file18
  14. ├── file19
  15. ├── file2
  16. ├── file20
  17. ├── file3
  18. ├── file4
  19. ├── file5
  20. ├── file6
  21. ├── file7
  22. ├── file8
  23. ├── file9
  24. └── teaching_plan.zip
  25. 0 directories, 22 files

-d 只显示文件夹

  1. [root@root ~]# tree -d
  2. .
  3. 0 directories

-L # 只显示#层

  1. [root@root ~]# tree -L 1
  2. .
  3. ├── anaconda-ks.cfg
  4. ├── file1
  5. ├── file10
  6. ├── file11
  7. ├── file12
  8. ├── file13
  9. ├── file14
  10. ├── file15
  11. ├── file16
  12. ├── file17
  13. ├── file18
  14. ├── file19
  15. ├── file2
  16. ├── file20
  17. ├── file3
  18. ├── file4
  19. ├── file5
  20. ├── file6
  21. ├── file7
  22. ├── file8
  23. ├── file9
  24. └── teaching_plan.zip
  25. 0 directories, 22 files

删除目录

rmdir 只能删除非空目录

-p 递归删除空父目录

-v 显示删除过程

rm -rf 删除非空目录

复制文件和文件夹

cp copy 默认情况下是别名,原来本身命令是不提示覆盖的

  1. Usage: cp [OPTION]... [-T] SOURCE DEST
  2. or: cp [OPTION]... SOURCE... DIRECTORY
  3. or: cp [OPTION]... -t DIRECTORY SOURCE...
  4. -i 显示提示信息
  5. -n 不覆盖
  6. -r -R 递归复制
  7. -d 只复制链接文件,不复制源文件
  8. -a 归档
  9. -v 显示过程
  10. -b 备份原来的文件
  11. --backup=number 备份文件加上数字
  12. -p 保留原来的属性
  • 如果源文件是文件的话

    • 目标是文件

      • 目标文件如果不存在的话,则新建目标文件,并把内容写到目标文件中
      • 如果目标文件存在的话,本来的命令是直接覆盖,建议使用-i来提示用户
    • 目标是文件夹
      • 在文件夹中新建一个同名的文件,并把文件内容写到新文件中
  • 如果源文件为多个文件的话
    • 目标必须是文件夹,文件夹必须存在,其他情况都会报错
  • 如果源文件是文件夹的话
    • 目标文件是文件: 不可以
    • 目标文件必须是文件夹,必须使用-r选项
    • 如果目标文件不存在:则直接创建目标文件夹,并把源文件夹的数据都复制到目标文件夹
    • 如果目标文件存在:
      • 如果是文件的话,则报错
      • 如果是文件夹:则在目标文件夹中创建同名文件夹,并把所有数据都复制到新文件夹

移动、重命名

mv move

  1. Usage: mv [OPTION]... [-T] SOURCE DEST
  2. or: mv [OPTION]... SOURCE... DIRECTORY
  3. or: mv [OPTION]... -t DIRECTORY SOURCE...
  4. -i 提示
  5. -f 强制
  6. -b 备份
  7. --backup=number 备份后面加数字
  8. -v 显示过程
  9. #文件重命名示例
  10. [root@root ~]# ls
  11. b111111
  12. [root@root ~]# mv b111111 bbb233
  13. [root@root ~]# ls
  14. bbb233

删除

rm remove

  1. Usage: rm [OPTION]... FILE...
  2. -i 提示
  3. -r -R 递归删除
  4. -f 强制删除
  5. rm -rf 慎用
  6. rm -rf /*
  7. cd /
  8. rm -rf *
  9. 删除文件
  10. [root@localhost bighome]# rm install.log
  11. 删除文件夹
  12. [root@localhost ~]# rm -r b
  13. -f 省略确认步骤
  14. [root@localhost ~]# rm -rf b
  15. 删除文件里面的内容
  16. [root@localhost ~]# > filename
  17. [root@localhost ~]# > filename
  18. [root@localhost ~]# echo “” > filename
  19. [root@localhost ~]# echo > filename
  20. [root@localhost ~]# cat /dev/null > filename

链接

  • 软链接

  • 相当于windows的快捷方式

  • 创建命令 ln -s 源文件 目标文件

  • 可以对目录做软链接

  • 指向另外的一个文件或者目录的路径,大小是路径的长度的字符

  • 对磁盘引用次数没有影响

  • 可以跨分区

  • 源文件发生改变,软链接会跟着发生变化

  • 源文件删除,软链接不能访问

  • 硬链接

  • 磁盘引用次数会发生变化

  • 指向的是硬盘上的同一块区域

  • 磁盘的引用数会随着硬链接次数来增加

  • 不能对目录做硬链接

  • 不能跨越分区

  • 源文件发生改变,硬链接也会跟着变化

  • 源文件删除以后,硬链接可以访问

查看文件类型

file

输入和输出

  • 标准输入 默认是来自键盘的输入 stdin 0
  • 标准输出 默认输出到终端窗口 stdout 1
  • 标准错误输出 默认输出到终端窗口 stderr 2

I/O重定向

> 覆盖

  • > 将标准输出重定向到文件中
  • 2> 将错误输出重定向到文件中
  • &> 将所有的输出都重定向到文件中

禁止、允许覆盖

  • 禁止覆盖 set -C
  • 允许覆盖 set +C

>> 追加

>> 将标准输出追加到文件中

2>> 将错误输出追加到文件中

&>> 将所有输出追加到文件中

标准输入和错误输入分开保存

  1. [root@localhost ~]#ls f 45yuio > log.log 2> error.log
  2. [root@localhost ~]#cat log.log
  3. f
  4. [root@localhost ~]#cat error.log
  5. ls: cannot access 45yuio: No such file or directory

合并所有的输出

  • &> 覆盖重定向
  • &>> 追加重定向
  • command > file 2>&1
  • command >> file 2>&1
  • ():合并多个文件的输出
  • /dev/null 黑洞

从文件导入stdin

tr 字符替换

  1. -t 截断
  2. -d 删除
  3. -s 压缩,去重
  4. -c 取反
  5. [root@localhost ~]#tr 'a-z' 'A-Z' < /etc/issue
  6. \S
  7. KERNEL \R ON AN \M
  8. [root@localhost ~]#tr 'a-z' 'A-Z'
  9. qwertyy
  10. QWERTYY
  11. 12345678
  12. 12345678
  13. ASDFGHJ
  14. ASDFGHJ
  15. qwertyuio
  16. QWERTYUIO
  17. ^C
  18. [root@localhost ~]#tr ab 12
  19. ab
  20. 12
  21. abb
  22. 122
  23. asdfghjkl
  24. 1sdfghjkl
  25. ^C
  26. [root@localhost ~]#tr abc 12
  27. ab
  28. 12
  29. abc
  30. 122
  31. abc
  32. 122
  33. ^C
  34. [root@localhost ~]#tr ab 123
  35. ab
  36. 12
  37. abb
  38. 122
  39. avc
  40. 1vc
  41. qbc
  42. q2c
  43. abc
  44. 12c
  45. [root@localhost ~]#tr -t abc 12
  46. abc
  47. 12c
  48. ab
  49. 12
  50. [root@localhost ~]#tr -d abc
  51. qwertyui
  52. qwertyui
  53. an^H^H
  54. n
  55. abc
  56. artyibrtyuiocrtyuiop
  57. rtyirtyuiortyuiop
  58. ^C
  59. [root@localhost ~]#tr -d abc < /etc/issue
  60. \S
  61. Kernel \r on n \m
  62. [root@localhost ~]#cat /etc/issue
  63. \S
  64. Kernel \r on an \m
  65. [root@localhost ~]#tr -s a
  66. abc
  67. abc
  68. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc
  69. abc
  70. ^C
  71. [root@localhost ~]#tr -sc a
  72. aasdaaaaaaa
  73. aasdaaaaaaa
  74. ^[[A^H^H^C
  75. [root@localhost ~]#tr -sc a
  76. aaaaaaaaabbbbbbbbbbbbbccccccccddddddddddd
  77. aaaaaaaaabcd
  78. [root@localhost ~]#tr -dc a
  79. aaaaaaaaaaaabbbbbbbbbb
  80. asdfghjkqwertyuiozxcvbnmxcvbnm,.
  81. aaaaaaaaaaaaa
  82. ctrl+d 结束
  83. [root@localhost ~]#tr -dc "a\n"
  84. asdfghjk
  85. a
  86. wertyujk;l'
  87. asdfghj
  88. a
  89. [root@localhost test]#tr -d a < issue > issue 处理完成以后不能写会到源文件,要写到新的文件中
  90. [root@localhost test]#seq 1 10 > b
  91. [root@localhost test]#cat b
  92. 1
  93. 2
  94. 3
  95. 4
  96. 5
  97. 6
  98. 7
  99. 8
  100. 9
  101. 10
  102. [root@localhost test]#tr -d "\n" < b
  103. 12345678910[root@localhost test]#tr -d "\n" < b
  104. [root@localhost test]#tr "\n" " " <b
  105. 1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr "\n" " " <b >c
  106. [root@localhost test]#cat c
  107. 1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr " " "\n" <c
  108. 1
  109. 2
  110. 3
  111. 4
  112. 5
  113. 6
  114. 7
  115. 8
  116. 9
  117. 10

多行发送给stdin

  1. # 第一种方式
  2. [root@localhost test]#cat > f1
  3. qwert
  4. wertyui
  5. wertyui
  6. wertyuiopasdfghjk
  7. sdfghjkl
  8. sdfyhjkl;sdfghjkl;xcvb
  9. # 第二种方式
  10. [root@localhost test]#cat > f2 <<EOF
  11. > qwerty
  12. > qwertyu
  13. > wertyui
  14. > qwertyu
  15. > EOF
  16. EOF 不是必须得,只要两个相同就可以

管道

管道使用“|”来表示

命令1|命令2|命令3

  • 把命令1的输出结果当做命令2的输出结果,把命令2的输出结果当成命令3的输入结果
  • 默认情况下,管道只能传送标准输出
  • 如果需要把错误输出也传递,则需要|&
  • 一般用来组合多个命令
  • 有一些命令是不接受管道的
  1. [root@localhost test]#ls f1|tr 'a-z' 'A-Z'
  2. F1
  3. [root@localhost test]#ls f
  4. ls: cannot access f: No such file or directory
  5. [root@localhost test]#ls f|tr 'a-z' 'A-Z'
  6. ls: cannot access f: No such file or directory
  7. [root@localhost test]#ls f|&tr 'a-z' 'A-Z'
  8. LS: CANNOT ACCESS F: NO SUCH FILE OR DIRECTORY
  9. [root@localhost test]#echo file{1..20}|touch
  10. touch: missing file operand
  11. Try 'touch --help' for more information.
作 者:郭楷丰
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角 推荐一下。您的鼓励是博主的最大动力!
自 勉:生活,需要追求;梦想,需要坚持;生命,需要珍惜;但人生的路上,更需要坚强。带着感恩的心启程,学会爱,爱父母,爱自己,爱朋友,爱他人。

Linux 基础学习2的更多相关文章

  1. linux基础学习之软件安装以及常用命令

    linux基础学习之软件安装以及常用命令 调用中央仓库: yum install wget 然后下载nodejs: wget https://nodejs.org/dist/v10.14.2/node ...

  2. Linux基础学习系列目录导航

    Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...

  3. linux基础学习路线&review

    linux基础学习网址: https://www.runoob.com/linux/linux-tutorial.html 比较重点的是这个启动过程的介绍学习:https://www.runoob.c ...

  4. Linux 基础学习1

    目录 Linux 基础学习 用户登录 终端 交互式接口 bash 修改ssh连接慢的步骤 命令提示符 显示提示符格式 命令 别名 命令格式 获取命令的帮助信息 man bash 快捷键 tab 键 引 ...

  5. Linux基础学习(全)

    使用的Linux发行版本为Redhat 1.Linux(RedHat)基础学习-命令行使用入门 2.Linux(RedHat)基础学习-文件寻址与管理 3.Linux(RadHat)基础学习-vim编 ...

  6. Linux基础学习(1)--Linux系统简介

    第一章——Linux系统简介 1.UNIX和Linux发展史: 1.1 unix发展史: (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发Mul ...

  7. Linux 基础学习(第二节)

    free命令用于显示当前系统中内存的使用量信息,格式为:“free [-h]”. 为了保证Linux系统不会突然卡住宕机,因此内存使用量应该是运维人员时刻要关注的数据啦,咱们可以使用-h参数来以更人性 ...

  8. Linux基础学习(二)

    前言: 我们在上一节了解了一下linux的硬件组成,虽然也许对具体的东西还不甚了解,但是我们知道了linux下一切皆文件这一特性 我们装好了CentOS7的虚拟机(这个可以看别人教程来装起来,比较简单 ...

  9. Linux基础学习(一)

    前言:这个学习笔记是为了督促自己能够更好的学习Linux的有关知识. 参考书目 鸟哥的linux私房菜 Chapter 1:入门建议 新手建议:重点 基础一定一定要学好 那么什么是基础呢? 先从Lin ...

随机推荐

  1. SpringBoot dev-tools vjtools dozer热启动类加载器不相同问题

    最近使用唯品会的vjtools的BeanMapper进行对象的深度克隆转换DTO/VO这种操作,Spring Boot的dev-tools热启动,需要把vjtools和dozer包都放到spring- ...

  2. 性能测试分析过程(二)cpu 使用率过高的分析方法

    Linux 系统下 cpu 使用率过高的分析方法 1.通过 top 命令可以很明显查看出哪个进程耗cpu比较高 2. ps -mp 25147-o THREAD,tid,time\top -Hp pi ...

  3. python 代码性能分析 库

    问题描述 1.Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢: 2.Python开发的程序在使用过程中占用内存很大,想确定下是哪段代码引起的: 解决方案 使用profile分析分析c ...

  4. SpringCloud基础知识

    什么是SpringCloud Spring Cloud是一系列框架的有序集合. 为什么用SpringCloud Spring Cloud涵盖面广,能够与Spring Framework.Spring ...

  5. haproxy2.0入门部署教程

    测试后发现,haproxy2.0和之前的版本部署有些许差异,配置文件的写法也是不同的 测试环境:Centos7.3 IP:172.16.1.227 172.16.1.228 部署httpd,页面内容为 ...

  6. [LeetCode] 750. Number Of Corner Rectangles 边角矩形的数量

    Given a grid where each entry is only 0 or 1, find the number of corner rectangles. A corner rectang ...

  7. oracle 常用命令【创建表空间用户及删除】

    /*第1步:创建临时表空间 */ create temporary tablespace ZJY_TEMP tempfile '/usr/u01/app/oradata/orcl/ZJY_TEMP.d ...

  8. 阿里云移动推送 ios项目添加SDK步骤

    添加阿里云Pods仓库和各产品SDK Pod依赖,配置步骤如下: 1. CocoaPods集成添加阿里云Pods仓库,Podfile添加: source 'https://github.com/ali ...

  9. QT 安装 配置过程

    QT, QT creator的安装,环境配置: 需要根据这个连接重新梳理一遍:https://blog.csdn.net/win_turn/article/details/50465127 1)一种方 ...

  10. PHP 死锁问题分析

    背景:对于死锁的问题,人们往往想到出现一些关于访问很缓慢,有白页现象,要是测试环境(我就真实遇到测试环境有本文谈及一样的问题)你也就重启一下PHP的php-fpm进程发现又好了,隔一段时间又出类似的问 ...