Linux shell 程序设计1——安装及入门
1、什么是shell?
shell是linux内核的“壳”,是用户和内核的桥梁。它类似于windows下的命令提示符,将用户输入的命令解释给内核执行,并返回给用户结果。与windows命令提示符不同的是,shell还是一种脚本语言,可以按一定的流程将命令组合在一起使用,方便了用户。
2、shell的安装:
在ftp.gnu.org/gnu/bash可下载到bash的源码包:
bash-4.1.tar.gz
用 tar xzvf bash-4.1.tar.gz 解压,生成bash-4.1目录
使用cd 命令进入该目录,在该目录下执行./configure命令生成配置文件,再使用make命令编译,使用make install命令安装。
在/etc/shells文件中列出的shell才是合法的shell,所以要使用安装的shell必须把它加到该文件中。加入之后就可以通过chsh命令来切换shell。
3、shell中的特殊符号:
http://blogold.chinaunix.net/u2/75431/showart_1110962.html
4、shell的程序结构:
以#!开头,指名要 ...
Shell常用命令小结
1、ls:这是linux里最常用的命令,像数学里的1一样,简单但很重要。类似于dos里的dir命令,该命令的功能是列出目录下的文件或子目录。
-a:显示所有文件和目录,包括以.开头的隐藏文件
-l:以长格式的形式显示
例如:
kelvin@kelvin-laptop:~$ ls
examples.desktop 公共的 模板 视频 图片 文档 下载 音乐 桌面
kelvin@kelvin-laptop:~$ ls -a
. .gconfd .pulse-cookie
.. .gksu.lock .recently-used.xbel
.bash_history .gnash .sudo_as_admin_successful
.bash_logout .gnome2 .themes
.bashrc .gnome2_private .thumbnails
.bogofilter .gstr ...
插入法排序
何谓算法?算法就是计算机解决问题的方法和步骤。之所以强调计算机三个字,是因为计算机处理问题的方式和我们人类解决问题的方式有所不同。比如,在电视剧《宫》里看到一个智力题:把一头大象放进骄子里需要哪几个步骤?答案是:第一步,掀开轿帘;第二步,把大象放进去;第三步,放下轿帘。当然,可行性我们暂时不去考虑。然而,对于计算机来说,它没法去掀开轿帘,或者把大象放进轿子里。它只能通过计算机系统特有的指令去处理数据,以此来解决问题。
知道了什么是算法,那么如何去描述问题和算法呢?
以排序问题为例,描述一个问题可以用以下的方式:
输入:n个整数,存放于一个数组a之中。
输出:这n个数在数组a之中按从小到大的顺序存放。
给出了一个问题的输入和要求的输出,这个问题就确定了。描述一种算法,可以用伪代码或者是计算机语言。
对于排序问题,有多种算法。下面谈谈Insertion sort——插入法排序:
插入法排序的大概思想和摸扑克牌类似:当然,我们要求只有一个人摸牌,初始的数组就是放在桌上的一堆牌,而拿到手上的牌是排好序的。当我们摸起一张牌时,会按大小插入到已排好序的手牌之中。下面是基于linux系统,用C语言对 ...
Kobject浅析
面向对象的思想的确在应用软件的开发中颇具优势,它让一个个纯逻辑的函数和数据变成了一个个有生命的个体。鉴于性能的考虑,系统软件的实现(例如linux kernel)并没有采用面向对象的语言(如C++、Java)。但这丝毫没有影响到用小c找对象。
简单来说,一个对象包含数据以及对这些数据的操作。如果把银行比作一个对象的话,银行里的RMB就是数据、而银行的工作人员就相当于对象中方法(即操作数据的结构)。如果,我们想打劫银行的话,我们只需要拿着枪指着工作人员说,“亲,给我拿500万出来”。当然,如果你是一个比较牛逼的劫匪你可能要1000万,或者更多。这没有关系,因为无论你要多少钱,你都不必亲自动手去取,工作人员会帮你办好这一切。当你拎着一袋子钱溜走的时候,你可能会想说,“自从有了面向对象,腰不酸了、腿不疼了,打劫也更有效率了”。
这个例子只是想说明面向对象的一个显而易见的优点——给劫匪,哦不,给用户提供了可直接使用的接口。当然,面向对象的优点可不只这一点。
kobject是Linux设备驱动模型的核心部分,它的作用是简单点说就是嵌入到设备和驱动相关的结构体之中。既可以将这些设备和驱动组织成树形 ...
为虚拟机vCPU绑定物理CPU
为了提高缓存命中率,提高虚拟机性能,可以将vCPU绑定到指定的物理CPU去执行。具体设置步骤如下:
在宿主机操作系统启动时将用于虚拟机的CPU独立出来,使其上只运行vCPU线程,QEMU进程和少数的管理进程。设置方法即是在内核启动参数中加入: isolcpus=0,1 例如在grub.cfg下面的配置如下:
menuentry 'Fedora (3.13.6-200.fc20.x86_64) 20 (Heisenbug)' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.4-200.fc20.x86_64-advanced-5bcef32f-430b-4d74-beaa-4fcfccc438f9' {
......
linux /vmlinuz-3.13.6-200.fc20.x86_64 root=UUID=5bcef32f-430b-4d74-beaa-4fcfccc438f9 ...
bash配置文件的执行顺序
Linux用户在登陆系统之后会启动shell,并按照一定顺序读取shell的配置文件。以bash为例,配置文件的读取顺序如下:
/etc/profile
如果是图形界面登陆系统,读取~/.profile,bash配置完毕。
如果是命令行或者ssh登陆系统,读取~/.bash_profile,bash配置完毕。
如果是命令行或者ssh登陆系统,且/.bash_profile不存在,读取/.bash_login,bash配置完毕。
如果是命令行或者ssh登陆系统,且/.bash_profile,/.bash_login不存在,读取~/.profile,bash配置完毕。
图形界面启动后,用户可能会再启动一个shell,该shell的配置文件是~/.bashrc,用户自定义的配置一般会放到这里。
使用mock来编译和管理RPM软件包
buildroot
在打包时用到的spec文件中包含一些tag,这些对大小写不敏感的tag用冒号来定义。BuildRoot就是其中的一个tag。例如,在libvirt的spec文件中BuildRoot的定义如下:
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRoot设置的目录会被当作临时的根目录,%install部分安装的文件都会被临时安装到这里。之所以引入BuildRoot是为了在打包过程中不影响现在的系统。 RPM宏设定的BuildRoot默认值是~/rpmbuild/BUILDROOT, 可以在spec文件中设置该tag,或者在rpmbuild命令执行时使用- -buildroot选项来指定。
mock的功能
mock不只是将文件安装到Buildroot指定的根目录,而是创建一个打包的沙盒(sandbox),挂载一些必要的文件系统(proc,sys等),将打包过程所用到的软件包(BuildRequires指定)都安装到沙 ...
RPM软件包管理机制之旅
Linux下的man命令十分实用,可以查看Linux命令的手册。但这些手册只适用于忘记命令的选项时查询之用,如果用来学习Linux下类似于Git, RPM这样庞大的工具就有点吃力了,可谓事倍功半。我在学习Git的时候读过一篇文档——gittutorial,使用:
$man gittutorial
命令可以调出该文档。这篇文档并不涵盖git的方方面面,只是介绍了Git管理项目的常规用法,非常适合初学者快速入门。所以本文试图仿照该文档的写法,并不会详细地介绍RPM包的方方面面,而是介绍RPM包最常用的一些功能,这些功能将会在我们对红帽系列发行版系统的日常管理中非常重要。
软件包管理机制与RPM
开源软件可以用Tarball的方式来从源代码安装软件(1),这样的安装方式对普通用户来说很麻烦。比如要升级软件,还需要先更新源代码,再重新编译、安装。Linux采用了RPM和DPKG等软件包管理机制来管理软件,直接给用户提供二进制软件包,并且将整个系统的软件包信息建立成数据库,以便于软件的升级、验证和卸载。RedHat、Fedora、SUSE、CentOS等发行版采用RPM包管理机制 ...