欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux 基础学习2

程序员文章站 2022-10-25 23:28:28
Linux 基础学习2 [TOC] 文件目录结构 文件和目录被组织成一颗倒置的树状结构 文件系统从根开始,“/” 文件名称严格区分大小写 隐藏文件以"."开头 路径的分隔符为"/" 文件命名规范 文件字符最长为255个字符 包括路径在内文件名称最长为4095个 颜色表示 蓝色文件 目录 绿色文件 可 ......

linux 基础学习2

文件目录结构

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

Linux 基础学习2

文件命名规范

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

Linux 基础学习2

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

Linux 基础学习2

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

Linux 基础学习2

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

Linux 基础学习2

  • 白色文件 --> 一般性文件,如文本文件,配置文件,源码文件等
  • 红色闪烁:表示链接的文件有问题
  • 黄色:表示设备文件
  • 灰色文件 -->其他文件
  • 除了斜杠和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

绝对路径和相对路径

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

目录名和基名

[root@localhost log]#basename /etc/sysconfig/network-scripts/ifcfg-ens33 
ifcfg-ens33
[root@localhost log]#basename /etc/sysconfig/network-scripts
network-scripts
[root@localhost log]#dirname /etc/sysconfig/network-scripts
/etc/sysconfig
[root@localhost log]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33 
/etc/sysconfig/network-scripts

切换目录

cd 切换目录 change directory

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

切换到家目录

[root@localhost log]#cd 
[root@localhost ~]#

切换到上一次的目录

