unix 大学 - CSDN
  • Unix&Linux中的一些小知识o(∩_∩)o

    第二章

    “Given enough eyeballs, and bugs are shallow.”

    2.1 操作系统

    运行计算机的总控制程序。是硬件的基本接口,为使用计算机的用户提供界面,也为正在执行的程序提供界面。

    功能:
    1、控制计算机并在计算机启动或者重新启动时初始化计算机。
    2、支持与计算机交互所使用的界面。
    3、为需要使用计算机资源的程序提供接口。
    4、管理计算机的内存。
    5、维护并管理文件系统。
    6、调度工作。
    7、提供账户和安全服务。

    2.2 内核

    操作系统的核心,执行基本的任务。

    内核所提供的服务:
    1、内存管理。
    2、进程管理(创建、终止、调度)。
    3、进程间通信(本地、网络)。
    4、输入输出。
    5、文件管理。
    6、安全和访问控制。
    7、网络访问。

    分类:
    1、单内核
    2、微内核:只能执行最基本的任务,通过调用服务器来完成大部分工作。

    2.3 Unix=内核+实用工具

    为用户提供使用计算机的界面的程序:
    shell:提供基于文本的界面
    GUI:使用窗口、鼠标指针、图标等提供图形界面。

    2.4

    Unix:一种多用户、多任务处理的操作系统,由一个类Unix内核、许多类Unix实用工具及一个类Unix shell构成。

    Linux:任何使用Linux内核的Unix的名称。


    第十一章

    shell:
    一个充当用户界面和脚本解释器的程序,允许用户输入命令以及间接地访问内核的服务。

    shell脚本:
    由shell解释的程序。

    向后兼容:
    又称向下兼容、回溯兼容,在计算机中指在一个程序、库或硬件更新到较新版本后,用旧版本程序创建的文档或系统仍能被正常操作或使用(包括输入数据)、在旧版本库的基础上开发的程序仍能正常编译运行,或较旧版的硬件仍可在新版使用的情况。


    第十二章

    交互式shell:(与人一起工作)充当用户界面。
    非交互式shell:(独立工作)充当脚本解释器。

    环境:一组用来存放信息的变量。
    变量:一个用来储存数据的实体,具有一个变量名(用来引用变量的标识符)和值(储存在变量中的数据)。
    对变量进行的操作:创建变量、查看变量的值、修改变量的值、销毁变量。

    父进程&子进程
    局部变量&全局变量

    shell变量:创建它们的shell的局部变量,对shell本身有用。
    环境变量:全局变量,对由shell启动的进程有用。

    显示环境变量:

    env
    printenv
    env | less             //每次一屏
    printenv |sort | less  //每次一屏并排序

    显示shell变量:

    set

    显示及使用变量的值:

    echo TERM       //显示字符串TERM
    echo $TERM      //显示变量TERM的值

    使用变量:
    Bourne shell家族:

    //设置变量
    NAME=value
    NAME="value"    //值包含空白符
    //将变量导出到环境中
    export NAME[=value]
    //复位变量
    unset NAME

    C-Shell家族

    setenv NAME [value]  //设置环境变量
    unsetenv NAME        //复位环境变量
    set name[=value]     //设置shell变量
    unset name           //复位shell变量
    展开全文
  • 在本书中,不仅可以全面学习到Unix和Linux操作系统的工作原理和主要命令,还可以知晓Unix和Linux发展史上的许多奇闻趣事。 另外,本书还解释了622个Unix专业术语,许多术语都给出了其历史来源;书中的示例涵盖了...
  • 在本书中,不仅可以全面学习到Unix和Linux操作系统的工作原理和主要命令,还可以知晓Unix和Linux发展史上的许多奇闻趣事。 另外,本书还解释了622个Unix专业术语,许多术语都给出了其历史来源;书中的示例涵盖了...
  • 学习笔记,内容基础,适合初学者。 ...阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)...《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用UnixUnix & Linux 大学教程》 -

    学习笔记,内容基础,适合初学者。


    阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

    《Unix & Linux 大学教程》 - 第一、二章 学习笔记   Unix简介 & 什么是Linux?什么是Unix
    《Unix & Linux 大学教程》 - 第三、四章 学习笔记   Unix连接 & 开始使用Unix
    《Unix & Linux 大学教程》 - 第五、六章 学习笔记   GUI:图形用户界面 & Unix工作环境
    《Unix & Linux 大学教程》 - 第七、八章 学习笔记   Unix键盘使用 & 能够立即使用的程序
    《Unix & Linux 大学教程》 - 第九、十章 学习笔记   文档资料:Unix手册与Info & 命令语法
    《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记   shell & 使用shell:变量和选项
    《Unix & Linux 大学教程》 - 第十三章 学习笔记   使用shell:命令和定制
    《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记   使用shell:初始化文件
    《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记   过滤器:简介和基本操作
    《Unix & Linux 大学教程》 - 第十八章 学习笔记   过滤器:统计和格式化
    《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记   过滤器:选取、排序、组合及变换
    《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记 过滤器:选取、排序、组合及变换 正则表达式
    《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
    《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
    《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器(二)
    《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器(三)
    《Unix & Linux 大学教程》 - 第二十三章 学习笔记 Unix文件系统
    《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
    《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
    《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
    《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制





    第二十三章:Unix文件系统

    文件类型

    普通文件(ordinary file)(常规文件,regular file)

    目录(文件夹)

    伪文件:不用来存储数据,所以不占用空间

    3种最重要的伪文件

    特殊文件(设备文件):是物理设备的内部表示,Unix所有特殊文件存放在/dev(device,设备)目录中

    命名管道:将一个程序的输出连接到另一个程序上

    proc文件:允许访问内核信息。特定情况下,可以通过它修改内核数据




    硬件
    /dev/fd0 软盘
    /dev/hda 硬盘
    /dev/hda1 硬盘:第一分区
    dev/sda SCSI硬盘
    /dev/sda1 SCSI硬盘:第一分区
    /dev/sda1 USB闪存卡
    /dev/lp0 打印机
    /dev/usb/lp0 USB打印机
    终端
    /dev/tty 当前终端
    /dev/tty1 控制台/虚拟控制台
    /dev/pts/0 伪终端
    /dev/ttyp0 伪终端
    伪设备
    /dev/null 放弃输出,输入不返回内容(eof)
    /dev/zero 放弃输出,输入返回null(0)
    /dev/random 随机数生成器
    /dev/urandom 随机数生成器

    软盘与打印机是用数字编号,从0开始。比如/dev/fd0,/dev/fd1……

    硬盘用字母编号,从a开始。不如/dev/hda,/dev/hdb……对于一块硬盘多个分区的情况,则会使用类似二级角标形式/dev/hda1,/dev/hda2(这里的数字从1开始!)

    SCSI和SATA硬盘名称为/dev/sda,其他规则同上




    位桶(bit bucket)

    写到下面两个设备中的任何输出都会被抛弃

    null文件(/dev/null)

    zero文件(/dev/zero)

    处理输出时,null和zero相同

    处理输入时,程序从/dev/null读取数据,不管请求输入多少字节,总是返回eof信号。

    从/dev/zero读取数据时,文件生成和请求一样多的字符,但是值都是0,在Unix中,认为这个值是null字符。清除数据的时候可以用null字符覆盖已有的数据




    命名管道

    语法:

    mkfifo [-m modepipe

    mode是chmod程序使用的一种文件模式类型(25章),现在暂时忽略-m选项

    pipe是管道名称


    使用

    mkfifo fifotest(创建一个名为fifotest的管道)

    grep bash /etc/passwd > fifotest(把输出写入到fifotest管道中)

    wc -l < fifotest(从fifotest读取数据)

    rm fifotest(删除此管道)

    结果与下面相同

    cat /etc/passwd | wc -l

    主要用于进程间通信




    proc文件

    所有的proc文件都在/proc目录下,系统每一个进程对应一个子目录,名称为进程ID

    proc文件 相关信息
    /proc/xxx/ 进程#xxx
    /proc/cmdline 内核选项
    /proc/cpuinfo 处理器
    /proc/devices 设备
    /proc/diskstats 逻辑磁盘设备
    /proc/filesystems 文件系统
    /proc/meminfo 内存管理
    /proc/modules 内核模块
    /proc/mounts 已挂载设备,挂载点
    /proc/partitions 磁盘分区
    /proc/scsi SCSI和RAID设备
    /proc/swaps 交换分区
    /proc/uptime 内核运行时间(秒),内核空闲时间(秒)
    /proc/version 内核版本、分发、gcc
    /proc/kcore 计算机实际物理内存

    ls -l /proc/kcore 

    -r-------- 1 root root 140737486266368 2012-10-22 16:07 /proc/kcore(伪文件,不占用空间)



    挂载文件系统:mount、umount

    文件系统层次结构标准要求使用特定的目录挂载文件系统

    对于没有挂载在其他位置的固定介质(例如额外的硬盘)来说,指定目录是/mnt

    对于可移动介质来说,目录是/media



    根目录(顶级目录,toplevel directory)目录结构

    目录 内容
    / 根目录
    /bin 基本程序
    /boot 启动系统时所需的文件
    /dev 设备文件
    /etc 配置文件
    /home 用户的home目录
    /lib 基本共享库,内核模块
    /lost+found 由fsck恢复的受损文件
    /media 可移动介质的挂载点
    /mnt 不能挂载在其他位置上的固定介质的挂载点
    /opt 第三方应用程序
    /proc proc文件
    /root 超级用户的home目录
    /sbin 由超级用户运行的基本系统管理程序
    /srv 本地系统所提供服务的数据
    /tmp 临时文件
    /usr 静态数据使用的辅助文件系统
    /var 可变数据使用的辅助文件系统

    目录存放的内容

    /bin:系统管理员在单用户模式下管理系统所需的基本工具。都是可执行文件

    /boot:系统存放引导过程中所需全部文件的位置,内核必须位于这个目录或根目录中。如果升级过系统,则目录下有多个内核文件

    /dev:所有特殊文件。此目录下的makedev程序用来创建新的特殊文件

    /etc:配置文件

    /home:存放个人文件和目录,与用用户标识相同,比如我的home为/home/su1216

    /lib:包含运行/bin和/sbin目录中的程序所需的基本库和内核模块

    /lost+found:如果Unix没有正常关机,那些仅完成部分写入的文件将收到损坏,Unix下次启动时,fsck将自动运行,检查文件系统并修复问题。如果发现损坏的文件,那么fsck将挽救这些文件,并将他们移动到/lost+found中

    /media:可移动介质的挂载点

    /mnt:这是不会在其他位置挂载的固定介质(例如额外的硬盘)的挂载点。(说的也太拗口了,如有没理解错的话,他是想说:这是固定介质唯一的挂载点)

    /opt:第三方应用程序

    /root:root用户的home

    /sbin(system binaries):系统二进制文件

    /tmp:临时存储,最终它的内容将被移除

    /usr:辅助文件系统的根,目的用来存放静态数据(没有系统管理员的干涉不会改变的数据)。以前用来存放home

    /var:辅助文件系统的根,目的用来存放可变数据。例如:日志文件、打印文件、电子邮件等




    /usr目录

    目录 内容
    /usr/bin 非基本程序(大多数用户程序)
    /usr/include C程序的头文件
    /usr/lib 非基本共享库
    /usr/local 本地安装程序
    /usr/sbin 由超级用户运行的非基本系统管理程序
    /usr/share 共享系统数据
    /usr/src 源代码(只用于参考)
    /usr/X11 存放着大量由X Window使用的程序
    /usr/games 游戏、娱乐、教育程序

    /usr/bin:可执行程序,比/bin中要多

    /usr/include:C和C++程序员所使用的include文件(头文件)的存储区

    /usr/lib:同/lib

    /usr/local:存放本地程序和文档资料

    /usr/sbin:同/sbin,与/usr/bin和/bin的关系一样

    /usr/share:用户和程序间共享文件

    字典文件在/usr/share/dict/words

    Unix手册在/usr/share/man

    Info系统在/usr/share/info

    /usr/src:有一些包含系统源代码的子目录,只用来做参考。许多Linux系统上,内核的源代码位于/usr/src/linux

    /usr/X11:存放着大量由X Window使用的程序

    /usr/games:游戏、娱乐、教育程序




    通用程序(可以由任何人使用)
    /bin 基本程序
    /usr/bin 非基本程序
    /usr/local/bin 本地安装程序
    系统管理程序(只能由超级用户使用)
    /sbin 由超级用户运行的基本系统管理程序
    /usr/bin 由超级用户运行的非基本系统管理程序
    /usr/local/sbin 本地安装的系统程序
    第三方应用程序
    /opt/xxx 应用程序xxx的静态数据,包括程序
    /var/opt/xxx 应用程序xxx的可变数据




    /home目录

    许多系统上,/home目录属于辅助文件系统,所以在挂载之前不可用

    每次登录时,环境变量HOME被设置为字节home的名称,可以通过下面方式查看

    echo $HOME或echo ~



    环境变量PATH(搜索路径)

    每当输入不是shell内置程序的程序名称时,Unix就会在搜索路径所指定的目录中进行搜索




    虚拟文件系统

    引导加载程序接管计算机,从引导设备中读取数据,从而将操作系统加载到内存中。

    大多数情况下,引导设备是本地硬盘驱动器上的一个分区,但是也可以是网络设备、CD、闪存驱动器等

    在引导设备的数据中有初始的Unix文件系统,称为根文件系统

    根文件系统自动挂载,其中存放着启动Unix所需的全部程序和数据文件,还包含系统出现问题时管理员需要使用的工具

    根文件系统至少包含下述目录

    /bin

    /boot

    /dev

    /etc

    /lib

    /root

    /sbin

    /tmp

    一旦挂载了根文件系统,内核也就启动完毕,就会自动挂载其他设备文件系统


    根文件系统总是存储在引导设备上

    有3个其他文件系统可能位于单独的设备上:usr、var、home

    基于磁盘的文件系统

    ext3

    第3代扩展文件系统(Linux)
    ext4 第4代扩展文件系统(Linux)
    FAT32 32位文件分配表文件系统(Microsoft Windows)
    HFS+ 层次式文件系统(Macintosh)
    ISO 9660 ISO 9660 标准文件系统(CD-ROM)
    NTFS NT文件系统(Microsoft Windows)
    UDF 通用磁盘格式文件系统(可重写CD和DVD)
    UFS2 Unix文件系统(BSD、Solaris)
    网络文件系统
    NFS 网络文件系统(广泛使用)
    SMB 服务器信息块(Windows 网络)
    特殊用途文件系统
    devpts 伪终端的设备界面(PTY)
    procfs proc文件系统
    sysfs 系统数据文件系统(设备与驱动器)
    tmpfs 临时存储文件系统






    Filesystem Hierarchy Standard(FHS):文件系统层次结构标准





    转贴请保留以下链接

    本人blog地址

    http://su1216.iteye.com/

    http://blog.csdn.net/su1216/

    展开全文
  • Unix&Linux;大学教程

    2020-05-24 23:30:17
    Unix&Linux;大学教程,比较经典的入门书籍。手动给每个章节加了PDF目录。
  • Unix & Linux》大学教程小结

    千次阅读 2015-10-12 22:20:17
    大概在两个月以前我就开始看这本书了,我没有看书的习惯。应该可以说这是第一本我看了这么多的书,这本书内容比较简单,讲的东西都很容易理解。现在我已经看到了第12章,今天忽然想到应该做点小... Unix 简介 && &2.

            大概在两个月以前我就开始看这本书了,我没有看书的习惯。应该可以说这是第一本我看了这么多的书,这本书内容比较简单,讲的东西都很容易理解。现在我已经看到了第12章,今天忽然想到应该做点小总结不然看完了又什么都忘了。我并没有看得很仔细,只是走马观花的看了一些。没有每天都看一点,只是想到的时候都看一点。希望自己可以坚持看完这本书。

             &1. Unix 简介   &&    &2.什么是Linux?什么是Unix

              把这两章放在一起,我觉得这两章大体上都是在介绍Unix可Linux的背景和一些历史。在大多数的Linux的书上都有这些内容。感兴趣的可以翻阅一下。


              &3. Unix连接

               这一章主要介绍的是一个思想:终端和主机。大致来说终端是与外界交互的东西,键盘,鼠标,显示器等等。主机是指内在处理的其他部件,如硬盘,内存等等。


              &4. 开始使用Unix

               介绍了一些基本的操作。该密码的命令是passwd,检查他人是否使用过我的账户可以用命令last。最后还有一个超级用户的概念,这个概念非常重要,不了解的通过百度了解一下。这篇文章主要说这本书的框架,对于细节还是自己去翻书。


               &5.Gui:图形用户界面

                介绍了gui和xwindows的概念和历史。感觉并没有深入,这是大概介绍了一些东西。


               &6.Unix工作环境

                运行级别是这一章的一个重点,可以重点了解一下。改变运行级别的命令是init后面跟着一个数字表示运行级别。然后这一章还介绍了Unix可以同时不止做一件事情,但是我觉得现在的操作系统要是没有这个特性未免也太......dmesg可以显示启动消息,但是这些东西会很多所以建议使用dmesg | less这样就可以慢慢看了。我反正是看不懂这些东西。


                &7.Unix键盘使用

                 我觉得这一章还是比较有趣的,所以这一章还是好好的去看一下吧。介绍键盘的工作原理,读了这章可以了解到一些很有趣的事情。 这一章需要整章看一下,不过也稍微总结一下我感兴趣的内容:主要是一些信号与键盘的映射,还有eof的信号,以及显示键盘映射stty -a 和 修改键的映射,这个内容非常有趣很适合喜欢恶作剧的同学。还有注意回车和换行的概念。回车表示回到首部,换行是指往下一行但是光标并不会回到行首。我们现在说的回车一般是指回车+换行。


                &8.能够立即使用的程序

                 这一章介绍了一些比较实用的命令,比如查找程序用的which/type和whence,提醒服务calendar查看系统 信息的uptime/hostname/uname显示自己的信息whiami.quota.显示其他用户的信息users/who和w。具体的使用看书上对应的章节。上面的几个都是我觉得很有用的命令。


                 &9.文档资料:Unix手册与Info

                 这一章是教导我们查看命令的用处或者搜索相应的命令。建议看一下whatis apropos 的使用方法还有info了解一下。其实这个在我看来还不如直接百度命令,因为我的英语水平不高,如果英语好的人这个还是很有帮助的。


                &10.命令语法

                  如果对linux的命令行一点都不了解的人建议看一下。如果已经大致都了解了命令的格式和使用方法这一章可以跳过,因为这一章讲的很粗浅。这一章唯一的收获是在终端中可以同时输入两条命令,但是要用分号隔开。比如cd /; ls他会在执行完cd /以后执行ls。


                  &11. Shell

                  这一章主要介绍的是shell的历史背景之类的。还有shell的几种最常见的shell,主要的内容还是在后面的内容里面介绍,这一章只是粗浅的介绍。


                &12.使用shell:变量和选项

                   这一章是比较重要的一章,介绍了shell变量和环境变量,以及他们的设置,修改,删除,和添加。还有他们的关系/作用和区别,具体的还是看书吧。


    -------------------------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------

    前面的内容由于隔的时间比较久了,记得也不清楚所以写的很大概。后面的内容,因为我觉得比较重要,而且我是看了就写的,印象也比较深刻所以会介绍比较多的细节。


    /*--2013.11.15  Friday--*/

    &13.使用Shell:命令和定制

    13.1~13.3:

     这三章主要介绍了元字符和转义字符。所谓的元字符就是指在shell中有特别的含义的一些字符。比如$  ;   ,  !  # 等等。比如在终端输入

    <span style="font-size:14px;">echo $USER
    bearox</span>

            得到的并不是$USER,而是当前用户的用户名我这里得到的答案是bearox。因为$是一个元字符,这里他的意思变成了把变量USER的值输出来。那么我想要得到$USER该怎么输出呢?首先我们可以用 ' \ ' ——反斜线。他会把后面的元字符理解成字面上的意思。比如输入

    <span style="font-size:14px;">echo \$USER
    $USER</span>

          这时候得到的结果就不再是bearox,而是$USER。转义字符甚至可以转义回车,本来回车是代表每一行的输入结束。如果你输入

    <span style="font-size:14px;">echo How are you? \<回车>     //表示在反斜线后面输入一个回车</span>

           什么都不会输出,而是给你一个提示符,让你继续输入,那你就接着输入直到回车才会输出结果,自己去体验一下就知道是怎么回事了。注意每次出现元字符的时候前面都需要加一个反斜线。这样对于比较长的输入会显得很麻烦。这时候可以用单引号‘’比如输入

    <span style="font-size:14px;">echo '$USER, &TERM' 等价于 echo \$USER\, \$TERM</span>

           同样的单引号同样适用于回车比如输入

    <span style="font-size:14px;">echo 'How are you? <回车>I'm fine. Thank you!'
    How are you?
    I'm fine. Thank you!</span>

           (2015-9-27)上面这个例子是错误的,最近需要重新学习Linux,就来看这篇文章了。在试用这些例子的时候发现这个出错了。原因是I'm fine.  这里面有一个单引号会把这句话结束,所以最后Thank you! 后面的单引号不需要了。或者这个例子应该改成I am fine。

    下面两行是结果。  <回车>表示在这个位置输入一个回车,下面就不再重复提醒,看到这个写法就应该知道了。很奇怪的一点是我用反斜线转义回车的时候,回车只是没了,并没有输出,使用单引号的时候回车输出来了。这一点我也是在写这篇博客的时候才发现的。但有时候我们希望如$这种特殊的符号不要被转义该怎么做呢?

    <span style="font-size:14px;">echo 'My name is: ' $USER ', my terminal is: ' $TERM</span>

            这样写也不会有问题,但是单引号比较多,而且不容易看清楚,如果元字符比较多的情况下,这样会比较混乱,这时候就需要用双引号" "。双引号比较特殊,双引号只保留 $ (美元符号) \(反斜线)和 `(反引号)这三个元字符,其他的都会被转义,所以上面的那句话可以写成

    <span style="font-size:14px;">echo "My name is: $USER, my terminal is: $TERM"</span>

    下面是小结:

    使用反斜线引用单个字符(称为转义了这个字符)

    使用单引号引用一串字符

    使用双引号引用一串字符,但是保留了$ \ 和 `

    从上面看出单引号比双引号的效用更强(能转义所有字符),所以有时候称单引号为强引用,双引号为弱引用。实际上最强的还是反斜线,反斜线可以应用单引号,双引号甚至是是它自己本身!


    /*---2013.11.16--*/

    13.4~13.14: 

            前两个小节告诉我们shell的命令分为内部命令和外部命令。比如date(显示时间)就是一个外部命令,不是shell的内置命令。time和set就是shell的内置命令。看一条命令是内部命令还是外部命令用type来完成。

    <span style="font-size:14px;">type date time setdate 
    date 是 /usr/bin/date
    set 是 shell 内嵌
    time 是 shell 关键字</span>

      第一行是输入的命令,下面三行是输出的结果。从结果中看护set和time都是shell的内部命令,不用去管内嵌和关键字的区别,这个我也不知道。我坚信随着我学习的深入这些疑点都会慢慢解开。而date就是一条外部命令,路径显示的就是这条命令所在的路径。这意味这date是一个独立的程序,我们可以通过改变路径内提供的内容来改变这个程序的功能。那么shell是怎么找到这个外部命令的路径的呢?其实这些都记录在一个名为PATH的环境变量里面。
    <span style="font-size:14px;">echo $PATH
    /usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/bearox/.local/bin:/home/bearox/bin</span>

           上面是我的fedora19中默认被指的PATH的值, 我们也可以自己来修改PATH的值,在里面存放我们自己写的一些命令,这样就可以在shell里面直接运行。

    <span style="font-size:14px;">PATH="$PATH:$HOME/Document/bin"</span>

           如果你理解了元符号以及转义字符和环境变量的设定,那么你应该能看懂这句话。上面的命令是把自己的用户目录下面的/Document/bin目录下的内容加入搜索的路径中。但是如果你自己写了一个date,那么你输入date他会运行哪一个呢?他只会执行最先找到的那个程序。所以想要优先运行自己写的程序的话需要把自己的路径添加到现有的PATH的前面。这样他会优先查找自己的bin目录。

            然后13.9开始介绍了怎么定制自己的shell,严格的说是怎么定制自己的shell提示符。我使用的shell是bash,而且我觉得短期内我也不会去尝试使用其他的shell。所以下面我都以自己的bash为例子。bash的命令提示符是存储在一个名为PS1的环境变量中的,我们修改这个环境变量就可以按照自己喜欢的方式来显示命令提示符。

    <span style="font-size:14px;">PS1="$USER $ "</span>

            然后我的提示符就是我的用户名加上一个$符号。如果你想增加别的东西都行,甚至是命令。命令用`反引号隔开,这个也是这里学会的。

    <span style="font-size:14px;">echo "The time and date are `darte`"
    The time and date are 2013年 11月 16日 星期六 10:59:46 CST</span>

            第一行是我们的输入,第二行是输出。这里你应该能看出来反引号的用法了,就不再赘述了。比如你的提示符想要显示时间那你可以用

    <span style="font-size:14px;">PS1="The time is `date`"</span>

            这样你的提示符就会实时显示当前的时间了。如果你想每次登陆shell都能这样显示的话,你还需要把这行加入初始化文件中,对于我的话是home目录下的.bashrc。对了,你甚至可以让命令提示符单独显示一行,命令的输入单独一行。这就需要转义回车,这个我们在上面说到了,可以试试看,我觉得这样会比较清晰。

    <span style="font-size:14px;">PS1="The time is `date`<回车>" </span>

    13章剩余部分:

             剩下的部分,对我的帮助并不大,因为这里面的大多数内容我都已经了解了,所以我写的比较简单。剩下的部分主要介绍的是命令的历史列表。可以用命令history来查看自己使用过的命令,你发现每个命令都有一个编号。然后重新调用这个命令的话可以用    !命令的序号   来调用这个命令。  比如你用history查看时有命令 who am i ,它的编号是15, 那么你就可以通过  !15 来调用whoami这条命令。然后,有时候你觉得这个历史列表太长了,那么可以通过修改环境变量HISTSIZE来改变历史列表的大小,我这里的默认大小是1000,我把它改成了50.

            还有这里介绍了一个小技巧,不过我觉得实用性不大。

    <span style="font-size:14px;">rm temp*       //这个命令删除当前目录下所有以temp开头的文件</span>

             但是像上面这样做有一定的风险,因为你可能有一个很重要的文件刚好也是以temp开头的。那么为了保险,你可以把以temp开头的文件全部显示出来看一下。用
    <span style="font-size:14px;">ls temp*</span>
             这样就得到了所有的temp开头的文件,确认了以后,再用
    <span style="font-size:14px;">^ls^rm</span>
              这样会很保险。上面这句话的意思是把上一条命令的ls改成rm。因为重新输入命令的话总是可能会出错。

              然后介绍了自动补全,这个只需要按下tab就能实现了。。大概的意思是比如当前目录下有一个很长的文件,helloworld.cpp 然后你需要这个文件,输入he然后按下tab键,他会自动补全整个文件的名字。前提是当前目录下没有其他的文件以he开头。

              然后很有用的就是别名命令 alias。 因为,我以前单独学习过这个命令,所以我已经会了。这个命令还是很有用的,可以带来很多方便。不熟悉的人建议自己去好好学习一下这个命令。也可以看一下这里,这个可以让你简单的理解一下alias的作用。学会以后可以在自己的.bashrc加入各种自己喜欢的别名,这也相当于shell的定制把。http://blog.csdn.net/bearox/article/details/9390869



    /*-------------------------Wed Nov 27------------------------------------------*/

    &14.使用shell: 初始化文件

               这一章的内容很有用,之前我就了解了一下关于初始化文件的一些内容,看了这一章帮我理顺了很多东西。我用的是bash,所以下面都是用我自己的bash shell举例子的。

               在我的home目录下有三个文件: .bashrc     .bash_profile       .bash_logout , 分别为环境文件,登陆文件和注销文件。环境文件和登陆文件都是初始化文件,登陆文件存放着所有希望在每次登陆时自动执行的命令,而环境文件存放着每次启动一个新shell时都会自动执行的命令。注销文件就是存放着注销时自动运行的命令。这么说可能有点抽象,下面会说的具体一些。

              不管是初始化文件还是注销文件都是存在于自己的home目录下,但是用ls命令是看不到这些文件的,这些文件都是点开头的文件,默认是隐藏的,需要用命令ls -a才能看到这些文件,或许还有别的配置文件比如.vimrc这个文件可以配置vim的一些功能。如果没有这个文件,也可以自己来创建这个文件。或者是去网上下载大神的配置文件,这样的话你的vim会变得比较智能,比如自动补全,自动缩进等功能。可以注意到环境文件一般都是以字符串rc结尾的,比如.bashrc  .vimrc . exrc等等。rc是"run commands(运行命令)"的缩写。

              初始化文件和注销文件很容易区分,但是登陆文件和环境文件就不容易区分,其实我到现在还是对于这两者有一点模糊,有些命令不知道到底应该放在哪个文件下面。最好的方法就是试试看,如果放在一个文件下面没有作用,那么就换一个文件试试看。在说这个之前首先我们要区分一下登陆shell和非登陆shell,顾名思义登陆shell就是启动之前需要的登陆的,比如按下alt + alt + f3 会进入到一个虚拟控制台,让你登陆shell。或者是用远程命令ssh连接远程主机的时候都需要登陆(我还从来没有用过ssh,以后需要了再学吧)。而非登陆shell就是,我们平时的开启一个普通的终端,并不需要我们登陆的shell。那么登陆文件和环境文件的区别就是

    1.登陆shell会执行登陆文件和环境文件

    2.非登陆shell只执行环境文件

            虽然这么说,但是bash比较特殊,bash的登陆shell只执行登陆文件,而不执行环境文件。如果需要他执行环境文件的话需要在登陆文件中加上一条特殊的命令。

    <span style="font-size:14px;">if [ -f ${HOME}/ .bashrc ]
      then source ${HOME}/ .bashrc
    fi                                     //这里的意思是查看.bashrc的文件是否存在,如果存在就运行这个文件</span>

            书上推荐登陆文件中应该包含

    1.创建或者修改环境变量的命令 (书上说环境变量只能在登陆文件中修改,但是我在环境文件中修改貌似也生效了)

    2.执行所有一次性的命令             (我不太理解这个)

            环境文件中则存放一些不能在环境中保存的自定义项,特别是shell选项,别名和函数。


    这一章有一部分的内容是在介绍别的shell的配置文件,但是因为我用的是bash,而且我认为在我熟悉这个shell之前是不会去尝试其他shell的,所以这部分的内容我都跳过了。



    /*-------------------------------------------Mon Dec 2----------------------------------------*/

    &15. 重定向和管道

    15.1~15.12:这几章差不多都是在介绍重定向

           15.1 && 15.2:unix准则:Small is beautiful 或者说 Less is more. 主要是说每个程序都专心完成自己的任务,比如排序程序就专注与排序,不去关心输出或者输入。到现在发现有些时候简单已经无法满足用户的需求,比如早些的编辑器虽然简单,但是远远不及vim或者emacs强大,所以现在的设计准则是:除非程序无法更小,否则小的就是完美的。

             15.3:标准输入,标准输出和标准错误:这里简单理解一下,标准输入就是指键盘输入(或者鼠标,扫描仪输入等),标准输出指屏幕(或者打印机之类的),标准错误一般是把错误信息显示在屏幕上。

             15.4 && 15.5:重定向标准输出:有时候我们希望把结果存储起来,而不是只是显示在屏幕上的时候就可以重定向输出。比如把排序程序sort的结果存在文件result中就用  sort > result      这条命令就可以把sort的结果存储到result文件中,如果文件不存在那么他会创建文件,如果文件已经存在,它会覆盖文件的内容。而有时候你不想覆盖原来的文件,而是只想把结果存在原文件的尾部。就用 sort >> result   如果原文件不存在,它会创建这个文件,如果原文件存在,它会把结果存在原文件的尾部。由于第一条命令会把原文件的内容覆盖了,而且是无法恢复的。所以第一条命令的风险很大。这时候就可以设置环境变量   noclobber   用命令 set -o noclobber  这样,以后如果 sort > result 原文件result已经存在了的话,就会提示你原文件已经存在。而如果你设置了又想暂时忽略这个环境变量来覆盖原来的文件就用 sort >| result 这样就算result存在,也会覆盖result。 在bash中 noclobber 对 >>没有作用。

             15.6:重定向输入:sort的数据不想从键盘输入可以从已经存在文件中输入。 sort < in 这时候就会从in中输入sort需要的数据, sort < in > out这样会从in中输入测试数据,然后把结果输出都out

             15.7:bash重定向标准:上面介绍了重定向标准输入和标准输出,那标准错误怎么办呢?这里首先要介绍一个文件描述符,在unix中有个思想叫万物皆文件,所以每一个设备都有一个文件描述符,其实就是一个数字标识符比如一个程序可能是从#8号文件中读取数据的。比如某个程序就是从#8号文件中输入的,那么要重定向输入就要用命令 command 8 < input 这时候就会把输入重定向到文件input。而unix提供了三个预定义的文件描述符。0代表标准输入,1代表标准输出,2代表标准错误。当重定向输入时默认的就是标准输入,重定向输出时默认的就是标准输出,也就是说 sort 0 < input 和 sort < input等价。而要重定向标准错误那么就要用 sort 2 > errors。 也可以直接 sort 0< input   1 > output 2 > errors 这样把标准输入重定向到input,标准输出重定向到output,标准错误重定向到errors

    <span style="font-size:14px;">总结:因为我觉得上面的内容比较重要,这里有必要来一个小节
    1.重定向标准输入: sort < input   == sort 0 < input
    2.重定向标准输出:sort > output == sort 1 > output    //如果output文件不存在那么会创建文件,如果output文件存在会覆盖。可以通过设置noclobber使得不会发生覆盖,设置了noclobber以后可以用sort >| result来暂时忽略
                   sort >> output = sort 1 >> output   //如果output文件不存在那么会创建文件,如果output文件存在,会把数据添加到output文件的尾部。
    3.重定向标准错误:sort 2 > errors
          可以直接把上面几个结合起来用 sort 0 < input 1> output 2 > errors 
    </span>

             15.8:子shell:这里涉及的就是子进程和父进程的关系,这里我觉得有用的东西就是 用小括号标出一条命令那么这条命令就会在子shell中执行,并且不用等待命令执行完才能输入下一条命令。比如,当前我在documents的目录下我需要到 download下面执行一条./a.out的命令。那么我可以用(cd ~/download/; ./a.out)这样命令执行完以后我还是在document的目录下。并且我不需要等待a.out的命令执行结束就可以往下输入命令。如果生成子shell去执行,那么必须等待子shell结束了,原来的shell才能继续输入命令。

             15.9:Cshell的重定向标准错误:正如我上面说的我用的是bash,所以这章我直接条过了,没有看。

             15.10:组合标准输出和错误输出:现在考虑一个问题,如果想把标准输出和标准错误重定向到同一个文件里面该怎么办呢?直接 sort 1 > out 2 > out这样行么?这个我没试过,今天没时间,有时间了再去试试看,要是有人尝试过,可以留言和我说一下。不过我觉得可能不行,第二次重定向可能会把第一个的out覆盖掉(猜测)。那么怎么做呢? sort 1>out 2>&1 就是用&然后后面跟文件标识。如果是想把内容添加到文件的尾部,那么就用sort >> out 2 > &1(书上是这么写的,但是我很奇怪,第二个不用>>么),这个也有待实验考证。书上还介绍了一个简便的方法就是用一句话来完成 sort &> out 或者是 sor>& out这样,标准输出和标准错误都同时被重定向到out这个文件里。如果是追加输出的话不能用sort &>> out 或者 sort >>& out还是得老老实实地做。

              15.11:抛弃输出:有时候希望运行一个程序,但是并不关心它的标准输出或者标准错误该怎么做呢?那么就把他们重定向到一个特殊的文件 /dev/null (位桶),一切发给位桶的东西都会永远消失。比如sort > /dev/null .

              15.12:这个小节把前面几个小节的内容总结了一下,做了一些实验,我就不介绍了。自己用ls sort之类的命令做一下实验把。

    &16.过滤器:简介和基本操作

    16.1-16.4

     简单介绍了命令的长选项和短选项。一般我们用得比较多的都是短选项,而最常用的长选项应该就是--help。然后介绍了过滤器的概念,看下面的例子:

    <span style="font-size:14px;">cat new old extra | grep Harley | sort | less</span>

    在这个管道线中,提取了三个文件new, old 和 extra 中所有包含Harley的行,然后进行排序,最后通过less每次一屏地输出。一个程序如果能够在官道线中使用(不包括第一个和最后一个),我们称它为过滤器。精确地说,过滤器就是任何能够从标准输入读取文本数据并向标准输出写入文本数据(每次一行)的程序。这里值得注意的一个地方是,管道线中的第一个和最后一个程序不必是过滤器。例如上面的less就不是过滤器。

    然后,后面巴拉巴拉说了一堆。主要就是告诉你,过滤器很强大的,让你好好学习过滤器。真正牛逼的人都是怎么样之类的……

    16.5 可能最简单的过滤器 :cat

    cat就是最简单的过滤器,没有可能这么一说。因为它做的就是每次一行从标准输入读取数据,然后写到标准输出。它没有中间的处理过程,因此它就是最简单的过滤器,没有之一。一般我们用得最多的就是cat 后面跟一个小文件的名字,这样可以查看这个文件的内容。但是这个文件不能太大,文件内容超出一面的话上面的内容是无法看到的。其实,cat最简单的用法是后面什么都不跟,就输入一个cat。它会从键盘读入字符(一行为单位,直到遇到回车),然后输出到屏幕上。Ctrl-D则停止输入。cat也可以用来将一个文件复制到另一个文件中

    <span style="font-size:14px;">cat file1 > file2</span>

    这条命令会把file1中的内容复制到file2中。如果file2不存在,那么会新建这个文件。如果file2本身就是存在的,那么file2会被覆盖。


    16.5 增强过滤器的功能

    还是cat命令,标准的cat 命令应该是从标准输入中读取数据的,也就是键盘输入.那么,如果我们需要它从文件读取数据就该使用重定向

    cat < data
    但是,我们平时都不是这么用的,我们往往会省略中间的那个符号,直接在cat后面跟我们需要显示的文件名. 看上去这只是一个很小的改变,但是,这一点改变就使得cat程序变得更加复杂。不仅仅如此,我们甚至可以在cat后面跟多个文件,看下面三个命令:

    cat name address phone
    cat name address phone > info
    cat name address phone | sort
    第一个会把三个文件的内容一行一行地输出到屏幕上。第二个则是可以看成把三个文件组合起来并写入到info文件中。最后一个则是将数据通过管道传递给sort程序做进一步的处理。这样,如果一个过滤器需要对多个文件进行操作的时候就不用考虑怎么从多个文件中读取数据,而是直接使用cat就行了。当然,其它很多过滤器包括sort都是支持从多个文件中读取输入的。

    这一章,稍微更改了一下过滤器的定义。无论是从标准输入还是从文件中读取数据,经过处理后,写到标准输出的就是过滤器。

    16.6 最有用的过滤器列表

    这一章主要就是列了一张表,里面是常用的一些过滤器,有需要是翻阅一下就行了。接下去会详细地介绍一些过滤器。






          

    展开全文
  • 学习笔记,内容基础,适合初学者。 ...阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)...《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用UnixUnix & Linux 大学教程》 -

    学习笔记,内容基础,适合初学者。


    阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

    《Unix & Linux 大学教程》 - 第一、二章 学习笔记   Unix简介 & 什么是Linux?什么是Unix
    《Unix & Linux 大学教程》 - 第三、四章 学习笔记   Unix连接 & 开始使用Unix
    《Unix & Linux 大学教程》 - 第五、六章 学习笔记   GUI:图形用户界面 & Unix工作环境
    《Unix & Linux 大学教程》 - 第七、八章 学习笔记   Unix键盘使用 & 能够立即使用的程序
    《Unix & Linux 大学教程》 - 第九、十章 学习笔记   文档资料:Unix手册与Info & 命令语法
    《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记   shell & 使用shell:变量和选项
    《Unix & Linux 大学教程》 - 第十三章 学习笔记   使用shell:命令和定制
    《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记   使用shell:初始化文件
    《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记   过滤器:简介和基本操作
    《Unix & Linux 大学教程》 - 第十八章 学习笔记   过滤器:统计和格式化
    《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记   过滤器:选取、排序、组合及变换
    《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记 过滤器:选取、排序、组合及变换 正则表达式
    《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
    《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
    《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器(二)
    《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器(三)
    《Unix & Linux 大学教程》 - 第二十三章 学习笔记 Unix文件系统
    《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
    《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
    《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
    《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制




    >>>>和 <<<<之间的内容为没有理解的部分,希望看到文章的各位,如果知道原因,希望能给予解释,感激不尽。



    第十三章:使用shell:命令和定制

    元字符:

    字符 英文名称 Unix绰号 章号 作用
    & ampersand(和号) -- 26 作业控制:在后台运行命令
    ' apostrophe(撇号) 引号、单引号 12 引用:取消所有的替换
    * asterisk(星号) 星号 24 文件名扩展:匹配0个或多个字符
    @ at sign(at符号) at    
    ` back quote(反引号) 反引号(backtick) 13 命令行:命令替换
    \ backslash(反斜线) -- 12 引用:下一个字符转义
    {} bracebrackets(花括号) 花括号,波型括号 12 变量:确定变量名称的界限
    {} bracebrackets(花括号) 花括号,波型括号 24 花括号扩展:生成一种字符模式
    ^ circumflex(音调符号) 插入记号    
    : colon(冒号) --    
    , comma(逗号) --    
    $ dollar sign(美元符号) 美元 12 变量:用变量的值替换
    <Return> enter、return(回车) 新行 7 空白符:标记一行结束
    = equal sign(等号) 等号    
    ! exclamation mark(感叹号) bang 13 历史列表:事件标记
    > greater-than sign(大于号) 大于 15 命令行:重定向输出
    - hyphen(连字符)、minus sign(减号) 虚线、减号    
    < less-than sign(小于号) 小于 15 命令行:重定向输入
    # number sign(序数符号) hash、pound 14 命令行:注释的开头,忽略该行其余部分
    () parentheses(圆括号) -- 15 命令行:在子shell中运行命令
    % percent sign(百分比符号) 百分比    
    . period(点号)    
    + plus sign(加号)    
    ? question mark(问号) -- 24 文件名扩展:匹配任意一个字符
    " quotation mark(引号) 双引号 12 引用:取消大部分替换
    ; semicolon(分号) -- 10 命令行:用于分割多条命令
    / slash(斜线) 正斜线    
    <Space> space(空格) -- 10 空白符:在命令行中分割单词
    [] square brackets(方括号) 方括号 24 文件名扩展:与一组字符中的字符匹配
    <Tab> tab(制表符) -- 10 空白符:在命令行中分割单词
    ~ tilde(波浪号) -- 24 文件名扩展:插入home目录的名称
    _ underscore(下划线) --    
    | vertical bar(竖线) 管道 15 命令行:创建一个管道线

    (注1:文件名扩展也成为“通配globbing”)

    (注2:连字符:年轻人称之为dash,年长者称之为minus;序数符号:年轻人称之为hash,年长者成为pound)


    这里双引号和单引号作用的区别是:单引号取消所有的替换(单引号中,所有元字符都将失效,变为普通字符),双引号取消大部分的替换,其中有三个符号特例,分别为:美元符号($)、反引号(`)、反斜线(\)

    单引号也称之为强引用(strong quote),双引号称之为弱引用(weak quote)。(反斜线是所有引用中最强的)


    当“\<Return>”位于命令行一行的末尾时,光标会换行,但是由于新行字符被转义,所以它不再是一行结束的信号。

    ~$ echo this is a \
    > test
    this is a test

    感觉只是因为一行写不下了,换了个行,方便阅读而已,实际上还是一行。

    下面看看单引号

    $ echo 'this is a 
    test'

    输出

    this is a 
    test

    命令行只有一个单引号(双引号也一样),输入换行之后shell还在等待更多的输入,直到补全单引号。在C-Shell或Tcsh会报错



    内部命令:通常成为内置命令(builtin command,或者简称builtin),shell可以直接解释他们。

    外部命令:除了内部命令的命令,必须独自运行独立程序。


    每条命令的第一部分都是命令的名称,其他部分为选项或参数。

    当输入内部命令时,shell在自己的进程内运行该命令。

    输入外部命令时,shell创建一个子进程,然后等待。子进程开始执行实际程序。当程序终止时,子进程也将终止,然后控制将返回给父进程,从而导致子进程消失。接着父进程显示一个shell提示,邀请用户输入另一条命令。



    区分内外部命令

    1.外部命令都拥有自己的说明书页,内部命令没有。

    2.使用type命令:type command...

    $ type date time set
    date is /bin/date
    time is a shell keyword
    set is a shell builtin

    date是外部命令,time和set是内部命令


    学习内部命令

    所有内部命令都记录在shell说明书页中。所以可以使用下面命令查看:

    man bash
    man ksh
    man tcsh
    man csh

    说明书页中查找builtin

    apropos builtin(apropos = man -k,见《Unix & Linux 大学教程》 - 第九、十章 学习笔记

    如果存在这样的说明书页,那么可以使用man builtin查看

    $ apropos builtins 
    bash-builtins (7)    - bash built-in commands, see bash(1)
    builtins (7)         - bash built-in commands, see bash(1)

    这里使用man builtins,结果如下

    BASH-BUILTINS(7)                                                                                                                                            BASH-BUILTINS(7)
    NAME
           bash-builtins - bash built-in commands, see bash(1)
    SYNOPSIS
    ……
    BASH BUILTIN COMMANDS
           Unless  otherwise  noted,  each  builtin  command documented in this section as accepting options preceded by - accepts -- to signify the end of the options.  The :,
           true, false, and test builtins do not accept options and do not treat -- specially.  The exit, logout, break, continue, let, and shift builtins  accept  and  process
           arguments  beginning with - without requiring --.  Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with
           - as invalid options and require -- to prevent this interpretation.
           : [arguments]
                  No effect; the command does nothing beyond expanding arguments and performing any specified redirections.  A zero exit code is returned.
            .  filename [arguments]
           source filename [arguments]
    ……
           alias [-p] [name[=value] ...]
    ……

    也可使用help命令,可以以若干种方式显示builtin说明书也中的信息。

    help [-s] [command...]

    $ help -s pwd help
    pwd: pwd [-LP]
    help: help [-dms] [pattern ...]

    只希望查看命令的语法则使用-s(syntax,语法)选项即可。

    查看关键字语法最快捷的方式是使用help



    搜索路径:环境变量PATH,包含所有外部命令的程序的目录列表。shell通过它找到外部命令位置。

    修改搜索路径的时候可以使用export,如果要在PATH后面添加一个路径,不要这样

    export PATH="新添加路径"

    这样只会把PATH设置成上面的路径。

    可以使用export PATH="$PATH:新添加路径"


    shell按顺序检查PATH列表的路径,如果找到了要执行的程序,那么它就停止搜索并执行程序。所以,如果想使用自己的程序,那么只需把自己程序的路径配置到PATH的前面即可。

    可以在PATH中使用点号(.)来添加自己的当前正在工作的目录。

    export PATH="$PATH:$HOME/bin:."

    注意:如果加入工作目录到PATH中,最好放置它到PATH末尾

    如果用户A加入到PATH开头,并且用户A具有超级权限或者特殊权限,那么当切换到另一个用户B的home目录时,在此执行的程序也许并非是用户A想要执行的那个(比如用户B写了一个自己ls放在其home目录下,并且用户A在此执行了ls,那么会执行用户B的ls命令而非系统的),所以可能会被其他人利用。


    提示符:

    shell类型 提示符
    Bash $
    Korn Shell $
    C-Shell %
    Tcsh %或者>
    超级用户 #

    根据惯例:标准的shell提示由一个字符及其后面的一个空格组成。



    修改shell提示:修改环境变量PS1即可。

    export PS1='$ '

    书中使用双引号,但是之前说过,美元符在双引号中为元字符。所以还是不要使用双引号了。

    当然,如果要使用变量,那么还是需要双引号的。比如:

    export PS1="${USER}$ "


    当在命令中使用'${VARIABLE}'时,所有字符都去字面含义,$字符保留下来,以便稍后使用其原本含义。

    当在命令中使用“${VARIABLE}”时,$字符就被解释成元字符,整个表达式在这个时刻就被替换为VARIABLE的值。

    当需要变量引用时,考虑变量在使用前会不会发生变化,如果会,则使用单引号来防止$被解释,直至需要他们。否则使用双引号,从而$立即被解释。

    export PS1='${RANDOM} $'

    这里使用单引号,因为变量RANDOM使用前会发生变化。这样,每次输入命令的时候,都是计算一次RANDOM。

    如果使用双引号,则相当于计算出一个RANDOM赋值到PS1中,所以每次输入命令的时候,前面的提示符都是固定的一个数字。



    使用转义符的特殊码

    Bash和Tcsh允许使用特殊码在shell提示中插入信息。

    下表为部分特殊码,在shell说明书页均有介绍

    含义 Bash Tcsh Korn Shell C-Shell
    工作目录:~表示法 \w %~ X X
    工作目录:只有基名 \W X X X
    工作目录:完整路径名 X %/ $PWD X
    计算机的主机名 \h %m `hostname` `hostname`
    当前用户标识 \u %n $LOGNAME $LOGNAME
    shell的名称 \s X `basename $SHELL` `basename $SHELL`
    时间:AM/PM表示法 \@ %@ X X
    时间:24小时制表示法 \A %T X X
    日期 \d X X X
    星期 X %d X X
    月的第几天 X %D X X
    X %w X X
    X %Y X X
    历史列表:事件编号 \! %! ! !

    X表示相应的shell不支持该选项,可以通过下面介绍的命令替换来设置。

    例如:

    export PS1="\u$ "



    命令替换

    命令替换(command substitution):命令替换允许在一条命令中嵌入另一条命令。shell首先执行嵌入的命令,并且用输出替换该命令。然后再执行整个命令。

    例如:

    $ echo "today is `date` "
    today is 2012年 08月 13日 星期一 16:23:26 CST

    这里先执行`date`,它的输出为2012年 08月 13日 星期一 16:23:26 CST,然后将它的结果替换掉`date`

    现在变为cho "today is 2012年 08月 13日 星期一 16:23:26 CST"

    其实我觉得命令替换很好理解,和$类似。只不过$变量,输出的是变量值,然后将变量用变量值替换;而命令替换则是执行命令而不是取变量值而已。

    比如:

    $ echo $TERM
    xterm

    可以理解为先计算$TERM为xterm,然后用其输出“xterm”替换$TREM,变为echo xterm。



    历史列表

    在输入命令时,shell会将命令保存到历史列表中,而无论命令是否有错误。

    可以通过Up和Down调用历史列表,但一次只能显示一条。

    历史列表中,每条命令称为一个事件,每个事件都有一个内部编号,称为事件编号。所以可以通过编号调用历史命令。


    fc(fix command)

    fc -l(同history):查看历史列表

    fc -s 编号(同!编号):执行此编号的命令

    fs -s(或!!):执行上一条命令


    重新执行命令前修改命令

    fc -s pattern=replacement number(类似!number:s/pattern/replacement,此方式只替换一次

    在第number号命令中搜索字符串pattern,将其替换为replacement

     2024  date
     2025  history 
    suzhaoqiang-一  8月 13$ fc -s e=a 2024
    data
    No command 'data' found, did you mean:
     Command 'dat' from package 'liballegro4.2-dev' (universe)
     Command 'date' from package 'coreutils' (main)
    data: command not found

    把2024号命令中e替换为a。

    (我暂时觉得,还是复制粘贴过来的好,如果命令较长,其中有多个e,那就麻烦了,它会全部替换,或者替换第一个)


    修改上次命令

    fc -s pattern=replacement(类似^pattern^replacement,此方式只替换一次)


    ^R:重新调用包含该模式的最近一条命令。

    (reverse-i-search)`l': ls -l

    输入ctrl+R后,开始准备查找命令,然后输入ls,它就会找到我最近一次执行的ls命令为:ls -l。


    历史列表大小

    通过设置HISTSIZE环境变量设置,例如

    export HISTSIZE=50


    rm可以指定一系列模式。比如temp*表示文件名以temp开头的文件,temp?表示文件名以temp开头但是后面根一个字符的文件。

    所以执行“rm temp* extra?”之前,要先"ls temp* extra?",确保不会删错文件,然后执行“fc -s ls=rm”即可



    自动补全

    shell类型 自动补全 补全对象
    B K C T 文件名补全 文件和目录
    X X T 命令补全 命令,包括路径名
    X X T 变量补全 变量
    X C T 用户标识补全 系统上的用户标识
    X X X 主机名补全 局域网上的计算机

    (B=Bash,K=Korn Shell,C=C-Shell,T=Tcsh,X表示对应的shell类型不支持该特性)



    别名

    alias、unalias

    alias [name=commands]

    如果你经常输入cd ../.. 那么可能会觉得这样很麻烦,如果能让cd2与cd ../..功效一样该多好

    那么我们给cd ../..起一个别名,别名就叫cd2

    alias cd2='cd ../..'

    这时再输入cd2就可以了。

    当然你也可以给alias起别名

    alias a=alias

    你也可以给多条命令起别名,比如:

    alias test='cd;ls'


    也可以把命令本身修改了,比如:

    alias ls='ls -l'

    那么运行ls的时候则相当于执行ls -l,如果想临时执行一下原来的ls命令,那么需要在命令前加“\


    \ls

    则相当于最初的ls命令


    查看别名定义

    alias name

    type name

    $ type cd2
    cd2 is aliased to `cd ../..'
    $ alias cd2
    alias cd2='cd ../..' 

    取消别名

    unalias name

    unalias -a(取消所有别名)


    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    作者提到,由于技术原因,下面的命令不能应用别名:

    alias del='^ls^rm'(C-Shell风格,Bash中执行^ls^rm是可以的)

    但是可以使用下面的:

    alias del='fc -s ls=rm'

    不清楚原因,所以就先记住好了,猜测是由于脱字符的关系吧。


    可以给下面命令起别名,达到同样的目的:

    (1) rm !ls:*

    (2) alias del='rm \!ls:*'(为什么叹号前面要加“\”?)

    但是我的机器只能执行(1),却不能执行(2)(叹号前面不加也一样无法执行),希望路过的同学能帮忙解答一下。

     写道
    rm: cannot remove `!ls:*': No such file or directory

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<





    转贴请保留以下链接

    本人blog地址

    http://su1216.iteye.com/

    http://blog.csdn.net/su1216/

    展开全文
  • 阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)...《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用UnixUnix & Linux 大学教程》 - 第五、六章 学习笔记 GUI:图形用户界面 &
  • Unix & Linux大学教程

    2020-07-27 23:32:45
    Unix & Linux大学教程Unix & Linux大学教程Unix & Linux大学教程
  • 阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)...《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用UnixUnix & Linux 大学教程》 - 第五、六章 学习笔记 GUI:图形用户界面 &
  • Unix & Linux 大学教程》 - 附录F

    千次阅读 2012-11-22 13:10:32
    学习笔记,内容基础,适合初学者。 阅读之前,请务必花30秒查看前言说明(在第一、二章...《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用UnixUnix & Linux 大学教程》 - 第五、六章
  • 第四章:开始使用Unix data:显示时间和日期 whoami:显示你的用户标识 who:显示所有当前登录系统的用户标识 w:谁在登录系统,并告诉你他们在干什么 login logout:注销(有可能需要exit) exit:注销 ...
  • 学习笔记,内容基础,适合初学者。 ...阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)...《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用UnixUnix & Linux 大学教程》 -
  • Unix & Linux 大学教程

    千次阅读 2014-02-27 23:23:19
    Unix & Linux 大学教程 http://su1216.iteye.com/category/234819
  • Unix & Linux 大学教程第一、二章

    千次阅读 2012-08-25 08:32:56
    学习笔记,内容基础,适合初学者。   阅读之前,请务必花30秒查看前言说明(在第一、二章前面...《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用UnixUnix & Linux 大学教程》 -
  • Unix、Posix和标准UniX规范

    千次阅读 2017-06-03 18:14:40
    Unix、Posix和标准UniX规范
  • 2015-4-24 21:59 有趣的东西都值得在恰当的时候为来年...【Unix&Linux大学教程 (美)Harley Hahn 著 张杰良 译 2010 清华大学出版社】 但凡书中所列原文,吾必以引号引之,以示“乐趣”之由来,亦是吾之对作者之尊重。
  • Unix的起源

    千次阅读 2016-12-11 17:55:55
    不得不说的 Unix【内容摘要】 Unix诞生于1969年,此后快速被广泛应用; Unix一开始是开源的,后来AT&T收回版权,并且不公开源代码; Unix的代码是由90%的C语言和10%的汇编组成; Unix后来的两大分支:AT&T的System V...
  • Unix历史和特性

    2019-10-19 21:04:46
    Java学习第三天,入门在学习Unix,今天发现W3Cschool上面只有Linux的教程,没有Unix教程,感觉很迷惑。 Unix不是号称Linux的父亲吗,为什么连教程都没有? 课堂上老师重点讲解了Linux,对Unix了解还很少,于是...
  • 学习笔记,内容基础,适合初学者。阅读之前,请务必花30秒查看...什么是UnixUnix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用UnixUnix & Linux 大学教程》 - 第五、六章 学习笔记 GUI:图形用
1 2 3 4 5 ... 20
收藏数 49,042
精华内容 19,616
热门标签
关键字:

unix 大学