当前位置:   article > 正文

Linux基础-系统结构与shell_linux shell 结构体

linux shell 结构体

1.什么是Linux

        内核:能够让计算机硬件进行工作,能够运行最核心的功能组合,使计算机跑起来。

        Linux内核:由linus和Linux社区的人员一起开发的内核,是免费开源的内核程序

        在Linux的内核基础上,在加上各个厂商匹配内核开发出网络管理,桌面系统、快捷功能等,形成完整的操作系统。

Linux的操作系统:

       查看操作系统命令

lsb_release -a

       各个操作系统基于不同针对方向各有不同,大致分为针对社区(普通用户的)、针对企业的系统,目前除主要使用的还有一些定制开发的系统。

2.Linux系统体系结构

由低到高分别为

Linux内核

shell(壳,保护过滤):通过shell提供内核的功能

文件系统

应用程序

 

1.Linux内核

内核是Linux系统中最底层,提供系统中核心功能并允许有序访问硬件资源管理

管理:输入输出设备、进程执行情况、文件系统操作、内存资源管理

Linux内核支持:多任务、多用户

查看内核命令

cat /proc/version

2.shell

命令解释器,最为壳保护内核,本质是linux命令的有序集合

但执行程序时,把程序的各种操作指令进行解释执行,通过命令解释器就让内核执行对应的操作

作用:提供了一个方式可以让用户于内核(操作系统)进行交换

3.文件系统

文件系统就是用于组织和管理计算机存储设备上的大量文件

在windows系统使用NTFS格式文件系统

Linux中一般使用ext4格式文件系统

Windows的文件夹在Linux称之为目录

文件系统的逻辑结构(Linux的目录结构)

Linux中文件系统是把文件组织为倒置的树,每个文件夹当作树的分支,每个文件当作树的树叶

文件系统只有一个起点(相当于树的根位置)

/ ---------根文件夹(整个磁盘起点)

linux文件系统就是一个树型的目录结构︰

将根(/)作为整个文件系统的起点,其他的所有目录都是从根开始从根开始,就是文件系统(磁盘的存储)

目录结构︰存储文件

/∶根目录

/bin∶存放系统中最常用的可执行程序(命合)/boot∶存放linux和系统后动文件

/dev∶存放系统中的设备文件,包括磁盘、鼠标、键盘等设备/etc∶存放系统的配置文件,如passwd存放用户信息

/home︰普通用户目录的默认位置

/lib∶存放共享库

/lib32∶存放32位共享库/lib64∶存放那个64位共享库

/media∶存放cd、软盘、usb临时读入的文件

/mnt∶挂载文件系统挂载点

/proc∶作为进程(当前执行的程序)的文件存放目录/opt∶作为可选程序和文件存放目录

/root︰系统管理员用户的目录(root用户)

/sbin∶作为扩展的、更多的二进制程序存放的目录/usr∶标准库、第三方库存放目录

/sys∶系统运行时的文件存放目录/tmp∶用于存放临时文件

存放Linux内核和系统启动文件,包括Grub、lilo启动器程序

注:Linux文件系统把一切看作文件,Linux认为一切皆是文件

Linux的文件

linux⼀切皆⽂件:⽂本是⽂件、⽬录是⽂件、设备是⽂件.....

|⽂件类型|⽂件权限|⽂件硬链接数|⽂件拥有者|⽂件拥有组|⽂件⼤⼩|最 后修改时间|⽂件名|

|:-|:-|:-|:-|:-|:-|:-|:-|:-|

|第⼀个符号|第2-10 共9个字符|数字|⽤户名|⽤户组|⽂件的内容所占空间 (数字)|如果修改了⽂件,最有⼀次修改⽂件内容的时间|⽂件名字|

|- 表⽰普通⽂件(⼆进制、⽂本)|权限值有9个分为三组|可以认为⽂件

备份有⼏个|⽂件的拥有者(⽂件的创建⽤户)|⽂件拥有⽤户的组||||

|d 表⽰⽬录⽂件|第⼀组:⽤户的权限|有⼏份⽂件完全⼀致|第⼀组⽂件 权限|第⼆组⽂件权限||

|p 表⽰管道⽂件|第⼆组:⽤户组的权限|

|s 表⽰套接字⽂件|第三组:其他⽤户的权限|

|c 表⽰字符设备⽂件||

|b 表⽰块设备⽂件||

|l 表⽰符号链接⽂件||

同时Linux会以不同的颜色进行显示文件名

