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语法
- 变量定义
变量=值
- 引用变量
$变量
- 变量的输入
read 变量1 变量2 变量3...
如果输入的个数大于变量的个数,则将最后一个变量存储之后的所有数据
- 变量的输出
echo $变量1 $变量2
- 引号的作用
- '“” ---表示字符串:会解析引号中的变量
- ‘’ ---表示字符串:不会解析引号中的变量
- `` ----表示表⽰执⾏指令并得到指令的结果
- 位置变量
$?:获取上一条命令的执行结果(执行状态值),若上一条命令执行成功,值$?=0,如果不成功非0
- 条件判断
条件判断: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逻辑非 得到的结果与条件相反
- 流程控制
- 选择结构:
语法一:if语句
if[ 条件表达式 ] //空格隔开
then //类似{
命令表
fi //类似}
语法二:if --else语句
if[ 条件表达式 ]
then
命令表
else
命令表
fi
语法三:if --else if --else 语句
if[ 条件表达式 ]
then
命令表
elif [ 条件表达式 ]
then
命令表
else
命令表
fi
-
- 循环结构
expr:算术指令
expr $1 算术运算符 $2
while[ 条件表达式 ] --满足条件就执行循环,不满足就跳出
do
命令表
done
break 退出循环
continue 跳出本次循环
for 变量名 in 单词表---如果变量能够从单词中取出一个值进行赋值,就循环一次
do
命令表
done
- 函数
函数定义
函数名()
{
命令集合
}
function 函数名()
{
命令集合
}
函数调用:执行函数
函数名
在函数中如果有参数,则只需要在函数调用时传递参数,在函数定义时不用写
函数名 值1 值2
在函数的定义中,函数会默认存在位置变量,会自动使用位置来获取到传递的值
函数返回值:
在函数体,使用echo输出要返回的内容
在调用时,如果没有用变量来进行存储值,则打印结果,但是使用变量进行存储赋值(调用函数是使用``来获取函数的执行结果)则不会打印,叫返回值存储到变量
如s=`add 2 3`