[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cd -
/root
[root@localhost ~]#cd -
/etc/sysconfig/network-scripts

显示当前的工作目录

pwd print working directory

[root@localhost network-scripts]#pwd
/etc/sysconfig/network-scripts
# 查看链接的真正目录
[root@localhost /]#cd lib
[root@localhost lib]#pwd -p
/usr/lib

列出目录或者文件

ls list

命令格式:usage: ls [option]... [file]...

ls -a 显示所有文件
[root@root ~]# ls -a
.                .cshrc  file15  file3  .passwd.swo
..               file1   file16  file4  .tcshrc
anaconda-ks.cfg  file10  file17  file5  teaching_plan.zip

ls -l 以长格式显示文件列表
[root@root ~]# ls -l
total 8
-rw-------. 1 root root 1414 aug 22  2019 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 mar  1 18:28 file1

-rw-r--r--.    1        root     root      0    aug 22 17:21  10
权限      硬盘的引用次数  属主      属组     大小  访问时间    文件名称

ls -r 递归显示目录
[root@root ~]# ls -r
.:
anaconda-ks.cfg  file12  file16  file2   file5  file9
file1            file13  file17  file20  file6  teaching_plan.zip

ls -d 显示目录本身
[root@root ~]# ls -d
.

ls -1(数字1) 文件分行显示
[root@root ~]# ls -1
anaconda-ks.cfg
file1
file10
file11
file12


ls -s 安装文件大小排序
[root@root ~]# ls -s
teaching_plan.zip  file11  file15  file19  file4  file8

ls -r 倒序显示
[root@root ~]# ls -r
teaching_plan.zip  file6  file20  file17  file13  file1

ls -t 按照时间来排序
[root@root ~]# ls -t
file18  file11  file15  file3  file7  teaching_plan.zip

ls -lh 显示人类易读的方式
[root@root ~]# ls -1h
anaconda-ks.cfg
file1
file10
file11
file12
file13

ls -d */ 显示当前目录下的文件夹
l. 只显示隐藏文件

linux下的目录类型

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

查看文件状态

  file: ‘anaconda-ks.cfg’
  size: 1747        blocks: 8          io block: 4096   regular file
device: fd00h/64768d    inode: 33574992    links: 1
access: (0600/-rw-------)  uid: (    0/    root)   gid: (    0/    root)
context: system_u:object_r:admin_home_t:s0
access: 2019-08-22 12:09:03.288000381 +0900 # 访问时间
modify: 2019-08-22 11:47:12.262947345 +0900 # 修改时间
change: 2019-08-22 11:47:12.262947345 +0900 # 改动时间
atime 访问时间  查看文件内容就会改变
mtime 修改时间  改变内容发生变化
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 显示目录树

[root@root ~]# tree
.
├── anaconda-ks.cfg
├── file1
├── file10
├── file11
├── file12
├── file13
├── file14
├── file15
├── file16
├── file17
├── file18
├── file19
├── file2
├── file20
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
└── teaching_plan.zip

0 directories, 22 files

-d 只显示文件夹

[root@root ~]# tree -d
.

0 directories

-l # 只显示#层

[root@root ~]# tree -l 1
.
├── anaconda-ks.cfg
├── file1
├── file10
├── file11
├── file12
├── file13
├── file14
├── file15
├── file16
├── file17
├── file18
├── file19
├── file2
├── file20
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
└── teaching_plan.zip

0 directories, 22 files

删除目录

rmdir 只能删除非空目录

-p 递归删除空父目录

-v 显示删除过程

rm -rf 删除非空目录

复制文件和文件夹

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

usage: cp [option]... [-t] source dest
  or:  cp [option]... source... directory
  or:  cp [option]... -t directory source... 
  -i 显示提示信息
  -n 不覆盖
  -r -r 递归复制
  -d 只复制链接文件,不复制源文件
  -a 归档
  -v 显示过程
  -b 备份原来的文件
  --backup=number 备份文件加上数字
  -p 保留原来的属性
 
  • 如果源文件是文件的话
    • 目标是文件
      • 目标文件如果不存在的话,则新建目标文件,并把内容写到目标文件中
      • 如果目标文件存在的话,本来的命令是直接覆盖,建议使用-i来提示用户
    • 目标是文件夹
      • 在文件夹中新建一个同名的文件,并把文件内容写到新文件中
  • 如果源文件为多个文件的话
    • 目标必须是文件夹,文件夹必须存在,其他情况都会报错
  • 如果源文件是文件夹的话
    • 目标文件是文件: 不可以
    • 目标文件必须是文件夹,必须使用-r选项
    • 如果目标文件不存在:则直接创建目标文件夹,并把源文件夹的数据都复制到目标文件夹
    • 如果目标文件存在:
      • 如果是文件的话,则报错
      • 如果是文件夹:则在目标文件夹中创建同名文件夹,并把所有数据都复制到新文件夹

移动、重命名

mv move

usage: mv [option]... [-t] source dest
  or:  mv [option]... source... directory
  or:  mv [option]... -t directory source...
-i 提示
-f 强制
-b 备份
--backup=number 备份后面加数字
-v 显示过程

删除

rm remove

usage: rm [option]... file...
-i 提示
-r -r 递归删除
-f 强制删除
rm -rf 慎用
rm -rf /*
cd /
rm -rf *

链接

  • 软链接

  • 相当于windows的快捷方式
  • 创建命令 ln -s 源文件 目标文件
  • 可以对目录做软链接
  • 指向另外的一个文件或者目录的路径,大小是路径的长度的字符
  • 对磁盘引用次数没有影响
  • 可以跨分区
  • 源文件发生改变,软链接会跟着发生变化
  • 源文件删除,软链接不能访问

  • 硬链接

  • 磁盘引用次数会发生变化
  • 指向的是硬盘上的同一块区域
  • 磁盘的引用数会随着硬链接次数来增加
  • 不能对目录做硬链接
  • 不能跨越分区
  • 源文件发生改变,硬链接也会跟着变化
  • 源文件删除以后,硬链接可以访问

查看文件类型

file

输入和输出

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

i/o重定向

> 覆盖

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

禁止、允许覆盖

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

>> 追加

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

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

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

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

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

合并所有的输出

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

从文件导入stdin

tr 字符替换

-t 截断
-d 删除
-s 压缩,去重
-c 取反
[root@localhost ~]#tr 'a-z' 'a-z' < /etc/issue
\s
kernel \r on an \m
[root@localhost ~]#tr 'a-z' 'a-z' 
qwertyy
qwertyy
12345678
12345678
asdfghj
asdfghj
qwertyuio
qwertyuio
^c
[root@localhost ~]#tr ab 12
ab
12
abb
122
asdfghjkl
1sdfghjkl
^c
[root@localhost ~]#tr abc 12
ab
12
abc
122
abc
122
^c
[root@localhost ~]#tr ab 123
ab
12
abb
122
avc
1vc
qbc
q2c
abc
12c
[root@localhost ~]#tr -t abc 12
abc
12c
ab
12
[root@localhost ~]#tr -d abc
qwertyui
qwertyui
an^h^h
n

abc

artyibrtyuiocrtyuiop
rtyirtyuiortyuiop
^c
[root@localhost ~]#tr -d abc < /etc/issue
\s
kernel \r on n \m

[root@localhost ~]#cat /etc/issue
\s
kernel \r on an \m
[root@localhost ~]#tr -s a
abc
abc
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc
abc
^c
[root@localhost ~]#tr -sc a 
aasdaaaaaaa
aasdaaaaaaa
^[[a^h^h^c
[root@localhost ~]#tr -sc a 
aaaaaaaaabbbbbbbbbbbbbccccccccddddddddddd
aaaaaaaaabcd
[root@localhost ~]#tr -dc a
aaaaaaaaaaaabbbbbbbbbb
asdfghjkqwertyuiozxcvbnmxcvbnm,.
aaaaaaaaaaaaa
ctrl+d 结束
[root@localhost ~]#tr -dc "a\n"
asdfghjk
a
wertyujk;l'



asdfghj
a
[root@localhost test]#tr -d a < issue > issue  处理完成以后不能写会到源文件,要写到新的文件中
[root@localhost test]#seq 1 10 > b
[root@localhost test]#cat b
1
2
3
4
5
6
7
8
9
10
[root@localhost test]#tr -d "\n" < b
12345678910[root@localhost test]#tr -d "\n" < b
[root@localhost test]#tr "\n" " " <b
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr "\n" " " <b >c
[root@localhost test]#cat c
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr " " "\n" <c
1
2
3
4
5
6
7
8
9
10

多行发送给stdin

# 第一种方式
[root@localhost test]#cat > f1
qwert
wertyui
wertyui
wertyuiopasdfghjk
sdfghjkl
sdfyhjkl;sdfghjkl;xcvb

# 第二种方式
[root@localhost test]#cat > f2 <<eof
> qwerty
> qwertyu
> wertyui
> qwertyu
> eof
eof 不是必须得,只要两个相同就可以

管道

管道使用“|”来表示

命令1|命令2|命令3

  • 把命令1的输出结果当做命令2的输出结果,把命令2的输出结果当成命令3的输入结果
  • 默认情况下,管道只能传送标准输出
  • 如果需要把错误输出也传递,则需要|&
  • 一般用来组合多个命令
  • 有一些命令是不接受管道的
[root@localhost test]#ls f1|tr 'a-z' 'a-z'
f1
[root@localhost test]#ls f
ls: cannot access f: no such file or directory
[root@localhost test]#ls f|tr 'a-z' 'a-z'
ls: cannot access f: no such file or directory
[root@localhost test]#ls f|&tr 'a-z' 'a-z'
ls: cannot access f: no such file or directory
[root@localhost test]#echo file{1..20}|touch 
touch: missing file operand
try 'touch --help' for more information.


作 者:

出 处:

声援博主:如果您觉得文章对您有帮助,可以点击文章右下角 推荐一下。您的鼓励是博主的最大动力!

自 勉:生活,需要追求;梦想,需要坚持;生命,需要珍惜;但人生的路上,更需要坚强。带着感恩的心启程,学会爱,爱父母,爱自己,爱朋友,爱他人。