浅蓝色             [l]    软链接
白色                [-]    普通文件/硬链接
蓝色                [d]    目录
红色                [l]    某文件被删除后,链接到该文件的软链接的颜色
红色闪烁         无   表示该文件已被删除,但还存在该文件的软链接
红色                [-]    压缩包
黄色                [c]    字符设备文件,如键盘鼠标
绿色                [-]     可执行文件,可执行的程序 
桃红色            [s]     套接字文件
土黄色            [p]     管道文件
灰色文件                 表示其它文件

shell命令

shell完成内核与用户之间的交互

shell命今∶就是shell命合解释器能够识别的指今让系统内核帮助完成一些具体的功能

shell就是命令解释器,将用户的命今(程序)解析成操作系统能够理解的指合,实现用户与内核的交互

shell命合的输入,在终端提示符,标识命今的输入位置终端命合提示符∶

ubuntu@linuxmachine : ~

用户@主机名(电脑名字)∶工作路径用户识别用户∶当前打开终端的用户是谁主机

∶普通用户;#∶管理员用户root

特殊的路径说明∶

∶在当前的用户的家目录(用户目录)

.∶表示当前目录文件(一个点代表平级目录)

..∶表示当前目录的上一层目录文件(两个点代表上层目录)

1.命今格式∶

command + [option] + [argument]

命令 选项 参数

命令∶shell要解析的指合内容,要执行的内容

选项︰改变命今执行动作的类型(命今功能选择),选项用-选项表示,可以有多个选项︰-选项1选项2..-选项1-选项2..

参数︰命今要作用的目标是谁

注:

1.如果需要在一行终端命合提示符写多个命今用;隔开,如果一行写不完用\(续行)符号表示命今未输入结束

2.有时命今不会携带选项或参数,不写就是默认选项、默认参数

man command :查看手册中命今的说明帮助

2.路径表示

在命今中如何表示一个文件(或一个目录文件)

在认识linux文件系统是一颗倒置的树,分层的文件组织结构,表示一个文件,只需要确定文件(目录文件)在哪个目录以及叫什么文件名。在不同的存储位置,可以确定唯一的一个文件

路径︰文件是在哪个目录下

  • 绝对路径

对于linux文件系统,只有一个根(目录)位置(/),表示文件系统的存储的开始位置(所有的内容都存储在/里面),以根为起点来表示一个文件的路径,文件在文件系统中的准确位置,在Windows中以盘号为根

如︰

/home/ubuntu/code/221101/名单.png

  • 相对路径

默认从当前的用户的工作路径位置开始,找到对应文件或目录的位置如∶

code/221101/名单.png

  • 输出重定向

echo xxxx 把xxxx内容在终端上打印

重定向符:

>:输出到某个位置的内容变为输出到指定的某个位置(会先删除指定位 置中的原先内容)

>> :以追加⽅式输出到指定位置

  • linux 通配符

使⽤⼀些特殊的符号来代替⽂件名的字符

1.星号(*)

        匹配任意⻓度的字符串

        ⽤file_*.txt,匹配:

         file_abc.txt,file_ok.txt,file_1223.txt

但是不能匹配file_abc|

2.问号(?)

        匹配⼀个⻓度的字符

        ⽤户file_?.txt,匹配:

        file_1.txt,file_a.txt,file_@.txt;、

        但是不能匹配file_ab.txt|

3.⽅括号([...])

        匹配⽅括号指定的⼀个字符

        ⽤户file_[150abc].txt,匹配:

        file_1.txt,file_5.txt,file_a.txt

        但是不能匹配file_x.txt|

4.⽅括号[^....]|

        被除了⽅括号指定的⼀个字符,均可匹配|

        |⽅括号[-]|匹配⽅括号指定的范围的⼀个字符||

  • 用户组管理
  • 查看⽤户对应的⽤户组

        groups ⽤户名

  • 创建⽤户组

        sudo groupadd ⽤户组名 查看配置⽂件/etc/group 列举出组的信息

  • 删除⽤户组

        sudo groupdel ⽤户组名

  • 将⽤户添加到⽤户组

        sudo gpasswd -a ⽤户名 ⽤户组

  • 将⽤户从⽤户组删除

         sudo gpasswd -d ⽤户名 ⽤户组

  • ⽤户管理
  • 修改⽤户密码

        passwd (⽤户名)

--不写表⽰当前⽤户 但是在当前⽤户下只能修改当前⽤户的密码 如果要修改其他⽤户的密码,必须是管理员root⾝份

