目录
Linux基础--------了解熟悉
1.什么是linux
内核:能够让计算机硬件进行工作,能够运行最核心的功能组合,计算机跑起来,就叫做内核。
llnux内核:由linus和linux社区的人员一起开发出来的内核
linux内核基础上,在加上各个厂商匹配内核开发网络管理、左面系统、快捷功能等、形成完整的操作系统
操作系统:
ubuntu
debiao
red hat
centos stream
linux操作系统
linux内核是免费的开源的内核程序
2.linux系统体系结构
linux 内核
shell(壳):通过shell提供内核的功能
文件系统
应用程序
1.linux内核
内核是linux系统中最底层,提供系统中核心功能并允许有有序访问硬件资源管理:
输入输出设备、进程执行情况、文件系统操作、内存资源管理
linux内核支持:
多任务、多用户
2.shell
shell叫做命令解释器,壳-----保护内核
当执行程序时,把程序的各种操作指令进行解释执行,通过命令解释器就让内核执行对应的操作
作用:
提供一个方式,可以让用户与内核(操作系统)进行交换
3.文件系统
文件系统就是用于组织和管理计算机存储设备上的大量文件
在windows系统使用NTFS格式文件系统
在linux中目前一般使用ext4格式文件
文件夹----------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:作为扩展的、更多的为禁止程序存放的目录
/user:标准库、第三方库存放目录
/sys:系统运行时的文件存放目录
/tmp:用于存放临时文件
linux把一切都看做是文件(一切皆为文件)
4.shell命令
shell就是完成用户与内核之间的交互
shell命令:
让系统内核帮助完成一些具体的一些功能
shell就是命令解释器,将用户的命令(程序)解析称操作系统 能够理解的指令,实现用户与内核的交互。
shell命令的输入,在终端提示符,标识命令的输入位置。
用户:当前打开终端的用户是谁
主机名:我们电脑的名字
工作路径:当前是在哪个目录下输入命令执行
用户识别:$普通用户 #:管理员用户root
特殊的路径说明:
~:在当前的用户的家目录(用户目录)
. : 表示当前目录文件
.. :表示当前工作目录的上一层目录文件
命令格式:
command + [option] +[argment]
命令 选项 参数
不写表示使用默认选项、默认参数
命令:shell要解析的指令内容,要执行的内容
选项:改变命令执行动作的类型(命令功能选择), 选项用 -选项 表示 可以有多个选项:
选项1选项2..-选项1 - 选项2 ..
参数:命令要作用的目标是谁
如果需要在一行终端命令提示符写多个命令用;隔开,如果一行写不完\(续行)符号 表示命令未输入结束
有时命令不会携带选项或参数,不写就是默认选线、默认参数
man command :查看手册命令中说明帮助
2.路径表示
在命令中如何表示一个文件(或一个目录文件)
在认识linux文件系统是一颗倒置的树,分层的文件组织结构,表示一个文件,只需要确定文件在哪个目录下以及叫什么文件名,在不同的存储位置,可以确定唯一的一个文件,
路径:文件是在哪个目录下
-
绝对路径
对于linux文件系统,只有一个根目录位置(/),表示文件系统的开始位置(所有内容都储存在/里面),以根为起点来表示一个文件的路径,文件在文件系统中准确位置。
如:(名单的绝对路径)
/home/ubuntu/code/221101/名单.png
-
相对路径
默认从当前的用户的工作路径位置开始,找到对应文件或目录的位置。
如:(名单的相对路径)
code/221101/名单.png
3.常用的shell命令
pwd
用于显示在文件系统中当前工作绝对路径
如:~
pwd
/home/ubuntu
ls
显示对应的目录中的信息(有哪些文件)
ls------列出当前工作目录有哪些文件
ls+选项+参数(目录路径)
-i:列出指定目录中文件信息包含inode号,inode就是一个文件的唯一标识
-a:列出的目录的所有文件(包括隐藏文件)
-l:列出目录中的文件的详细信息(文件属性)
-rw------- 1 root root 1964400640 10月 31 22:13 swapfile dr-xr-xr-x 13 root root 0 11月 17 14:15 sys
文件类型 | 文件权限 | 文件硬链接数 | 文件拥有者 | 文件拥有组 | 文件大小 | 最后修改时间 | 文件名 |
---|---|---|---|---|---|---|---|
第一个符号 | 2~10、共9个字符 | 数字 | 用户名 | 用户组 | 文件内容所占空间(数字) | 最后一次修改文件内容的时间 | 文件的名字 |
-:表示普通文件(二进制、文本) | 权限值有9个、分为三组 | 可以认为文件备份有几个 | 文件的拥有者 | 文件拥有者所在的组 | |||
d:表示目录文件 | 第一组:用户的权限 | 有几份文件完全一致 | 第一组用户权限(创建者) | 第二组用户权限 | |||
p:表示管道文件 | 第二组:用户组的权限 | ||||||
s:表示套接字文件 | 第三组:其他用户权限 | ||||||
c:表示字符设备文件 | |||||||
b:表示块设备文件 | |||||||
l:表示符号链接文件 |
权限:
第一组 | 第二组 | 第三组 |
---|---|---|
3位、用户权限 | 3位、用户组的权限 | 3位、其他用户权限 |
第一位:读的权限 、第二位:写的权限、第三位:执行权限 | 第一位:读的权限 、第二位:写的权限、第三位:执行权限 | 第一位:读的权限 、第二位:写的权限、第三位:执行权限 |
为1表示有权限、为0表示没有权限
在显示权限时:
如果第一位为1表示有读权限------r ;如果第一位为0表示没有读权限显示-
如果第二位为1表示有写权限------w; 如果第二位为0表示没有写权限显示-
如果第三位为1,表示有执行权限---x;如果第三位为0表示没有执行权限显示-
如果是目录:
文件硬链接数,表示目录中的文件个数
文件权限,r读表示能够进入目录查看目录下有什么内容(文件);w写表示能够在目录下创建,删除文件;x执行表示能够访问目录
cd
改变当前的工作目录
cd 参数(工作路径----------必须存在)
mkdir
创建目录
mkdir+要创建目录的路径
-p: 递归创建文件夹
如果路径中的目录不存在,则依次创建,直到想要创建的目录完成。
rm
rm +参数(文件路径)
删除此文件或目录文件
-f:强制删除文件或文件夹,即使文件夹不为空 -r:递归的删除文件或文件夹 -i:删除文件或文件夹前须要确认
cat
查看指定文件的内容
cat+文件路径
-E:在每一行结束时在末尾添加$符号
touch
创建一个普通文件
touch + 文件路径(文件路径必须存在)
如果创建的文件存在就会更新修改时间
file
判断文件类型
file+文件路径
cp
将文件(目录)拷贝到另一个路径中
cp+原文件路径+目标路径
-r:拷贝目录文件
mv
将源文件(目录)移动到目标目录中(且改名)
mv+源文件+目标目录路径
移动到test目录 改为 2.c名字
diff
比较两个文件显示出不同的地方
biff +文件路径1+文件路径2
ln
创建链接文件
1.硬链接文件
在文件系统中创建一份和原文件完全一致的文件,创建的新文件和原文件会一直保持一致(修改其中一个文件,其他硬链接文件都会修改)删除一个硬链接对其他硬链接文件没有影响
ln +源文件+ 硬链接
2.符号链接文件(软链接)
符号链接也叫软链接,就是对文件创建了一个快捷方式,操作符号链接就是操作源文件,只是符号链接关联上源文件,能看到源文件内容而已,改变源文件,符号链接也随之改变。
符号链接不能单独使用,删除源文件,符号链接也就是随之失效。
ln -s +源文件 +符号链接文件
tar
归档与压缩
1.归档文件:把多个文件打包成一个文件
压缩:把一个打包的文件进行压缩(空间变小)
把多个文件合并成一个文件
tar -cvf 归档文件名.tar 文件1 文件2 文件3 ...
2.释放归档文件
把归档个文件中合并打包的文件释放出来
tar -xvf 归档文件名.tar
3.压缩与解压
把多个文件进行打包然后进行压缩,把压缩的文件解压然后把打包的文件释放
1.使用gzip算法进行压缩与解压
压缩:-z 使用gzip算法
tar -czvf +压缩文件名.tar.gz 文件1 文件 2 文件3...
解压:
tar -xzvf 压缩文件名 .tar .gz
2.使用bzip2 算法进行压缩与解压
压缩: -j使用bzip2算法
tar -cvjf压缩文件名tar bz2 文件1 文件2 文件3...
解压:
tar -xvjf 压缩文件名.tar bz2
3.使用zip算法进行压缩解压
压缩:
zip 压缩文件名.zip 文件 1 文件2 文件3 ...
解压:
unzip 压缩文件名.zip
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 权限值 文件-----设置文件权限
权限值:使用8进制表示(一位八进制就可以表示一组权限)
进制的表示:
二进制数:在数据前加上0b ;如:0b1010 ----二进制数1010
八进制数:在数据前加上0 ;如0470-------------八进制数470
十进制数:在数据前不加任何表示;如777---十进制777
十六进制数:在数据前加0x;如0x149---------十六进制149
在创建文件时,默认的文件权限为:
(-)普通文件:0664
(d)目录文件:0775
-
chown:改变文件拥有者
-
要改变拥有者,必须是root管理员用户
在执行命令时,在命令前加上sudo就表示执行这条命令时提升为root用户身份执行
chmod 用户名 文件
-
-
chgrp:改变拥有组
-
要改变拥有组,必须是root管理员用户
-
-
用户管理
-
修改用户名密码
passwd 用户名
但是在当前用户下只能修改当前用户的密码
如果要修改其他用户名的密码,必须是管理员root身份
sudo passwd 用户名
-
切换用户
su +用户名
exit退出当前用户
-
添加用户
只能root管理员进行添加
sudo adduser 新用户名
创建用户不能提升root权限
如果用户需要使用sudo 执行命令时临时提升为root身份,需要添加到sudoers中
修改:/etc/sudoers
在文件最后添加
用户名 ALL=(ALL:ALL)ALL
-
删除用户
sudo userdel -r 用户名
-
-
用户组管理
-
查看用户对应的用户组
groups用户名
-
创建用户组
sudo groupadd+用户组名
查看配置文件/etc/group 列举出组的信息
-
删除用户组
sudo groupdel+用户组名
-
-
输出重定向
echo xxxx
把xxxx新内容在终端上打印
重定向符:
>:输出到某个的内容指定输出到指定的某个位置(会先删除指定位置中的原内容)
>>:已追加的方式输出到指定位置
-
linux通配符
使用一些特使符号来代替文件名的字符
通配符 含义 例子 星号(*) 匹配任意长度的字符串 rm * 表示删除全部文件、rm *.txt 删除文件尾缀是.txt的文件 问号(?) 匹配一个长度的字符 用file_?.txt就可以匹配file_1.txt 、file_a.txt等、当不能匹配file_ab.txt的文件 方括号[...] 匹配方括号指定的一个字符 rm [1234].txt只能删除1.txt、2.txt、3.txt、4.txt、但不能删除12.txt、123.txt等。 方括号[^] 除了方括号指定的一个字符,其他均可匹配 cp [^23].txt.可以匹配1.txt、14.txt、不能匹配2.txt、3.txt 含有2,3的txt文件 方括号[-] 匹配方括号指定的范围的一个字符 rm[2-4].txt 能删除2.txt、3.txt、4.txt -
软件管理
-
直接执行二进制程序,打开软件使用
-
提供安装包,进行安装使用
安装软件:
软件存在依赖(需要一些其他的环境才能运行)
软件包管理:软件以及依赖说明
debian linux软件包管理机制-----软件后缀.deb
red hat linux软件包管理机制----软件后缀.rpm
-
本地软件包管理:
dpkg:离线包管理
dpkg -i:软件包路径-----------安装软件
dpkg-r软件名-------------------卸载软件
在线软件包管理:
在系统中有一个软件源配置文件,文件中列出了从了哪里下载进行安装
etc/apt/sources.list----软件源配置文件
apt-get/apt:用于获取(下载)、安装、卸载、查询为一体的软件包管理工具,去检查安装的软件对应的依赖环境安装没有(没有依赖也会安装)
Ping +地址 查看网络是否连通
apt软件包管理:
apt update
获取软件源地址中有哪些软件的软件列表apt install 软件包名
下载软件并进行安装
apt --reinstall install 软件包名
重新安装
apt remove 软件名
卸载指定的软件(已安装)
apt clear
清除安装包
shell脚本(shell编程)
在shell中命令不是单独存在的,可能需要多条命令结合使用
将shell命令按照一定的逻辑顺序组织在一个文件中,组合成一系列完整的功能命令要求,执行这些文件,就把其中的命令按照定义的逻辑依次执行------这个shell文件就叫做shell脚本(写shell脚本就是shell编程)
shell文件是以.sh做为后缀名
执行shell脚本(文件):
-
对shell文件添加执行权限,按照执行程序范式执行
chmod u+x xxxxx.sh
./xxx.sh
-
使用对应的shell解析器来解析执行
-
bash xxxx.sh
shell 语法:在编写Shell脚本时各个Shell命令可以进行关联
1.变量定义
变量=值
2.引用变量
$变量
3.变量的输入
read 变量名1 变量名2 变量名3...
4.变量的输出
echo $变量名1 $变量名2 ...
如果输入的数据超过变量的个数,则最后一个变量存储之后所有数据
5.引号的作用
“ ”----------表示字符串:会解析引号中的变量
' '-----------表示字符串:不会解析引号中的变量
“-----------反引号,表示执行运算指令并得到结果
6.位置变量
$?:获取上一条命令的执行结果(或状态值),若上一条命令执行成功值$?=0,如果不成功为非零
$1,$2,$3...$9:第一个参数,第二个参数,第三个参数......第九个参数
7.条件判断
条件判断:test
字符串:
s1 = s2 -----判断相等
s1 != s2-----判断不相等
-z s1---------判断字符串长度是否为0
-n s1--------判断字符串长度是否不为0
整数:
a -gt b ------判断a是否大于b
a -ge b------判断as是否大于或等于b
a -lt b--------判断是否小于b
a -le b ------判断是否小于或等于b
a -eq b ------判断a是否等于b
a -ne b-------判断是否不等于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逻辑非,得到的结果与条件相反
9.流程控制:
1.选择结构:
if[ 条件表达式 ]
then
命令表
fi
if [ 条件b表达式 ](注意左右两边空格)
then
命令表
else
命令表
fi
if [ 条件表达式1 ]
then
命令表
elif[ 条件表达式2 ]
then
命令表
elif[ 条件表达式3 ]
then
命令表
......
elif[ 条件表达式n ]
then
命令表
else
命令表
fi
2.循环结构
while [ 条件表达式 ] (注意空格)-------满足条件就执行循环,不满足就跳出循环
do
命令表
done
break
continue
expr:算术指令
’expr $1 算术运算符 $2‘
for 变量名 in 单词表 --------如果能够从单词表中取出一个值进行赋值,就循环执行一次
do
命令表
done
C语言for 循环格式
for((循环其实语句;循环条件语句;没出执行循环后的改变条件语句))
do
命令表
done
9.函数
函数定义:
函数名()
{
命令集合
}
founction 函数名()
{
命令集合
}
函数调用:执行函数功能
函数名
在函数中如果有参数,只需要在调用时传递参数就行,在定义时不用写
函数名 值1 值2 值3 ...
在函数的定义中,函数会自动使用位置变量($1,$2,$3(不写形参,自动获取))来接收传递的值
函数返回值:
在函数体中,使用echo输出要返回的那内容
在电泳时,如果没有用变量来进行存储赋值,则打印结果,但是如果使用变量进行存储赋值(调用函数时使用``来获取函数的执行结果)则不会打印,叫做返回值存储到变量
如:a=add 1 2