Alibaba Cloud Linux操作系统Shell程序

本文涉及的产品
轻量应用服务器 2vCPU 1GiB,适用于搭建电商独立站
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
简介: 了解Alibaba Cloud Linux Shell和用户Shell定制、C/C++编写一个简单的Shell程序

Alibaba Cloud Linux操作系统Shell程序

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息


2. shell的基础知识及使用

  1. Linux Shell的基础知识

1)Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。是在Linux内核与用户之间的解释器程序,现在Linux通常指/bin/bash解释器来负责向内核翻译以及传达用户/程序指令,shell相当于操作系统的“外壳”。

2)、shell不止有一种。在计算机历史的长河里,有许多种shell,例如:

①Bourne shell(简称为sh):第一个shell,UNIX上的标准shell,很多UNIX版本都配有sh。sh是第一个流行的Shell。

②C shell(简称为csh):这个shell的语法有点类似C语言,所以才得名为C shell ,简称为csh。

③Bourne Again Shell(简称为bash):这是对Bourne shell的增强版本。bash shell是Linux的默认shell。bash由GNU组织开发,保持了对sh shell的兼容性,是各种Linux发行版默认配置的 shell。尽管如此,bash和sh还是有一些不同之处:一方面,bash扩展了一些命令和参数;另一方面,bash并不完全和sh;兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用bash代替sh。

④Tenex C shell(简称tcsh):是C shell的增强版本,加入了命令补全功能,提供了更加强大的语法支持。

⑤ash:一个简单的轻量级的Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

  1. 默认的linux Shell ——bash Shell和ksh、tcsh以及zsh使用和设置
  2. shell常用命令的使用

cd命令

cd .. ——进入上级目录,cd 路径——切换到路径目录下

输入cd .. 可见 ~ 变为 / ,意味着从家目录切换到了根目录。家目录一般为用户目录。

输入命令 ls 可以看到根目录脚下的所有文件。

cd root / 又变回~,说明这里的家目录是root,因为我们目前使用的是root账户。

touch命令——新建一个文件

输入touch 1.c,在输入ls可以看到创建文件成功。亦可用vi编辑器创建文件,这里不再演示。

mkdir命令——新建文件夹

输入 mkdir new,再输入ls查看。

cat命令——查看当前文件内容

用vi/vim编辑器编辑1.c,这里不再演示,直接上结果。

./+可执行文件名——运行可执行文件

gcc编译并生成可执行文件

2)更换其他类型的shell

Linux默认使用的是bash,但是其实支持许多类型的。可以通过这个命令查看linux支持的cat /etc/shells

用echo $SHELL可以查看系统默认的shell

没有ksh、tcsh、zsh,需要安装

输入yum -y install ksh tcsh zsh进行这些shell的安装,并再次查看当前linux的shell,发现已经都成功安装。

chsh命令——用来更换登录系统时使用的shell

通过chsh -s /bin/xxx 尝试shell的切换

上述命令只是修改了登录时启动的shell,如果要切换shell需要重新登录

通过sudo login想重新登录,系统提示远程连接断开,点击重新连接后,再查看当前的shell,改变了


3. shell的原理及实现

1.了解管道和进程组、会话和进程组、会话和作业控制的内容。

管道 :多个进程的一种通信手段 共享内存区,进程把共享信息放在那里,通过一些API提供信息交换

进程组 :是一个或者多个进程的集合,通常与一组作业相关联

会话 :是一个或者多个进程组的集合,一个会话可以有一个控制终端

作业控制: 让一个作业在前台或者后台运行

2.shell原理

shell就是利用程序替换的原理进行实现的。fork一个进程,如果fork成功,子进程执行指定的操作或命令,需要执行exec族函数;父进程⽤wait命令等待子进程结束。wait系统调⽤同时从内核取得退出状态或者信号序号以告知⼦进程是如何结束的。

3.实现一个简单的命令解释器,即Linux中的Shell程序。要求其设计类似目前流行的Shell解释程序,但不需要具备太复杂的功能。

这部分需要独立完成,并不会给出教程,实现shell过程中可能会用到的系统调用如下。

(1) pid_t fork(void):创建一个新的进程。返回值:一次调用两次返回,子进程返回0,父进程返回子进程ID,创建进程失败,返回-1.

注意:通过fork创建的子进程,会拷贝父进程的(数据段、bss段、堆、栈、I/O流缓冲区等)数据段,与父进程共享代码段。可以根据返回值的不同,让父子进程进入不同的分支,执行不同的代码。

(2) int execvp(const char *file, char * const argv[]):加载一个可执行程序到调用进程的地址空间,然后执行这个程序。如果成功,它就会覆盖当前运行的进程内容。有若干个类似的exec系统调用。

(3) int wait(int *stat_loc):如果有退出的子进程,则返回退出的子进程的状态;如果没有任何子进程在运行,则返回错误。如果当前有子进程正在运行,则函数会一直阻塞直到一个子进程退出。

(4) pid_t waitpaid(pid_t pid, int *stat_loc, int options):类似于函数wait,但允许用户等待某个进程组的特定进程,并可以设置等待选项。

(5) int tcsetpgrp(int fildes, pid_t pgid_id):将前台进程组ID设置为pgid_id,files是与控制终端相联系的文件描述符。终端通常指标准输入、标准输出和标准错误输出(文件描述符为0、1、2)。

(6) int setpgid(pid_t pid, pid_t pgid):把pid进程的进程组ID设置为pgid。

(7) int dup2(int fildes, int fildes2):把fildes文件描述符复制到fildes2。如果files2已经打开,则先将其关闭,然后进行复制,使fildes和fildes2指向同一文件。

(8) int pipe(int fildes[2]):创建一个管道,把管道的读和写文件描述符放到数组fildes中。


4. 实验要求及总结

(1) 比较至少两种Shell的特点;

(2) Shell环境变量对系统安全和用户使用的影响,以PATH alias举例说明;

(3) 实现一个简单的命令解释器,即Linux中的Shell程序。要求其设计类似目前流行的Shell解释程序,但不需要具备太复杂的功能。提供清晰、详细的Shell程序设计文档和源程序。

实验链接:https://developer.aliyun.com/adc/scenario/3238d571312543278c4b2c2eb3f104f5

目录
打赏
0
0
0
0
214
分享
相关文章
|
25天前
|
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
88 32
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
110 10
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
86 7
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
110 6
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
149 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
132 0
Linux 如何更改默认 Shell
|
4月前
|
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
183 4