sudo passwd ⽤户名

  • 切换⽤户

        su ⽤户名

  •  退出当前⽤户

        exit 用户名

  • 添加⽤户

        只能管理员root添加 sudo adduser 新⽤户名

        新创建的⽤户不能提升root权限,不能够使⽤sudo 如果⽤户需要使⽤sudo执⾏命令时临时提升为root⾝份,需要⽤户 添加到sudoers⽂件中 修改: /etc/sudoers 在⽂件最后添加 ⽤户名 ALL=(ALL:ALL) ALL

  • 删除⽤户

        sudo userdel -r ⽤户名 

3.常用的shell命令

下方有菜鸟教程的链接,其实这些命令会用用即可(多操作就潜移默化的记住了)

Linux 命令大全 | 菜鸟教程 (runoob.com)

  • pwd

用于显示文件系统中的当前工作路径(输出绝对路径)

  • ls

显示出对应的目录中的信息(有哪些文件)

ls----列出当前工作目录中有那些文件

ls +选项+参数(目录路径) //使用相对路径和绝对路径都可

    • -i列出的指定⽬录中⽂件信息包含inode号,inode就是⼀个⽂件的唯 ⼀标识

 

    • -a:列出的⽬录的所有⽂件(包括隐藏⽂件)

             

 

    • -l列出⽬录中的⽂件的详细信息(⽂件属性)

 

  • cd 改变当前的⼯作⽬录

        配合../上级目录、./同级目录、绝对路径、相等路径使用

  • mkdir 创建⼀个⽬录⽂件        

        创建的是目录,相当于win的文件夹

-p:如果路径中的⽬录不存在,则依次创建,直到最终要创建的⽬录创 建完成

  • rm  删除⽂件或⽬录⽂件

rm  要删除的(⽬录)⽂件的路径

-f:    忽略不存在的文件,从不给出提示。
-i:     进行交互式删除
-r -R:   指示rm将参数中列出的全部目录和子目录均递归地删除。
-v:    详细显示进行的步骤
--help     显示此帮助信息并退出
--version  输出版本信息并退出

  • cat 查看显⽰指定⽂件的内容

cat + file⽂件路径

-E 在每⼀⾏结束时添加⼀个$符号

  • touch 创建⼀个普通⽂件

touch + ⽂件的路径(中间路径必须存在)

如果创建的⽂件存在,则会修改最后修改时间

  • file 判断文件类型

file + ⽂件路径

  • cp 将(⽬录)⽂件拷⻉到另⼀个路径中

cp 源⽂件路径 ⽬标路径

-r:拷⻉⽬录⽂件

  • mv 将源(⽬录)⽂件移动到⽬标⽬录中
  • diff ⽐较两个⽂件,显⽰出不同地⽅

diff ⽂件路径1 ⽂件路径2

  • ln 创建链接⽂件

它的功能是为某一个文件在另外一个位置建立一个同步的链接。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

  • 软链接:参数 -s

1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式

2.软链接可以 跨文件系统 ,硬链接不可以

3.软链接可以对一个不存在的文件名进行链接

4.软链接可以对目录进行链接

  • 硬链接

1.硬链接,以文件副本的形式存在。但不占用实际空间。

2.不允许给目录创建硬链接

3.硬链接只有在同一个文件系统中才能创建

  • 硬链接和符号链接的相同点

都可以修改原文件:硬链接是在inode层面上去修改inode记录的数据区块,修改其中一个硬连接文件则所有文件都会被同步修改;符号链接作为“快捷方式”修改的是它所存放的链接并通过链接打开的原文件。

  • 硬链接和符号链接的不同点

建立链接之后再删除原文件则符号链接失效,但是硬链接不会失效:符号链接失效的原理与“快捷方式”相同,硬链接不失效是因为已经建立了inode到数据区块的链接;

读取权限不同:硬链接的权限和原文件的权限相同,符号链接的权限是777(rwxrwxrwx);

文件类型不同:硬链接是普通文件(-),符号链接是链接文件(l);

