shell学习笔记(一)shell编程介绍

 ================================================================node

声明:linux

这次分享bash shell 学习心得,根据周朝剑老师的shell编程视频整理成文档形式与你们分享,周老师教程视频讲得很是棒,支持一下.shell

参考文档:http://www.cnblogs.com/chengmo/tag/shell/编程

参考书籍:UNIX.shell范例精解(第4版)数组

送给blog友一句话:安全

把大家所学所想尝试记录下来和你们分享,作这个事情的时候,人老是很惧怕出错误,以为这样写,别人会不会看得懂,别人会不会以为我写的很烂等等,就是由于这样,让本身主动去查询更多的资料,理解透彻这方面知识,再整理属于本身的文档,分享在blog上,以当着之后备用查询,在这个过程当中,可能会以为比较辛苦,但你会无心识让本身对某些技术有深刻的理解,这是我用来提升学习效率一种方式,不是为别人,其实都是为了本身.不信你能够试试.bash

 ================================================================数据结构

目录:socket

Unix与linux shell简介
Shell脚本使用范围
权限
硬连接和软连接的区别
特殊字符
编程语言

================================================================

Unix与linux shell简介
 
 
Unix 多用户 多任务     AT&T Ken Thompson   1969
 
Unix系统的心脏是内核:一个系统引导时加载的程序,内核用于与硬件设备打交道,调度任务 管理内存和辅存

内核在系统引导时载入内存,管理系统直相当机,它建立和控制进程,管理内存,文件系统和通讯等,内核之外的全部其余程序(shell)都保存在磁盘上,内核将这些程序加载到内存中运行,并在它们终止后清理系统

Linux    Linus Torvalds (李纳斯·托沃兹) 1991    企鹅   linux官方吉祥物 Tux

Korn shell ---AT&T UNIX    bash shell ---Linux

