《Linux命令行》学习笔记

linux的内核主要由如下模块组成:
  • 进程管理
  • 定时器
  • 中断管理
  • 内存管理
  • 模块管理
  • 虚拟文件系统接口
  • 文件系统
  • 设备驱动程序
  • 进程间通讯
  • 网络管理
  • 系统引导
整体的模型如图所示,Linux内核是计算机硬件和各类应用程序之间的媒介。
    Linux是类Unix系统,因此有一套基于Unix的准则和哲学:
  1. 小便是美
  2. 让程序只作好一件事
  3. 可移植性比效率更重要
  4. 一切皆文件:使用方便;把硬件当作文件处理是安全的。
  5. 使用shell脚原本提升效率和可移植性。
  6. 避免使用可定型地下的用户界面
  7. 全部程序都是数据的过滤器
    

                                                                   Linux Shell
Linux shell是用户和Linux内核之间的接口,为用户提供使用操做系统的接口,当Shell向Linux传递命令的时候,内核作出相应的反应。
  • shell 是一个用户程序,或者说是一个为用户和系统交互提供的环境
  • 从标准输入 设备读取命令的语言解释程序,拥有本身内建的shell命令集,固然shell能够被其余程序调用
  • 打开控制台,shell就会运行
  • shell不是内核一部分,可是它使用系统内核执行程序,建立文件

那使用方式打开shell呢?
  1. 终端。Linux提供基于GUI的登录系统。形如XTerm、Gnome、KDE
  2. 安全shell链接(SSH),能够经过SSH远程登陆服务器或工做站访问其shell
  3. 控制台,基于文本的登录系统


    Shell执行命令的解析方式:
    首先shell执行命令时,shell首先检查命令是不是 内部命令,若不是检查是不是一个应用程序(Linux自己程序or商业程序or自由软件),shell在搜索路径里寻找这些程序。若是都没有找到,shell将会显示一条错误信息。若是找到,该命令将被分解为系统调用并传递给Linux内核。
     shell下的组合命令:(备注:本身不经常使用的)
  • ctrl + w :删除光标位置前的单词
  • ctrl + u :清空行
  • ctrl + r :搜索先前使用的命令
  • ctrl + c:停止当前指令
  • ctrl + d:退出登陆shell
  • esc + t:调换光标前的两个单词
    Linux Shell 重要特性:其自己就是一个解释类型的程序设计语言。所以 shell职场绝大多数在高级语言中的元素:函数、变量、数组
程序控制结构等。

                                                     shell种类
    由此看到在Linux里面支持的shell不少。最经常使用的种类有 Bourne Shell(sh)、C Shell和Korn ShellBourne-Again Shell(bash)是 Linux系统中最经常使用的Shell。它是Bourne Shell的扩展,与Bourne Shell彻底向后兼容,而且在Bourne Shell的基础上增长、加强了不少特性,具备不少特点,能够提供如命令补全、命令编辑和命令历史等功能。
     Korn Shell(ksh)集合了C Shell和Bourne Shell的优势,并和Bourne Shell彻底兼容。Linux系统提供了ksh的扩展,它支持任务控制,能够在命令行上挂起、后台执行、唤醒或终止程序。
     如此众多的shell,系统如何选择呢?
    答:用户登陆到Linux系统时,由/etc/passwd这个文件决定用户将要使用哪一种Shell。查看当前帐户shell:echo  $SHELL

                                                                S hell脚本
    shell脚本就是早期dos的.bat文件。让使用者能够一个操做执行多条命令。提供了数组、循环、条件以及逻辑判断等重要功能,让使用者能够直接以Shell来写程序。
     Shell脚本是利用Shell的功能所写的一个程序,这个程序是 纯文本文件格式,将一些Shell的语法与指令写在里面,而后用 正则表达式管道命令以数据流重定向等功能,以实现咱们所须要的功能。

     Shell脚本通常由如下几部分构成:   

  •     Shell关键字——例如if…else,for do…done。
  •     Shell命令——例如export,echo,exit,pwd,return。
  •     Linux命令——例如date,rm,mkdir。
  •     文本处理功能——例如awk,cut,sed,grep。
  •     函数——经过函数把一些经常使用的功能放在一块儿。例如,/etc/init.d目录中的大部分或所有系统Shell脚本所使用的函数都包含在文件/etc/init.d/functions中。
  •     控制流语句——例如if…then…else或执行重复操做的Shell循环。


                                                     为何使用Shell脚本
    在Linux机器启动时,它执行/etc/rc.d目录中的Shell脚原本加载系统配置和运行服务。
  • 使用简单;
  • 节省时间。能够把冗长的重复的一连串命令合并成一条简单的命令;
  • 能够建立你本身的自动化工具和应用程序;
  • 使系统管理任务自动化;
  • 由于脚本通过很好的测试,因此使用脚本作相似配置服务或系统管理任务时,发生错误的机会将大大减小。