占用空间不同:硬链接不产生inode和数据区块,符号链接会占用inode和区块,因此硬链接不占用任何空间,而符号链接占用的空间大小就是链接的大小(比如’/home/user/'有11个字母,所以相应的符号链接应该占用了11个Byte)

  • 硬链接的限制:

不能链接跨文件系统的文件

不能连接目录:目录中的文件都要建立硬链接。

软链接的限制:

创建软连接的时候最好使用绝对路径创建,这样创建好的软连接,移动到其他目录下依然有效,若用相对路径创建则无效。

  • chmod:修改⽂件权限

执⾏修改权限,需要⽂件的⽤户才能执⾏修改,由于root⽤户是管理员 ⽤户拥有最⾼权限也可以改⽂件权限

chmod 权限 ⽂件

权限:

u+[r、w、x]在⽤户权限中添加权限

u-[r、w、x]在⽤户权限中删除权限

g+[r、w、x]在⽤户组权限中添加权限

g-[r、w、x]在⽤户组权限中删除权限

o+[r、w、x]在其他⽤权限中添加权限

o-[r、w、x]在其他⽤权限中删除权限

对于⽂件有三组权限:

每⼀组权限可以⽤3个⼆进制位表⽰,每⼀位表⽰ ⼀种权限:

|第⼀位|第⼆位|第三位| |:-|:-|:-| |r|w|x| |1/0|1/0|1/0|

权限可以⽤9位⼆进制表⽰: |第⼀组|第⼆组|第三组| |:-|:-|:-| |⽤户|⽤户组|其他⽤户|

chmod 权限值 ⽂件-----设置⽂件权限

权限值:使⽤⼋进制表⽰(⼀位⼋进制就可以表⽰⼀组权限)

进制的表⽰:

⼆进制数: 在数据前加上 0b ;

        如:0b1010--⼆进制数1010

⼋进制数:在数据前加上0 ;

         如: 0666----⼋进制数 666

⼗进制数:在数据前不加任何表⽰ ;

         如:120----⼗进制120

⼗六进制:在数据前加0x ; 如: 0x120-----⼗六进制120

在创建⽂件时,默认⽂件权限为: 普通⽂件:0664 ⽬录⽂件:0775

提权

在执⾏命令时,在命令前 加上 sudo 就表⽰执⾏这条命令时提升为root⽤户 ⾝份执⾏

  • chgrp 修改权限

要改变拥有组,必须是root管理员⽤户⾝份

chgrp ⽤户组 ⽂件

chown:改变⽂件拥有者 要改变拥有者,必须是root管理员⽤户⾝份 chown ⽤户名 ⽂件 chgrp:改变⽂件拥有组 要改变拥有组,必须是root管理员⽤户⾝份 chgrp ⽤户组 ⽂件

  • tar 压缩与归档

tar(选项)(参数)

归档⽂件:把多个⽂件打包成⼀个⽂件

压缩⽂件:把已经打包的这⼀个⽂件进⾏压缩

1. 创建归档⽂件 把多个⽂件合并成⼀个⽂件

        tar -cvf 归档⽂件名.tar ⽂件1 ⽂件2 ⽂件3 ⽂件4 ⽂件5..

2. 释放归档⽂件 把归档⽂件中合并打包的⽂件释放出来

        tar -xvf 归档⽂件名.tar

        压缩与解压: 把多个⽂件进⾏打包然后进⾏压缩,把压缩的⽂件解压然后把打包⽂件 释放

3. 使⽤gzip算法进⾏压缩与解压

        压缩:-z使⽤gzip算法

        tar -czvf 压缩⽂件名.tar.gz ⽂件1 ⽂件2 ⽂件3 ⽂件4...

        解压: tar -xzvf 压缩⽂件名.tar.gz

4. 使⽤bzip2算法进⾏压缩与解压

        压缩:-j使⽤bzip2算法

        tar -cvjf 压缩⽂件名.tar.bz2 ⽂件1 ⽂件2 ⽂件3 ⽂件4...

        解压: tar -xvjf 压缩⽂件名.tar.bz2

5. 使⽤zip算法进⾏压缩解压

        压缩: zip 压缩⽂件名.zip ⽂件1 ⽂件2 ⽂件3 ⽂件4...

        解压: unzip 压缩⽂件名.zip

参数

  • -A或--catenate 新增文件到已存在的备份文件。
  • -B或--read-full-records 读取数据时重设区块大小。
  • -c或--create 建立新的备份文件。
  • -C<目的目录> 切换到指定的目录。
  • -d 对比备份文件内和文件系统上的文件的差异。
  • -f<备份文件>或--file=<备份文件> 指定备份文件。
  • -g或--listed-incremental 处理GNU格式的大量备份。
  • -G或--incremental 处理旧的GNU格式的大量备份。
  • -h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
  • -i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
  • -k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
  • -K<文件>或--starting-file=<文件> 从指定的文件开始还原。
  • -l或--one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
  • -L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
  • -m或--modification-time 还原文件时,不变更文件的更改时间。
  • -N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
  • -o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
  • -O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
  • -p或--same-permissions 用原来的文件权限还原文件。
  • -P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
  • -r或--append 新增文件到已存在的备份文件的结尾部分。
  • -t或--list 列出备份文件的内容。
  • -u或--update 仅置换较备份文件内的文件更新的文件。
  • -U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
  • -v或--verbose 显示指令执行过程。
  • -V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
  • -w或--interactive 遭遇问题时先询问用户。
  • -W或--verify 写入备份文件后,确认文件正确无误。
  • -x或--extract或--get 从备份文件中还原文件。
  • -X<范本文件>或--exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
  • -z或--gzip或--ungzip 通过gzip指令处理备份文件。
  • -Z或--compress或--uncompress 通过compress指令处理备份文件。
  • -<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
  • --after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
  • --atime-preserve 不变更文件的存取时间。
  • --delete 从备份文件中删除指定的文件。
  • --exclude=<范本样式> 排除符合范本样式的文件。
  • --group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
  • --help 在线帮助。
  • --ignore-failed-read 忽略数据读取错误,不中断程序的执行。
  • --version 显示版本信息。
  • --volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。

4.shell脚本(shell编程)

在shell中命令不是单独存在的,可能需要多条命令结合使用,将shell命令按照一定的逻辑顺序组织在一个文件中,组合成一些完整命令要求,执行文件,就把其中的命令按照定义的逻辑依次执行--这些shell文件称之为shell脚本(写shell脚本就是shell编程)

shell文件是以.sh作为后缀名称

执行shell脚本(文件):

  • 对shell文件添加执行权限,按照程序的方式执行

chmod u+x xxxx.sh

./xxx.sh

  • 使用对应的shell解析器来解析执行

bash xxx.sh

shell语法

  1. 变量定义

变量=值

  1. 引用变量

$变量

  1. 变量的输入

read 变量1 变量2 变量3...

如果输入的个数大于变量的个数,则将最后一个变量存储之后的所有数据

  1. 变量的输出

echo $变量1 $变量2

  1. 引号的作用
  • '“” ---表示字符串:会解析引号中的变量
  • ‘’ ---表示字符串:不会解析引号中的变量
  • `` ----表示表⽰执⾏指令并得到指令的结果
  1. 位置变量

$?:获取上一条命令的执行结果(执行状态值),若上一条命令执行成功,值$?=0,如果不成功非0

  1. 条件判断

条件判断:test

字符串:

s1 = s2----判断相等

s1 != s2---判断不相等

-z s1 -----判断字符串长度是否为0

-n s1------判断字符串长度不为0

整数:

a -gt b ----判断a是否大于b

a -ge b ----判断a是否大于或等于b

a -lt b -----判断a是否小于b

a -le b-----判断a是否小于或等于b

a -eq b ---判断a是否等于b

a -ne b ---判断a是否不等于b

文件测试:

-d filename----判断文件是否是一个目录

-e filename----判断文件是否存在

-f filename-----判断文件是否是普通文件

-L filename----判断文件是否是链接文件

-s filename----判断文件是否存在且长度不为0

-r filename-----判断文件是否可读

-w filename----判断文件是否可写

-x filename----判断文件是否可执行

-c filename----判断文件是否为字符设备

逻辑运算:

-a :and逻辑与 多个条件为真,结果为真

-o:or逻辑 只要一个条件为真,结果为真

!:not逻辑非 得到的结果与条件相反

  1. 流程控制
    1. 选择结构:

        语法一:if语句

        if[ 条件表达式 ] //空格隔开

        then //类似{

                命令表

        fi //类似}

        语法二:if --else语句

        if[ 条件表达式 ]

        then

                命令表

        else

                命令表

        fi

        

        语法三:if --else if --else 语句

        if[ 条件表达式 ]

        then

                命令表

        elif [ 条件表达式 ]

        then

                命令表

        else

               命令表

        fi

    1. 循环结构

expr:算术指令

expr $1 算术运算符 $2

while[ 条件表达式 ] --满足条件就执行循环,不满足就跳出

do

命令表

done

break 退出循环

continue 跳出本次循环

for 变量名 in 单词表---如果变量能够从单词中取出一个值进行赋值,就循环一次

do

        命令表

done

  • 函数

函数定义

函数名()

{

        命令集合

}

function 函数名()

{

        命令集合

}

函数调用:执行函数

函数名

在函数中如果有参数,则只需要在函数调用时传递参数,在函数定义时不用写

函数名 值1 值2

在函数的定义中,函数会默认存在位置变量,会自动使用位置来获取到传递的值

函数返回值:

在函数体,使用echo输出要返回的内容

在调用时,如果没有用变量来进行存储值,则打印结果,但是使用变量进行存储赋值(调用函数是使用``来获取函数的执行结果)则不会打印,叫返回值存储到变量

如s=`add 2 3`

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/147764
推荐阅读
相关标签
  

闽ICP备14008679号