FSF 自由软件基金会 1985   GNU(GNU's Not Unix)   GPL 通用公共许可证

Linux结合GNU工具诞生彻底自由操做系统 1992

POSIX (protable operating system interface)可移植操做系统接口

Shell是核心程序(kernel)以外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言

/etc/shells 查看系统有几个shell版本
 echo $SHELL 查看系统目前使用shell版本
 
当用户登陆系统成功,系统会启动一个交互式的shell来提示用户输入命令
 
Shell执行:先解析命令行,再处理通配符,重定向,管道和做业控制,而后查找命令,找到后开始执行.
 
Steven Bourne Bourne shell 1978先后编写
Bash (Bourne Again shell)加强的Bourne shell 
 
[1]做者名叫Steven Bourne,“bourne”与“borne”的发音相近,而born有“出生”和“忍受”的含义。[2]Bourne-Again字面意思表明了它是“Bourne shell”l的一种扩展,而暗示“borne-again”、“born-again”则有“重生”和“再次忍受”的意思。(我想做者应该更喜欢“重生”)[3]它的简写“bash”的意思是“重击”,暗示它的出现是一次强有力的重击。
 
Shell 顺序断定命令类型
 
(1)       别名
(2)       关键字
(3)       函数
(4)       内置命令
(5)       可执行程序
 
用户须要在/bin/login验证下才能登陆到系统
 
Child 子进程 parent 父进程
 
Shell脚本使用范围
           
        资源密集型的任务,尤为在须要考虑效率时(好比,排序,hash等等)
        须要处理大任务的数学操做,尤为是浮点运算,精确运算,或者复杂的算术运算(这  
        种状况通常使用C++或FORTRAN来处理)
        有跨平台移植需求(通常使用C或Java)
        复杂的应用,在必须使用结构化编程的时候(须要变量的类型检查,函数原型,等等)
        对于影响系统全局性的关键任务应用。
        对于安全有很高要求的任务,好比你须要一个健壮的系统来防止***,破解,恶破 
       坏等等。
        项目由连串的依赖的各个部分组成。
        须要大规模的文件操做
        须要多维数组的支持
        须要数据结构的支持,好比链表或数等数据结构
        须要产生或操做图形化界面GUI
        须要直接操做系统硬件
        须要I/O或socket接口
        须要使用库或者遗留下来的老代码的接口
        私人的,闭源的应用(shell脚本把代码就放在文本文件中,全世界都能看到) 
 
权限
 
权限有10位字符
R 4 W 2 X 1
UMASK 022
默认文件权限为666-022=644
默认目录权限为777-022=755
   

 
b c   外围设备
S P   数据结构 管道
l      符号连接文件
d     目录
-           普通文件
 
特殊权限
s/S(SUID)      可执行的文件搭配这个权限,便能获得特权 任意存取该文件的全部者能使用的所有系统资源
s/S(GUID)    若是目录被设置为特殊权限,则全部被复制到这个目录下的文件,其所属的用户组都会被重设为和这个目录同样  除非加上-p(Preserver 保留文件属性)
 
t/T (Sticky 粘着)     临时文件/tmp    /var/tmp 准许其拥有者去删除 移动 避免不守法的用户故意骚扰
 
由于特殊权限占用x的位置来表示
开启执行权限和特殊权限 则权限表示字符是小写 假若关闭执行权限 则符合会变成大写
 
Chmod
 
Chmod 755 file
Chmod u+x;g+x file
Chmod a=r file 即全部权限被重置为新的值
Chmod 777 /tmp
Chmod –R 777 /tmp 将整个tmp目录与其中的文件和子目录的权限统称为
 
Chown
Chown root:root file
Chown –R root file 递归
 
Sort 种类
 
硬连接和软连接的区别
 
一 连接文件
    连接有两种方式,软连接和硬连接。
  1 软连接文件
软连接又叫符号连接,这个文件包含了另外一个文件的路径名。能够是任意文件或目录,能够连接不一样文件系统的文件。
    连接文件甚至能够连接不存在的文件,这就产生通常称之为"断链"的问题(或曰“现象"),连接文件甚至能够循环连接本身。相似于编程语言中的递归。
  用ln -s 命令能够生成一个软链接,以下:
  [root@linux236 test]# ln -s  source_file softlink_file
  在对符号文件进行读或写操做的时候,系统会自动把该操做转换为对源文件的操做,但删除连接文件时,系统仅仅删除连接文件,而不删除源文件自己。

  2 硬连接文件
  info ln 命令告诉您,硬连接是已存在文件的另外一个名字(A "hard link" is another name for an existing file),这多少有些使人困惑。硬链接的命令是
  ln -d existfile newfile
  硬连接文件有两个限制
  1)、不容许给目录建立硬连接;
  2)、只有在同一文件系统中的文件之间才能建立连接。
  对硬连接文件进行读写和删除操做时候,结果和软连接相同。但若是咱们删除硬连接文件的源文件,硬连接文件仍然存在,并且保留了愿有的内容。
    这时,系统就“忘记”了它曾经是硬连接文件。而把他当成一个普通文件。
二 二者之间的区别
    硬链接指经过索引节点来进行的链接。在Linux的文件系统中,保存在磁盘分区中的文件不论是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
    在Linux中,多个文件名指向同一索引节点是存在的。通常这种链接就是硬链接。硬链接的做用是容许一个文件拥有多个有效路径名,这样用户就能够创建硬链接到重要
    文件,以防止“误删”的功能。其缘由如上所述,由于对应该目录的索引节点有一个以上的链接。只删除一个链接并不影响索引节点自己和其它的链接,只有当最后一个
    链接被删除后,文件的数据块及目录的链接才会被释放。也就是说,文件才会被真正删除。
    软连接文件有点相似于Windows的快捷方式。它其实是特殊文件的一种。在符号链接中,文件其实是一个文本文件,其中包含的有另外一文件的位置信息。
 
Nuhup command & 把命令放在后台运行
Jobs –l      查看后台信息
 
 
特殊字符
 

相关文章
相关标签/搜索