linux shell有哪些 类型

linux shell有哪些 类型,第1张

2.4脚本语言的种类

2.4.1 Shell脚本语言的种类

Shell脚本语言是弱类型语言(无需定义变量的类型就可使用),在Unix/Linux中主要有两大类Shell,一类是Bourne shell,另一类是C shell。

1. Bourne shell

Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again Shell(bash)三种类型。

Bourne shell (sh)由AT&T的Steve Bourne开发,是标准的UNIX Shell,很多UNIX系统都配有sh。

Korn shell (ksh)由David Korn开发,是Bourne shell(sh)的超集合,并且添加了csh引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上的/bin/sh往往是指向/bin/ksh的符号链接。

Bourne Again Shell即bash由GNU项目组开发,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版默认配置的Shell,在Linux系统上的/bin/sh往往是指向/bin/bash的符号链接。虽然如此,bash和sh还是有很多的不同,一方面,bash扩展了一些命令和参数,另一方面,bash并不完全和sh兼容,它们有些行为并不一致,但大多数企业运维的情况下区别不大,特殊场景可以使用bash替代sh。

2. C shell

C shell又包括csh、tcsh两种类型。

csh由Berkeley大学开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne Shell所不支持的功能,例如:作业控制、别名、系统算术、命令历史、命令行编辑等。

tcsh是csh的增强版,加入了命令补全等功能,在FreeBSD、Mac OS X等系统上替代了csh。

以上介绍的这些Shell中,较为通用的是标准的Bourne shell (sh)和C shell (csh)。其中Bourne shell (sh)已经被Bourne Again shell (bash) 取代。

可通过以下命令查看CentOS7系统的Shell支持情况。

[root@oldboy ~]# cat /etc/shells

/bin/sh #<==这是Linux里常用的Shell,指向/bin/bash。

/bin/bash#<==这是Linux里常用的Shell,也是默认使用的Shell。

/usr/bin/sh

/usr/bin/bash

Linux系统中的主流Shell是bash,bash是由Bourne Shell(sh)发展而来的,但bash还包含了csh和ksh的特色,但大多数脚本都可以不加修改地在sh上运行,如果你使用sh后发现结果和预期有差异,那么可以尝试使用bash替代sh。

内容来源:《跟老男孩学linux运维:Shell高级编程实战》第02章_Shell脚本初步入门

全部使用超级用户root *** 作:(下面我都已经测试过了)

假设用户为user1

useradd -m -u 888 -d /ceshi/user -c "wo shi yi ge hao ren" -s /bin/ash user1

passwd user1 设置密码。

passwd -d user1 删除密码

linux不允许用户无密码登录,第6步实现有难度(要修改核心参数)。

1. 编译kernel

mkdir -p ~/misc/qemu

cd ~/misc/qemu

wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.3.7.tar.bz2

tar xvfj linux-3.3.7.tar.bz2

cd linux-3.3.7

make defconfig

make

cp arch/x86/boot/bzImage ..

2. 制作根文件系统

cd ~/misc/qemu

dd if=/dev/zero of=rootfs.img bs=1M count=10

mkfs.ext3 rootfs.img

mkdir rootfs

sudo mount -t ext3 -o loop rootfs.img rootfs

cd rootfs

mkdir dev proc sys

3. 编译busybox

cd ~/misc/qemu

wget http://busybox.net/downloads/busybox-1.20.1.tar.bz2

tar xvfj busybox-1.20.1.tar.bz2

cd busybox-1.20.1

make defconfig

make menuconfig

(将busybox编译为静态连接方式)

- Busybox Settings

- Build options

- Build Busybox as a static binary

make

make install CONFIG_PREFIX=~/misc/qemu/rootfs

cd ~/misc/qemu

sudo umount rootfs

4. 运行

图形界面下:

qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/bin/ash"

命令行界面:

qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/bin/ash" -curses

通过vnc运行:

qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/linuxrc" -curses -vnc 192.168.1.237:1

上面192.168.1.237为本机的一个IP地址。在另外一台机器上运行vnc client,填入192.168.1.237:1,即可通过vnc连接到linux系统

改进1:mount /proc和/sys,以及创建/dev/下的设备节点

启动后,/dev下无设备文件,而且/proc, /sys都没有mount上,导致有些命令无法运行(如top)。为了解决这个问题,可以修改启动脚本/linuxrc为:

#!/bin/ash

/bin/mount -t proc proc /proc

/bin/mount -t sysfs sysfs /sys

/bin/echo /sbin/mdev >/proc/sys/kernel/hotplug

mdev -s

/bin/ash

然后chmod a+x /linuxrc,umount后再执行

qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/linuxrc"

有关mdev的介绍和使用可以参考:

http://hi.baidu.com/kebey2004/blog/item/3692f6079b8e9dda7a894721.html

改进2:编一个最小kernel

make allnoconfig

make menuconfig

选择:

- Executable file formats / Emulations

- 选择Kernel support for ELF binaries

- Device Drivers

- 选择ATA/ATAPI/MFM/RLL support

- 选择generic/default IDE chipset support

- File systems

- 选择Ext3 journalling file system support

make

qemu -kernel linux-3.3.7/arch/x86/boot/bzImage -hda rootfs.img -append "root=/dev/hda init=/linuxrc" -curses


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7238135.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存