Ⅰ shell介绍
Shell 中文意思贝壳,寓意类似内核的壳。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,简而言之就是只要能够操作应用程序的接口都能够称为SHELL。
狭义的shell指的是命令行方面的软件,广义的SHELL则包括图形界面。
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
所以说,shell可以指代两层意思:
1、命令解释器
python语言 《==================》shell命令
python解释器《=================》shell解释器
操作系统《=====================》操作系统
计算机硬件《===================》计算机硬件
我们可以SHELL实现对Linux系统的管理例如:
1. 文件管理
2. 用户与权限管理
3. 进程管理
4. 磁盘管理
5. 网络管理
6. 软件管理
2、shell脚本
Shell 脚本(shell script)是一种为 shell 编写的脚本程序。常说的shell通常都是指shell 脚本,
但shell和shell script是两个不同的概念。通常 说“shell编程”都是指 shell 脚本编程,
不是指开发 shell 自身。
- 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模式的操作系统 上运行。
POSIX定义
POSIX: Portable Operating System Interface of Unix.,可移植操作系统接口。X表示其是对Unix API的传承。
POSIX标准由IEEE(电气和电子工程师协会)发布,定义了操作系统应该为应用程序提供的接口标准,
是IEEE为要 在各种UNIX操作系统上运行软件而定义的一系列API标准的总称。 简单可以理解POSIX标准
是为操作系统设计API时遵循的规 范,一套规范的系统调用集。
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标准。
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@localhost ~]#
[root@localhost ~]# #号代表超级管理员用户对应的命令行
[root@localhost ~]$ $号代表普通用户对应的命令行
root ==>当前登录的用户
@ =====>分隔符
localhost ==>主机名
~ ====>当前所在的路径
创建普通系统用户
useradd wot
交互式设置密码
passwd wot
[root@localhost ~]# useradd wot -- 创建用户
[root@localhost ~]# passwd wot -- 设置密码
Changing password for user wot.
New password: -- 输入密码,光标没有反应挺不适应的
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password: -- 出现上面的提示警告,密码过于简单,然后确认密码
passwd: all authentication tokens updated successfully. -- 出现这个表示设置完成
// 非交互式设置密码
echo "新密码" | passwd --stdin 用户名
[root@localhost ~]# echo "qwer"|passwd --stdin wot -- 直接设置密码
Changing password for user wot.
passwd: all authentication tokens updated successfully.