尝试写一个脚本:
    
#!/bin/bash
#My first script
ls -l .*
脚本的第一行:告诉shell使用什么程序解释脚本。 本例中是 /bin/bash。其余脚本语言中(perl,Python)也使用该机制。
脚本第二行:注释。每行出现“#”符号都被bash忽视。
脚本最后一行:ls命令。
注意:默认状况下,Linux不容许文件执行。所以须要chmod命令增长“x”属性。2个方式 数字和字符模式。(755  a+x)

                                        Shell在Linux环境的角色
Linux环境的构成部分
内核——Linux操做系统的核心。 Shell ——为用户和内核提供一个交互的接口。 终端模拟器 ——它容许用户输入命令并在屏幕上回显命令的运行结果。 Linux桌面和窗口管理器 ——Linux桌面是各类软件应用程序的集合。它包括文件管理器、窗口管理器、终端模拟器等等

当Linux系统的运行级别为3时,用户能够从本地登陆到系统控制台,或在系统运行级别为5时,直接以图形界面方式登陆。
用户登陆时Bash将会使用如下初始化文件和启动脚本:
  • /etc/profile——系统级的初始化文件,定义了一些环境变量,由登陆Shell调用执行。
  • /etc/bash.bashrc或/etc/bashrc——其文件名根据不一样的Linux发行版而异,每一个交互式Shell的系统级的启动脚本,定义了一些函数和别名。
  • /etc/bash.logout——系统级的登陆Shell清理脚本,当登陆Shell退出时执行。部分Linux发行版默认是没有此文件。
  • $HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile——用户我的初始化脚本,由登陆Shell调用执行。这三个脚本只有一个会被执行,按照此顺序查找,第一个存在的将被执行。
  • $HOME/.bashrc——用户我的的每一个交互式Shell的启动脚本。
  • $HOME/.bash_logout——用户我的的登陆Shell清理脚本,当登陆Shell退出时执行。
  • $HOME/.inputrc——用户我的的由readline使用的启动脚本,定义了处理某些状况下的键盘映射
具体细分的话,有两种状况:
  1. 当用户登陆时,登陆Shell会调用以下脚本:
    • /etc/profile——当用户在运行级别3登陆系统时首先运行。
    • /etc/profile.d——当/etc/profile运行时,会调用该目录下的一些脚本。
    • $HOME/.bash_profile、$HOME/.bash_login和$HOME/.profile——在/etc/profile运行后,第一个存在的被运行。
    • $HOME/.bashrc——上述脚本的中一个运行后即调用此脚本。
    • /etc/bashrc或/etc/bash.bashrc——由$HOME/.bashrc调用运行
  2. 当一个交互式的非登陆Shell启动时,Bash将读取并运行以下脚本:
    • $HOME/.bashrc——若是此文件存在即被运行。 
    • /etc/bashrc——将被$HOME/.bashrc调用运行。 
    • /etc/profile.d——此目录下的脚本将被/etc/bashrc或/etc/bash.bashrc调用运行。

Bash启动脚本主要设置的环境有:
  •     设置环境变量PATH和PS1(咱们将在2.3.1小节中介绍这两个变量); 
  •     经过变量EDITOR设置默认的文本编辑器; 
  •     设置默认的umask(文件或目录的权限属性); 
  •     覆盖或移除不想要的变量或别名; 
  •     设置别名; 
  •     加载函数。
------------------------------------------------------
<未完>