Alibaba Cloud Linux操作系统Shell程序

简介: 了解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

相关文章
|
13天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
40 9
|
12天前
|
缓存 运维 网络协议
深入Linux内核架构:操作系统的核心奥秘
深入Linux内核架构:操作系统的核心奥秘
31 2
|
16天前
|
缓存 网络协议 Linux
Linux操作系统内核
Linux操作系统内核 1、进程管理: 进程调度 进程创建与销毁 进程间通信 2、内存管理: 内存分配与回收 虚拟内存管理 缓存管理 3、驱动管理: 设备驱动程序接口 硬件抽象层 中断处理 4、文件和网络管理: 文件系统管理 网络协议栈 网络安全及防火墙管理
36 4
|
15天前
|
安全 网络协议 Linux
Linux操作系统的内核升级与优化策略####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统内核升级的重要性,并详细阐述了一系列优化策略,旨在帮助系统管理员和高级用户提升系统的稳定性、安全性和性能。通过实际案例分析,我们展示了如何安全有效地进行内核升级,以及如何利用调优技术充分发挥Linux系统的潜力。 ####
37 1
|
18天前
|
物联网 Linux 云计算
Linux操作系统的演变与未来趋势####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其在服务器、桌面及嵌入式系统领域的应用现状,并展望了云计算、物联网时代下Linux的未来趋势。通过回顾历史、剖析现状、预测未来,本文旨在为读者提供一个全面而深入的视角,以理解Linux在当今技术生态中的重要地位及其发展潜力。 ####
|
24天前
|
边缘计算 人工智能 运维
Linux操作系统:开源力量的崛起与影响###
一场技术革命的回顾 回溯至1991年,当Linus Torvalds宣布Linux操作系统的诞生时,世界或许并未意识到这一举措将如何深刻地改变技术领域的面貌。本文旨在探讨Linux操作系统的发展历程、核心特性、以及它如何引领了一场开源运动,重塑了软件行业的生态。从最初的个人爱好项目成长为全球最广泛采用的服务器操作系统之一,Linux的故事是技术创新与社区精神共同推动下的辉煌篇章。 ###
|
23天前
|
人工智能 安全 Linux
|
25天前
|
物联网 Linux 5G
Linux操作系统的演变与未来趋势####
本文深入探讨了Linux操作系统的发展历程,从最初的一个学生项目到如今全球最流行的开源操作系统之一。文章将分析Linux的核心优势、关键特性以及它在云计算、物联网和嵌入式系统中的应用前景。通过具体案例展示Linux如何推动技术创新,并预测其在未来技术生态中的角色。本文旨在为读者提供一个全面而深入的理解,帮助他们认识到Linux在现代计算环境中的重要性及其未来的潜力。 ####
|
25天前
|
人工智能 安全 物联网
Linux操作系统的演变与未来:从开源精神到万物互联的基石###
本文是关于Linux操作系统的演变、现状与未来的深度探索。Linux,这一基于Unix的开源操作系统,自1991年由林纳斯·托瓦兹(Linus Torvalds)学生时代创造以来,已经彻底改变了我们的数字世界。文章首先追溯了Linux的起源,解析其作为开源项目的独特之处;随后,详细阐述了Linux如何从一个小众项目成长为全球最广泛采用的操作系统之一,特别是在服务器、云计算及嵌入式系统领域的主导地位。此外,文章还探讨了Linux在推动技术创新、促进协作开发模式以及保障信息安全方面的作用,最后展望了Linux在未来技术趋势中的角色,包括物联网、人工智能和量子计算等前沿领域的潜在影响。 ###
|
26天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
下一篇
无影云桌面