文章目录
一:x-shell 介绍
1.1 shell是什么
shell中文意思贝壳,寓意类似内核的壳。shell是一个用c语言编写的应用程序,这个应用程序提供了一个界面,用户可以通过这个界面访问操作系统内核的服务,它是用户使用linux的桥梁,shell既是一种解释型命令语言,也是一种程序设计语言,简而言之就是只要能够操作应用程序的接口都能够称为SHELL。狭义的shell指的是命令行方面的软件,广义的SHELL则包括图形界面。
shell的种类:
- bash
- sh Debian 容器
- ash
- zsh
我们可以用shell实现对Linux系统的管理例如:
- 文件管理
- 用户与权限管理
- 进程管理
- 磁盘管理
- 网络管理
- 软件管理
1.2 shell指代的两层意思
-
命令解释器:
python语言 《==================》shell命令
python解释器《=================》shell解释器
操作系统《=====================》操作系统
计算机硬件《===================》计算机硬件
sh(Bourne Shell)是一个早期的重要shell,1978年由史蒂夫·伯恩编写,并同Version 7 Unix一起发布。
bash(Bourne-Again Shell)是一个为GNU计划编写的Unix shell。1987年由布莱恩·福克斯创造。主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。
dash (Debian Almquist shell)一种 Unix shell。它比 Bash 小,只需要较少的磁盘空间,但是它的对话性功能也较少。它由 NetBSD版本的Almquist shell (ash)发展而来,于1997年由赫伯特·许(Herbert Xu)移植到Linux上,于2002年改名为 dash。
//sh 遵循POSIX规范:“当某行代码出错时,不继续往下解释”。bash 就算出错,也会继续向下执行。
//sh 跟bash的区别,实际上是bash有没开启POSIX模式的区别。
//简单说,sh是bash的一种特殊的模式,sh就是开启了POSIX标准的bash, /bin/sh 相当于 /bin/bash --posix。
//在Linux系统上/bin/sh往往是指向/bin/bash的符号链接
// ln -s /bin/bash /bin/sh
实验:
阶段一:
[root@localhost ~]#cat test.sh
#!/bin/sh
source abc.sh
echo "hello"
[root@localhost ~]#chmod a+x test.sh
[root@localhost ~]#./test.sh
./test.sh: line 2: source: abc.sh: file not found
阶段二:
[root@localhost ~]#cat test.sh
#!/bin/bash
source abc.sh
echo "hello"
[root@localhost ~]#./test.sh
./test.sh: line 2: abc.sh: No such file or directory
hello
阶段三:
[root@localhost ~]# sh test.sh
test.sh: line 2: source: abc.sh: file not found
#表示虽然脚本中指定了#!/bin/bash,但是如果使用sh 方式运行,如果source不成功,也不会运行source后面的代码。
1.2 shell脚本的概念
Shell 脚本(shell script)是一种为 shell 编写的脚本程序。常说的shell通常都是指 shell 脚本,但shell和shell script是两个不同的概念。通常说“shell编程”都是指 shell 脚本编程,不是指开发 shell 自身。
1.3 了解知识bash posix
GNU bash
Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同,即命令大都通用。当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用。
bash是大多数Linux系统以及Mac OS X v10.4默认的shell,bash具有极强的可移植性,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。bash的命令语法是Bourne shell命令语法的超集。数量庞大的Bourne shell脚本大多不经修改即可以在bash中执行,只有那些引用了Bourne特殊变量或使用了Bourne的内置命令的脚本才需要修改。
bash的命令语法很多来自Korn shell (ksh) 和 C shell (csh), 例如命令行编辑,命令历史,目录栈,$RANDOM 和 $PPID 变量,以及POSIX的命令置换语法: $(...)。GNU bash作为一个交互式的shell,按下TAB键即可自动补全已部分输入的程序名,文件名,变量名等等。
posix:
// 一:简单来说:
POSIX(Portable Operating System Interface,可移植操作系统接口),是操作系统为应用程序提供的接口标准。
简单的说, POSIX(主要是解决了应用程序在各个操作系统上兼容性这样一个普遍存在的问题。只要一个应用程序的开发是为了在一个实现了POSIX模式的操作系统上运行,那么这个应用程序就可以在所用实现了POSIX模式的操作系统上运行。
// 二:
//1、POSIX定义
POSIX: Portable Operating System Interface of Unix.,可移植操作系统接口。X表示其是对Unix API的传承。
POSIX标准由IEEE(电气和电子工程师协会)发布,定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行软件而定义的一系列API标准的总称。
简单可以理解POSIX标准是为操作系统设计API时遵循的规范,一套规范的系统调用集。
//2、POSIX的诞生/解决的问题
POSIX的诞生和Unix的发展是密不可分的。当年最早的Unix,源代码流传出去了,加上早期的Unix不够完善,于是之后出现了好些独立开发的与Unix基本兼容但又不完全兼容的OS,通称Unix-like OS。这样版本混乱的情况导致相互之间的竞争和不兼容之处越来越多,给软件的可移植性带来很大困难,对Unix的发展极为不利。
为了提高兼容性和应用程序的可移植性,结束混乱局面,IEEE提出了POSIX标准,POSIX在源代码级别上定义了一组最小的Unix(类unix)操作系统接口。 这套标准涵盖了很多方面,比如Unix系统调用的C语言接口,shell程序和工具、线程和网络编程等。POSIX标准意在期望获得源代码级别的软件可移植性。为一个POSIX兼容的操作系统编写的程序,可以在任何其他POSIX操作系统上编译执行。
POSIX现在已经发展成为一个非常庞大的标准族,并不局限于Unix, 一些其他的操作系统,如Microsoft windows NT, Linux等都支持或者部分支持POSIX标准。
//3、POSIX标准的思路
问题: 不同操作系统内核为同一功能提供的系统调用(函数)是不同的,例如创建进程,linux下是fork函数,windows下是createprocess函数,如果在Linux下写了一个程序用到了fork函数,要往windows上移植就得把源代码里面的fork通通改成createprocess,然后重新编译。
解决方法: 定义POSIX标准, linux和windows实现基于POSIX标准,提供同样的接口,例如定义创建进程的接口为posix_fork(示例名/非真实名字), 且linux和windows都把各自创建进程的调用封装成posix_fork,都声明在unistd.h里。 这样程序员编写应用时,只需包含unistd.h, 调用这个POSIX标准中定义的API接口: posix_fork函数,即可实现源代码级别的可移植。
二:shell交互式环境
登录用户后进入解释器bash的交互式环境,可以敲命令,交互式环境的命令提示符如下
[root@xxx ~]# #号代表超级管理员用户对应的命令行
[root@xxx ~]$ $号代表普通用户对应的命令行
root==>当前登录的用户
@=====>分隔符
xxx==>主机名
~====>当前所在的路径
// 创建普通系统用户
useradd egon
// 交互式设置密码
passwod egon
// 非交互式设置密码
echo "123" | passwd --stdin egon
三:shell命令语法
三部分组成:
- 命令:要执行的操作
- 选项:如何具体执行操作,通常以-,–,+开头,(可选)
- 参数:具体操作对象(可选)
ps:linux认为命令执行完毕后没有提示就是正确,linux继承unix的优良传统
例:
ls ----------------> # 查看当前家目录底下的文件
ls /root -----------> # 查看root底下的文件
ls -l /root --------> # 查看root底下的文件,以列表的方式显示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvEgZPuC-1615480926814)
四:bash解释器
4.1 bash解释器的特性
按tab可将命令和文件自动补全
五:命令的优先级
以路径
--》绝对
---》相对
alias别名
compound commands复合命令:一条命令制造出几次运行,for
founction函数:命名一个内容直接调
build in内嵌:如cd,pwd等,可用type -a查看
hash:相当于一个表,上面放的是提前缓存好的内容,随要随取
pash:环境变量,一个文件夹一个文件夹的找,没有pash过去,查看环境变量echo,类似一张纸,上面放的是存放命令所在的文件夹
六:系统核心命令
6.1 cd
Linux中切换目录的命令。
格式:
cd +路径:(需要切换的目录路径)
路径:
-
绝对路径:从根路径开始
-
相对路径:从当前目录开始
-
特殊路径:
- . : 当前目录
- … : 上级目录
注:系统根指的是 /.
6.2 ls
查看对应路径下的文件。
格式:
ls +路径(默认是当前路径)
ls 常见选项 :
-a all,查看目录下的所有文件,包括隐藏文件
-l 长列表显示,简写ll
-h human 以人性化方式显示出来
-d 只列出目录名,不列出其他内容
-t 按修改时间排序
-r 逆序排列
-i 显示文件的inode号(索引号)
例:
要求:在当前目录查看/root目录下有哪些文件?
参数-a:
all,查看目录下的所有文件,包括隐藏文件,(以.开头)
[root@localhost yum.repos.d]# ls -a ../../root
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
-l : 列出指定路径下的文件详细信息
[root@localhost yum.repos.d]# ls -l ../../root
total 4
-rw-------. 1 root root 1757 Mar 3 10:51 anaconda-ks.cfg
权限位 用户组 用户名 时间 文件名称
6.3 pwd
显示当前所在路径。
[root@localhost yum.repos.d]# pwd
/etc/yum.repos.d
[root@localhost yum.repos.d]# cd /root/
[root@localhost ~]# pwd
/root
[root@localhost ~]#
6.4 cat
查看文件内容的命令
格式:
cat +[路径]文件名称
6.5 mv
移动一个文件
格式:
mv [原来的文件路径] [新的文件的路径]
可以使用*匹配多个文件。
[root@localhost yum.repos.d]# mv CentOS-* backup/
mv: overwrite ‘backup/CentOS-Base.repo’? y
[root@localhost yum.repos.d]# ls -l
total 0
drwxr-xr-x. 2 root root 187 Mar 3 16:14 backup
[root@localhost yum.repos.d]#
6.6 查看系统版本
[root@localhost yum.repos.d]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
七:管道的概念
本质:共享内存空间
命令1|命令2:命令1会把结果放入管道,命令2会从管道取出结果来运行