Ubuntu权威指南学习笔记

一、ubuntu的安装

  1. 所需资源:(1)Ubuntu的iso文件,可从ubuntu官网下载;(2)u盘刻录软件unetbootin。
  2. 安装步骤
    1. 进入bois界面,设置usb优先启动,进入ubuntu的安装界面;
    2. 一些简单的前期设置这里直接忽略,主要说明一下磁盘分区。
      1)至少需要两个磁盘分区,分别用于创建”/”文件系统与交换分区。其中,linux系统使用交换分区提供虚拟内存,在一个32位的pc中,不超过2GB。2)若磁盘存储空间较大,可划分多个磁盘分区,在每一个磁盘分区中创建一个单独的文件系统,如/usr,/var,/home等文件系统,但不能把/bin,/dev/,/etc/,/lib,/root和/sbin目录作为单独的文件系统分区,这些目录应位于”/”文件系统分区中。3)若要创建多个磁盘分区,查阅分区要求与建议。

二、命令行基础知识

  1. 对于ubunut桌面版(若为服务器版,略过),进入终端的方式:
    1. ctrl+alt+T,默认屏幕大小打开终端;
    2. alt+F2,进入执行命令文本框,输入gnome-terminal --full-screen,即进入全屏显示,输入exit,即可退到1中打开的状态;
    3. 非Gnome图形界面,进入字符终端,输入crtl+alt+f1-6,打开tty1-6的终端界面。输入ctrl+alt+f7,返回GNOME界面;
    4. 也可以通过设置/etc/default下的grub文件,设置开启启动到图形界面还是字符界面。
  2. Linux系统默认的命令解释程序是bash,GNU Bourne-Again Shell, 是GNU组织开发和推广的一个项目。
  3. 一个命令由以下3部分内容组成,中间以空格或制表符等空白字符隔开,形如:<命令名> <命令选项> <命令参数>
    1. 其中的命令选项以”-“开头,以”–”为起始标志的命令选项,称为GUN选项。除个别命令选项外,大部分”–”开头的是”-“的同义词,可替换使用。
  4. 普通用户与超级用户的切换
    1. 超级用户的默认命令提示符为”#”,普通用户的默认命令提示符为”$”;
    2. 在终端,键入sudo su,输入密码,进入超级用户模式;键入exit,回到普通用户模式。
  5. 前后台进程切换
    1. 前台形式,在shell执行命令期间,用户只能等待,不能做其他操作;
    2. 后台形式,在命令执行同时,shell会立即输出命令提示符,等待用户输入新的命令。只要在命令的后面加上”&”即可
  6. 输入输出
    1. 从终端输入,这个数据输入源是标准输入stdin(0)
    2. 运行结果返回到终端屏幕上,这个输入目的是标准输出stdout(1)
    3. 运行期间的错误也显示在屏幕上stderr(2)

      注意:其中(n),n指文件描述符。Linux系统启动一个进程(该进程可能用于执行Shell命令)时,将自动为该进程打开三个文件:标准输入、标准输出和标准错误输出,分别由文件标识符0、1、2标识。

  7. 输入输出重定向

    1. ,使用指定的文件作为标准输入(其文件描述符为0),以便从指定的文件中接收输入数据;

      wc -l < io.txt,表示将io.txt中的记录行数显示到屏幕终端。

    2. >fname,使用指定的文件作为标准输出(其文件描述符为1),若文件不存在则新建,存在且noclobber标志已经设置,将产生错误,否则覆盖原文件中所有内容。若需要追加在原文件内容后面,需要用>>fname
      例如:ls -l > io.txt,表示将当前目录下的所有文件信息写入io.txt文件中,若io.txt没有,则自动创建,存在则直接覆盖其中的内容。
    3. >|fname,除了忽略noclobber标致之外,其功能与>fname相同。
      注意:>|符号是强制覆盖文件的符号,它与Shell的noclobber选项有关系,如果noclobber选项开启,表示不允许覆盖任何文件,而>|符号则可以不管noclobber选项的作用,强制将文件覆盖。set -C noclobber开启noclobber,set +C noclobber关闭noclobber。
    4. <>fname,以读写方式打开指定的文件,并使之作为标准输入。
    5. <<[-]fstr,Here document文档的使用技巧。
    6. <&digti,使用指定的文件描述符复制一个标准输入。
    7. >&digti,使用指定的文件描述符复制一个标准输出。
    8. <&-,关闭标准输入,而”n<&-“则表示关闭输入文件描述符n。
    9. >&-,关闭标准输出,而”n>&-“则表示关闭输出文件描述符n。
    10. <&j,把标准输入重定向到文件描述符j表示的输入文件中。
    11. >&j,把标准输出重定向到文件描述符j表示的输出文件中。
    12. &>fname,把标准输出和标准错误输出均重定向到指定的文件中。
      以下I/O重定向符号”<”或”>”前面有一个数字,则表示相应的文件描述符对应的文件。
    13. 0,把标准输入重定向到指定的文件中。
    14. 1>fname,把标准输出重定向到指定的文件中;1>>fname,把标准输出重定向并附加到指定的文件中。
    15. 2>fname,把标准错误输出重定向到指定的文件中;2>>fname,把标准错误输出重定向并附加到指定的文件中。例如:
      $ errfile=script.errors(errfile就是文件描述符);
      $ sss 2>$errfile,sss是错误指令,则输出错误信息,2被重定向到了errfile对应的文件中,故错误信息写在script.errors;
      $ aaa 2>>$errfile,继续追加错误信息;
      cat script.errors,显示错误信息。
    16. i>&j,把文件描述符i表示的输出文件重定向到文件描述符j表示的文件中。例如:

      command >command.log 2>&1,标准输出和标准错误输出都重定向到同一个文件中
      $ echo "hello" >> command.log 2>&1
      $ sss "hello" >> command.log 2>&1

    17. [j]<>fname,以读写方式打开指定的文件,并把文件描述符j分配到指定的文件。如果文件不存在,则创建该文件。如果未指定文件描述符j,则表示默认的文件描述符0,即标准输入。

  8. 管道

    1. 基本概念:在linux系统中,管道是一种先进先出的单向数据通路。是一种特殊的管道重定向。
    2. 用途:
      1. 利用管道符号”|”,可以把一个命令的标准输出连接到另一个命令的标准输入。例如:

    ls /usr | wc -w,统计/usr目录下文件的数量(利用管道把ls和wc两个命令连接在一起)
    传统的方法,是利用一个中间临时文件,如ls /usr > file.tmp ; wc -w < file.tmp

  9. 为滤通程序提供原始数据。由该程序读取来自标准输入的数据,按照指定的检索原则和模式,从输入数据中提取期望的,包含给定字符串的数据,如grep。
  10. 可以依次加工处理多个命令、脚本和程序的输出数据。command1 | command2 | command3 > output-file
  11. tee命令,一个相当于三通管的实用程序。主要功能是通过标准输入接收并显示数据,同时把数据存储到指定的文件中。
  • 元字符与文件名生成
    1. linux中,很多命令采用文件名作为命令参数,例如:

      $ ls -l io.txt
      -rw-rw-r-- 1 sucab sucab 12 5月 14 10:42 io.txt

    2. Shell支持的与文件名生成有关的元字符极其说明。注意,元字符可以组合使用。
      1. *,可以匹配任何数量的字符或字符串,包括空字符串。例如:
        ls -l *.txt,列出所有.txt为文件后缀名的txt文件。su*,表示任何一个以”su”为起始的字符串。
      2. ?,匹配单字符串。
      3. [...],匹配给定范围的字符。例如[a-z],[0-9]。[!...]或[^...],表示不在该范围中。例如:
        列出当前目录下,以s或i开头的文件。ls -l [io]*
        列出不是a-z中字母开头的文件。ls -l [^a-z]*
      4. 注意set -f能够禁止文件名的生成。当shell无法解释元字符时,应注意检查是否设置了该标志。
    3. 转义和引用
      1. 本身具有特殊意义的元字符,在前面加上转义符号\,则失去其特殊意义。而对于一些普通字符,加上转义符号\,则具有特殊意义。例如:
        \a,生成声音提示;\b退格符;\eEsc字符;\f换页符;\n换行符;\r回车符;\t制表符;\v竖向制表符;\\反斜线;\’单引号;\nnn采用1-3位8进制数值表示等价ASCII字符;\xHH采用1-2位16进制数值表示的等价ASCII字符;\cXCtrl+X字符。
        其中,\n换到下一行,\r`回到本行的开头。Unix系统里,每行结尾只有”\n”;Windows系统里面,每行结尾是”\n\r”;Mac系统里,每行结尾是”\r”。
  • 历史命令(很强大呀!)
    1. fc命令的常见用法
      1. fc -l 10 20,显示命令缓冲区或文件中序号为10-20的命令;
      2. fc -l -10,列出最近输入的10条命令;
      3. fc -l cat,列出最近一次输入的以cat命令为其实字符串的命令;
      4. fc -e gedit/vim 10 20,要利用vim或gedit编辑并执行序号为10-20的命令
      5. 先执行ls -l /ect/profile,要想再执行一遍该指令,可以输入fc -s
      6. fc -s 100,执行先前的第100号命令。
    2. history命令的常见用法
      1. 其实是fc的一个特列,是fc -l命令的别名。在bash中,列出所有命令;在korn shell中,仅列出16条命令。经实验,在ubuntu linux中执行fc -l,显示16条;执行history,显示所有;
      2. history 10,列出最近执行的10条命令;
      3. history -c,清除命令历史缓冲区中的命令。
    3. 重复执行先前命令的方式
      1. 在bash中,执行$ !!
      2. 常用的部分”!”命令,自行查阅。
  • 命令的别名(略)
  • 作业控制
    1. 在bash中,set命令的”-m”或”-o monitor”选项用于启用shell的作业控制功能。
    2. 除了进程ID之外,shell还会为每个作业分配一个数字较小的作业号。例如,利用”&”符号启动后台作业,并使之异步运行,shell将会输出如下信息。
      $ find / -name "*conf" -print > conf.log 2>&1 &
      [1] 2136[1]作业号,2136作业的进程ID。
    3. shell 采用作业控制表记录和跟踪当前的作业。利用jobs内部命令,可以显示作业控制表中保存的当前作业。
    4. linux中的作业有运行running,停止stopping,退出exited,完成finished等状态。
      $ bg %1(作业号),把停止运行的作业放到后台运行;
      $ fg %2,让一个后台作业回到前台继续运行;
      kill %1,停止后台作业 wait %2,等待当前正在运行的作业完成。
  • 会话记录与命令确认
    1. 保存会话记录:在linux中提供了script命令,可以记录用户从注册到推出系统的整个或部分会话过程,包括用户的输入和系统的响应信息。例如:
      scripttypescriptscriptstartedfileistypescript ….,用户操作
      exitexitscriptdone,fileistypescript cat typescript,显示用户相关操作信息
    2. 确保使用命令的正确性
      1. which:区分同名指令,如tar命令,如何知道是用的哪个tar命令,$ which tar,显示/bin/tar
      2. whereis,显示所有与给定命令相关的文件,如$ whereis tar,显示tar:/bin/tar /usr/lib/tar /usr/include/tar.h /usr/share/man/man1/tar.1.gz
      3. 通过apropos命令,模糊查找给定命令在文档中的说明;whatis命令,完全匹配给定的关键字命令。
  • 三、文件系统

    1. 路径名称规则
      1. 如果路径名以”/”开头,则说明该路径名是从根目录开始的绝对路径名,除此之外,其他所有的路径名都是相对于当前目录的相对路径名
      2. 路径名要么是单个名字,或者是以”/”分隔的多个名字,最后一个是文件,可以是任何类型;
      3. 在任何目录位置,在路径名中使用”..”,可以往上攀升系统的目录层次。
    2. 树形层次结构
      1. -/
      2. --/bin其中包含系统、系统管理员和普通用户可以共享的各种通用程序,如cat、cp、mv、mkdir、rm、ls及ps等常用的基本命令,以及如bash等的各种shell。
      3. --/boot,其中包含系统引导程序、linux内核程序文件vmlinuz、磁盘内存印象文件initrd以及GRUB初始引导程序和配置文件等。
      4. --/dev,在linux系统中,任何设备均对应一个或多个特殊文件(或称为设备文件),这个目录包含了系统支持的所有设备文件。例如:console表示控制台,lp0表示打印机。

        ----/mem,表示系统的物理内存。
        ----/sda,sda表示连接到主控制器的第一个磁盘,sda1或sda2等则分别表示其中的第一个和第二个磁盘分区等。
        ----/...,其他相关,这里略。
        ----/tty,表示系统的串口设备。

      5. --/etc该目录是整个linux系统的中心,其中包含所有系统管理和维护方面的配置文件,如host.conf,syslog.conf和vsftpd.conf等。
        ----/apache2,apache配置文件的根目录,其中包含apache服务器的各种配置文件,如apache2.conf等。
        ----/apt其中包含了软件管理工具使用的配置文件,如sources.list等。
        ----/cron.d,用于存储cron进程调度运行后台进程所用的配置和控制文件。
        ----/init.d,用于存储系统启动过程中需要有init调度执行的脚本文件。
        ----/mysql其中包含MySQL数据库的配置文件,如my.cnf等。
        ----/network,其中包含网络接口的配置文件interfaces,以及相关的配置工具。
        ----/...
        ----/sshOpenSHH网络服务所在配置和控制文件的根目录,其中含有sshd_config等重要配置文件。
      6. --/home用户主目录的根目录。新增一个用户,系统将会在/home目录中创建一个形如/home/ USER USER为用户名。也可以作为单独的文件系统
      7. --/lib,该目录含有系统引导过程,以及运行系统命令所需要的内核模块和各种动态链接共享库文件(扩展名为.so,相当于windows系统中的.dll文件)。其中,内核模块(驱动程序)位于/lib/modules/kernel-version子目录中。
      8. --/lost+found,每个文件系统分区都存在一个lost+found目录,用于存储fsck命令在检测与修复文件系统时删除的文件或目录。
      9. --/media,移动存储介质的安装点,当利用GNOME界面安装移动存储介质时,系统将会自动地把移动介质安装到此目录下的某个子目录中。
      10. --/mnt,文件系统的临时安装点。
      11. --/opt,应用程序等附加软件的安装目录。
      12. --/proc,进程文件系统proc的根目录,其中的部分文件分别对应当前正在运行的进程,可用于访问当前进程的地址空间。
        ----/net,其中的文件分别表示各种网络协议(如tcp,udp及arp等)的状态与统计信息。
      13. --/root超级用户root的主目录(在linux系统中,”/”是整个系统的根目录,而非超级用户的主目录)
      14. --/sbin,该目录中的命令主要供超级用户使用,普通用户通常无法使用。其中包含与系统引导、管理维护,以及与硬件配置等方面有关的命令和脚本文件,符fdisk、init和ifconfig等。
      15. --/tmp,临时文件目录,用于存储系统运行过程中生成的临时文件,也可以用户存储自己的临时文件。一般不要自己删除这个目录中的文件。
      16. --/usr既可以作为一个单独的文件系统,也可以作为根目录下的一个子目录,其中存有系统提供的各种共享数据(如用户命令、库函数、头文件和文档等)
        ----/include,用于存储各种c语言文件。是c开发人员需要经常引用的文件。
        ----/bin,其中包含用户经常使用的各种命令(find,make,…,who)
        ----/lib,包含各种共享的库函数,可供程序员以静态或动态链接自己开发的应用程序。
        ----/sbin
        ----/share
        ----/src,用于存放linux系统内核的源代码和文档等。
      17. --/var既可作为一个 单独的文件系统,也可作为根目录下的一个子目录,用于存储各种可变长的数据文件(如日志文件)、暂存文件或待处理的临时文件等。
        ----/lib,用于存储软件包特定的动态链接共享库、配置文件和状态信息等。
        ----/lock
        ----/log,用于守护进程日志文件的存储目录
        ----/mail
        ----/run
        ----/spool,用于缓存各种待处理的文件。
        ----/tmp,用于存储各种临时文件。
        ----/wwwapache服务器的用户文档根目录,用于存储和发布各种HTML文档。
    3. 文件的类型
      1. 普通文件
      2. 目录文件
        1. $ pwd,查看当前所处的目录;
        2. $ mkdir dirname,创建一个目录;
        3. $ rmdir dirname,删除一个目录。
      3. 特殊文件:也称设备文件,linux系统利用特殊文件作为用户与I/O设备之间的接口,使用户能够像读写普通文件一样访问外部设备。
      4. 链接文件
      5. 符号链接文件
      6. 管道文件
    4. 文件保护机制
      1. linux系统把用户分为三类:
        1. 文件属主
        2. 同组用户
        3. 其他用户
      2. 文件的三种基本访问权限
        1. r(读):如果文件具有读许可,则相应的用户额可以读文件,如显示文件内容、复制文件等,但不能修改文件。如果允许用户进入某个目录,列举目录下的文件,则至少应赋予用户“读”目录的访问权限;
        2. w(写):如果文件具有写许可,则相应的用户可以读、写文件,包括显示文件内容以及复制、修改、移动和删除文件等。对于目录而言,如果允许用户创建新文件和删除文件,则必须赋予用户“写”目录的访问权限;
        3. x(执行):如果具有执行许可,则相应的用户可以运行文件(如程序文件)。对于目录而言,如果允许用户访问其中的任何子目录,则必须赋予用户“执行”目录的访问权限。
      3. 举例
        $ ls -l /bin,查看对bin目录的访问权限
        drwxr-xr-x 2 root root 4096 5月 9 05:47 /bin
        d表示文件类型为目录,rwx r-x r-x表示文件属主的访问权限为rwx、同组用户的访问权限为r-x、其他用户的访问权限为r-x。
      4. 修改文件的访问权限
        1. 前提条件
          1. 用户必须是文件或目录的属主
          2. 或超级用户
        2. chmod用法示例
          1. 相对权限设置法:
            格式$ chmod permissions dir-or-file
            用字符表示用户类型:u(文件属主),g(同组用户),o(其他用户),a(所有用户)
            “+”或”-“表示增加或撤销相应的权限;
            $ chmod o+w script,表示对其他用户添加写权限
            $ chmod o-rw script,表示对其他用户撤销读写权限。
          2. 绝对权限设置法
            格式$ chmod numcode dir-or-file,numcode是一个数字代码,用于表示文件的访问权限,由3位数字组成,分别对应于文件属主、同组用户和其他用户。
            $ chmod 755 file,表示对属主用户设定权限码为7,同组用户权限码为5,其他用户权限码为5。
            “r”对应的二进制码为100(4),”w”对应的二进制码为010(2),”x”对应的二进制为001。其中,rwx构成的某一用户的权限码是8进制的。
            解读755,7=4+2+1(rwx),5=4+0+1(r-x),5=4+0+1(r-x)。
        3. 其他访问权限设置
          1. 默认权限:无论何时创建一个文件,linux系统通常会为用户设置一个默认的访问权限。用umask命令。
            格式,umask [-S] [nnn],这个[nnn]与chmod命令中的numcode相反,在对应位上设置1,即为撤销该权限。如000 000 000,设置为000 010 010,即为022,表示u有rwx权限,g有r-x权限,o有r-x权限。

    四、文件和目录操作

    1. 创建文件

      $ touch emptyfile,当前目录下,要是没有该文件,就自动创建一个,有则不产生作用;
      $ > emptyfile,利用重定向,产生的文件将覆盖已有的同名文件;
      $ echo "hello word!" > newfile,创建一个含有内容为”hello world”的新文件;
      $ cat > myfile,通过终端输入内容,创建并写入myfile文件;
      还可以通过vim编辑器,在terminal里面进行操作。

    2. 显示文件列表

      1. 使用ls命令:ls [options] [dir or file]
      2. 几个常用的参数:ls -a,列出当前目录下的所有文件(包括.*隐藏文件);ls -d如果指定的参数是目录,只显示目录的名字,而不是列出目录下的文件;ls -l,这个经常使用,以每行一个文件的长格式列出文件的类型、访问权限、链接数、用户属主、用户组、文件大小、最后修改时间和文件名等;ls -r,以文件名反向排序显示文件列表(–reverse);ls -R,注意区分与r的区别(–recursive),递归显示目录及子目录下的所有文件;ls -s,显示分配给文件的数据块,因此,当文件大小相近时,它们的数据块可能是一样的。

      * 示例:*

      1. 列出当前目录下的文件,ls
      2. 列出指定目录下的文件,ls /
      3. 利用通配符显示文件,如ls -l *.c*匹配多个字符,列出当前目录下以c结尾的所有文件,为了避免列出子目录中的文件,可以使用ls -ld *
    3. 显示文件内容

      1. cat [options] [file],将文件中的内容全部显示到终端,若内容太多,只能看到最后部分;
      2. more [options] [file],将从头到尾一页一页地仔细阅读文件。如果文件很长,在左下角会出现--More--(n%)(n%)表示已显示的数据内容占整个文件的百分比。less命令的功能与more类似且比它强大;
      3. head [-number | -n number] [file],number表示需要输出的行数。默认,输出前10行(包括空行);
      4. tail [+/-number [-lbcf]] [file]+表示从文件的其实位置开始计算,-表示从文件的结束位置开始计算。number表示要输出的行数。备注tail,只能访问静态文件的最后几行,对于内容动态增长的文件如日志文件,需要这样访问,tail -f somelogfile。也就是说,somelogfile文件内容加一行,终端就显示一行,实时的。
    4. 复制文件

      1. cp [-ir] source_file target_file,其中,-i表示交互复制方式。例如,要将src文件拷贝到target文件时,如果target文件存在,则给出提示信息,是否要覆盖已有的文件。-r表示递归操作,就是如果src是目录文件,则将目录中的子目录递归复制,拷贝到目标文件中。
    5. 移动文件

      1. mv [-fi] source_file target_file,把文件从一个目录移动到另外一个目录中,或者重新命名一个文件。-f表示强制移动或改名(force),-i用于交互,给出目标文件存在时的提示信息。
    6. 删除文件

      1. rm [-rfi] [file]-r表示递归地删除目录中的文件及目录本身;-i表示交互操作,询问是否真的要删除;-f表示强制删除,即使不存在该文件,也不会输出任何信息。
    7. 改换目录

      1. 在linux系统,每个用户都有一个属于自己的主目录。在注册之后,系统将会自动地把用户引导至自己的主目录;
      2. 在bash、korn shell等shell中,~表示用户主目录缩写,在bourne shell中,停替代方法是引用$HOME
    8. 创建、移动和复制目录

      1. mkdir src
      2. mv src
      3. cp -r dir1 dir2
    9. 删除目录

      1. 指令模版,rmdir [-p] directory
      2. 删除一个空的目录,其指令为rmdir dir1
      3. 删除一个非空目录,需要添加-r参数选项,意思是recursive递归,即rm -r dir1,可以把指定目录及其任何子目录中的所有文件全部删除。
    10. 比较文件之间的差别

      1. 当面对两个类似的文件,想找出其中的细微差别时,可以使用diff命令比较,diff file1 file2
      2. 比较三个文件的不同,可以使用diff3 file1 file2 file3
    11. 从系统中检索文件

      1. find directory [options]
        1. find命令将按用户指定的检索条件,从指定的目录开始,找出满足匹配准则的所有文件。指定的检索条件可以是文件(包括通配符)、文件大小及文件修改日期等。
        2. 其中,directory是检索的起始目录,options是一种表达式选项,用于指定各种匹配准则或检索条件。
        3. find命令的部分常用选项,自查。
      2. **
      3. **
    12. 检索文件内容

      1. 利用grep检索文件内容
        1. 检索文件中的特定字符串,grep [-inv] string file,其中,-i表示忽略字母大小写,-n表示在输出结果之前给出文本行所在文件中的行号,-v表示检索不包含个i定字符串或模式的所有文本行。string是一个检索模式。检索模式可以是一个准备检索的字符串、一个单词或词语。
      2. 在grep中使用正则表达式
        1. 在grep中可使用简单的正则表示,复杂的模式匹配需要使用egrep;
        2. *
    13. 排序

      1. sort [-bdfimnru] -k key -t sepchar -o output [file],可对输入的数据或文件内容进行排序。其中,-n按照字符串数值进行排序,-r表示按照从大到小或反向顺序排序,-k表示关键字的字段位置或关键字字段起止字符位置或范围,-b表示忽略前置的空白字符,-d表示仅考虑字母数字和空格字符,按照字典顺序排序;
      2. 使用示例:

      ls -l /var/log/syslog*,该指令是显示所有系统日志的,显示的部分结果如下:
      -rw-r----- 1 syslog adm 552 6月 8 15:17 syslog
      -rw-r----- 1 syslog adm 103381 6月 8 13:30 syslog.1
      ...
      现在需要根据文件的大小降序排列,具体指令如下:
      ls -l /var/log/syslog* | sort -rn -k5
      -rw-r----- 1 syslog adm 103381 6月 8 13:30 syslog.1
      -rw-r----- 1 syslog adm 552 6月 8 15:17 syslog
      ...
      其中,-r表示降序排序,-n表示按照数值大小,-k按照第5个关键字字段位置(也就是文件的大小),实现最终的排序。

    五、编辑文件(vim)

    1. vim来源:vim是对unix系统上vi编辑器的扩充与增强,提供许多附加的功能特性,与vi几乎完全兼容。可运行在windows、Macintosh、Unix和Linux系统上。

    2. 启动vim

      1. $ vim myfile,若myfile存在,则会打开指定的文件,并显示文件第一页的内容。若文件不存在,vim将会打开一个新文件;
      2. 进入vim编辑器界面之后,屏幕左边的波浪符”~”表示空行;
      3. vim可以同时编辑多个文件,也可以不指定文件名,等到完成文件再写入新文件,然后退出;
      4. 直接输入vim命令而未指定文件的名字,会显示vim的介绍信息。此时,可以直接进入插入模式(输入i),编写文件,然后保存(:w filename),退出(:q)。如果想放弃保存当前的操作,则可以强制退出(:qa!)。具体可同:help查看帮助;
      5. 状态行:编辑窗口的最后一行是vim的状态行,用于显示编辑器的状态、编辑过程中出现的错误信息、光标所在的行列位置、删除或复制的行数等。初始启动时,状态行会显示文件的名字、行数和字节数。
    3. vim编辑器的工作模式

      1. 命令模式:按下esc键,总是进入命令模式;
      2. 输入模式:在要输入文本之前,输入i或a进入输入模式,然后esc,返回命令模式,执行保存退出;
      3. 输入”:”开始执行命令的时候
    4. 保存编辑文件并退出vim

      1. 注意随时保存数据,特别是当编辑重要的文件时,vim编辑器提供了许多命令,用于把内存缓冲区中的数据内容保存到磁盘文件中,然后退出vim。如”保存并退出”、”强制退出并不保存”等;
      2. 相关命令
        1. :w,保存编辑后的文件内容,但不退出vim编辑器。把内存缓冲区中的数据写到启动vim时指定的文件中
        2. :w!,强制写文件,即强制覆盖原有的文件。如果原文件是只读文件,并且当前用户是该文件的属主,则可以强制写入;
        3. :wq,保存文件内容后退出vim编辑器。写入并退出。另一个替代指令为ZZ
        4. :wq!,强制保存文件内容后退出;
        5. ZZ,如果文件已经做过编辑处理,则把内存缓冲区中的数据强制写到启动vim时指定的文件中,然后退出。否则只是退出而已;
        6. :q,在未做任何编辑处理而准备退出vim时,使用;
        7. :q!,强制退出vim编辑器,放弃编辑处理的结果。如果确实不需要保存修改后的文件内容,可输入该命令,强制退出;
        8. :w filename,把编辑处理后的结果写到指定的文件中保存;
        9. :w! filename,把编辑处理后的结果强制保存在指定的文件中,如果文件已经存在,则覆盖现有的文件;
        10. :wq! filename,把编辑处理后的结果强制保存在指定的文件中,如果文件已经存在,则覆盖现有的文件,最后退出;
    5. vim编辑器基本命令

      1. 移动光标位置:
      2. 输入文本:
        1. a,可在当前光标所在字符位置之后输入数据;
        2. A,可在光标当前所在行的行尾输入数据;
        3. i,可在光标当前所在字符位置之前输入数据;
        4. I,可在当前光标所在行的行首输入数据;
        5. o,可在光标所在行的下一行新起,输入数据;
        6. O,可在光标所在行的上一行新起,输入数据。
      3. 修改和替换文本
        1. C,替换从光标位置开始直至行尾的所有数据内容,然后输入数据;
        2. cw,替换单个字。如”hello world”,光标在hello的h上,输入cw,会取代hello(以空格分隔,一个单词为一个字),输入新的字替换,而不会去掉world;
        3. [n]cc,cc命令,指将光标所在行,全部去掉,输入新数据;加上n后,表示要替换的行数,从光标所在位置,往下替换掉n行;
        4. [n]s,表示替换字符,s表示替换光标所在位置的字符,n表示从光标开始往后的n个字符要被替换;
        5. S,替换当前光标所在的行;类似cc;
        6. r,替换单个字符,类似与1s。唯一不同的是,r执行完后,自动返回命令模式;
        7. R,替换多个字符,可以从光标位置开始,替换多个字符,数量不限,直至按下esc;
        8. [n]~,转换光标当前所在位置字母的大小写,一直按~或者指定需要替换字母大小写的个数,可实现多个字母大小写转换。
      4. 撤销先前的修改
        1. u,用于撤销先前执行的编辑命令;
        2. U,用于撤销或回复最精一次的操作。
      5. 删除文件(一直处于命令模式,而非输入模式(插入,取代))
        1. [n]x,删除字符。n为要删除字符的个数,从光标所在位置的字符往后开始(相当于往后删除),包括当前光标所在位置
        2. [n]X,删除字符。n为要删除字符的个数,从光标所在位置的字符往前开始(相当远往前删除),不包括当前光标所在位置
        3. dw,删除单个字或部分字。删除整个字的话,包括其占用的空间位置,如字与字之间的分隔符;
        4. [n]dd,删除文本行。dd为删除当前光标所在行,n为删除多行;
        5. D,表示删除本行的行尾部分。
      6. 复制、删除和粘贴文本
        1. 复制-粘贴:先yy复制文本行,再用p(或P)实际复制,
        2. 剪切-粘贴:先dd删除文本行,再用p(或P)实现文本行的移动。
        3. 具体命令:
          1. [n]yy,记住,该命令是复制文本行的,不是选中的部分,过程:
            1. 把光标移至准备复制的文本行的任何位置;
            2. 输入yy命令;
            3. 再把光标移至目标行的任何位置;
            4. p,复制到所在行的下面P,复制所在行的上面
            5. 如果在yy前面输入n,可以复制多个文本行。
          2. [n]Y,同yy;
          3. [n]dd,删除文本行。然后操作过程同yy类似;
          4. 上面的指令必须结合p,P使用
      7. 按指定的数量重复执行指令
        1. 许多vim命令前面都可以加一个计数值,表明相应的命令重复执行的次数;
        2. 使用.,可以重复执行先前的文本编辑命令;
    6. 使用ex命令

      1. 显示行号,:set nu,挺实用的!!!
      2. 取消行号,:set nonu
      3. 多行复制,:line#1,line#2 co line#3,其中,co相当于copy
        1. 例如,:1,5 co 12把第1行到第5行复制到第12行;
        2. 其中,.表示当前光标所在的行,$表示最后一行;
      4. 移动文本,:line#1, line#2 m line#3,其中,m相当于move
      5. 删除文本,:line#1, line#2 d
    7. 检索与替换

      1. 概述:使用户能够以检索指定字符串的方式,直接跳转至期望的文件位置。还提供全局检索和替换功能;
      2. 检索命令:
        1. :/str,检索给定的字符;
        2. :?str,从当前位置开始,反向检索给定的字符串;
        3. n,从当前位置开始,继续检索下一个匹配的字符串;
        4. N,从当前位置开始,反向检索;
        5. :/str/+n,将光标移至匹配的字符串str所在行之后的第n行;
        6. :?str?-n,将光标移至匹配的字符串str所在行之前的第n行;
      3. 模式检索
        1. 仅检索出现在行首位置的字符串,:/^search
        2. 仅检索出现在行尾位置,:/search$
        3. 仅检索出现在字首位置的字符串,
        4. *
      4. 替换字符串
    8. 编辑多个文件

      1. 编辑多个文件
        1. vim file1 file2,先进入file1文件,编辑好后,:w保存;输入:n:n file2,进入file2文件,编辑好后,输入:w保存。
        2. 可以使用:e filename,:n filename直接转到指定的文件,也可以使用:n命令转到下一个文件。:n#交替编辑最近处理过的两个文件。
        3. :e! filename,强行转到指定的文件。
      2. 合并文件与合并文本行
        1. line# r filename,将filename中的内容读到指定行line中;
        2. 如果未指定line,则默认是当前光标所在的行
    9. 定制vim编辑器的运行环境

      1. vim编辑器采用一系列默认的选项定义作为自己的运行环境。为了提高编辑效率,需要改变部分选项的默认值。
      2. :set all,可以查看到所有的可设置选项,:set option,设置该选项,:set nooption取消该选项设置。
      3. 具体options如下:

      all,在编辑器窗口中列出编辑器支持的所有选项;
      magic,设置magic,可启动字符的特殊意义,如”.”表示匹配任意一个字符;”[…]”表示匹配指定字符集和或字符范围中的任何一个字符。设置nomagic就会使特殊字符意义失效。
      autoindent,这个选项与shiftwidth选项一起使用,使新输入的文本行与上一行起始位置自动对齐。
      autowrite,自动保存,当打开多个文件的时候,当前编辑完成后,要切换到另一个文件,就会将当前文件自动保存;
      ignorecase,字符串匹配时,可设置忽略大小写;
      laststatus,是否在编辑窗口中显示状态行;
      number,显示文本行的行号;
      readonly,对正在编辑的文件进行写保护;
      report,默认值为2,表示复制或删除了多少行,在状态栏中报告;
      scroll,设置前滚(ctrl+U)多少行,后滚(ctrl+D)多少行,如:set scroll=10;
      shell,确定vim调用哪一个shell,如:set shell=path,path为shell的绝对路径;
      shiftwidth,这个选项用于设定制表符的跳转位置,按下ctrl+t或ctrl+d,自动跳转到下一个或上一个制表符位置,默认为8;
      showmatch,输入右圆括号、花括号或方括号时,提示与左边的括号相匹配;
      tabstop,设置制表键tab的右移距离。默认为8;
      wrap,控制vim显示较长的文本行。把较长的文本行延续到下一行,可利用该选项实现自动折行;
      wrapmargin,指定编辑器窗口的右边距;

    10. 永久性定制vim运行环境
      1. 上面的方法都只能临时地设置vim编辑器的当前运行环境,一旦退出,这种临时设置也随之作废;
      2. 永久性设置
        1. 需要设置VIMINTI变量。在.bash_profile中添加export VIMINTI = ‘set para1 para2 …’;
        2. 也可以把常用的vim选项以及定义加到系统范围的初始化文件/etc/vim/vimrc文件,或用户主目录下的.vimrc(或.exrc) 文件中,可以自己在用户主目录下建立.vimrc文件,在里面写入ab abc 中国农业银行,等
  • 其他特殊说明

    1. 删除或替换特殊字符
    2. 在编辑期间运行linux命令
      1. :sh,在vim编辑器中,要转到执行shell的命令话,可使用该命令。此时,使用ctrl+d或exit命令,可退回到vim编辑,继续刚才文件的编辑;
      2. :!command,在编辑期间,如果想临时地运行某一个shell命令,可使用该命令,执行完毕后,按enter,即可回复原来的编辑处理状态;
      3. !!command,在编辑期间,如果想把某个shell命令的运行结果直接加到当前编辑的文件中
  • 六、Shell

    1. 基础知识
    2. 高级编程

    七、软件管理

    1. 软件维护工具

      1. 命令行的软件维护工具,包括apt-getaptitude以及dpkg等;
      2. 图形界面的软件维护工具,包括gnome-app-installsnaptic
    2. 软件管理

      1. 软件包:在ubuntu Linux系统中,所有的软件和文档都是以软件包档案文件的形式提供的。软件包可分为二进制软件包(用于封装可执行程序、相关文档以及配置文件等)和源代码软件包(包含源代码以及生成二进制软件包的制作方法);
      2. 常见的软件包的格式:
        1. Debian格式软件包(.deb):ubuntu软件仓储中提供的软件包均采用这种封装格式apt-get、aptitude和synaptic都支持此类软件包
        2. Red Hat格式软件包(.rpm):RPM(Red hat Package Manager)是另外一种流行的Linux系统软件包,是Red hat以及派生(如fedora)支持的;
        3. Tarball:一种由大量文件(包括目录结构)组装成单个档案文件的大型文件集合。其中tar命令用于组合多个文件,生成一个文档,以便于发行;gzip用于压缩文件的容量,以便节省文件的存储空间。Tarball非常类似于windows的”.zip”文件。Tarball文件具有.tar.gz.tar.bz2TGZ形式的文件扩展名。在命令行终端窗口,可以使用tar -xzf filename来解压相应的文件,然后在执行其中包含的软件安装命令
      3. 软件仓库:指的是一个网站或存储目录,其中提供按一定组织形式存储的软件包与索引文件。
    3. 利用apt-get管理软件包

      1. APT(advanced package tool):一个通用的综合软件管理与维护工具,apt-get、aptitude和synaptic等软件工具包都是基于APT及其配置文件发展而来,是APT的前端软件管理工具
      2. 早期,APT配置命令都存储在单独的配置文件中/etc/apt/apt.conf中。在ubuntu linux中,把这个文件分解成多个小型文件,存储在/etc/apt/apt.conf.d目录中。/var/lib/apt/lists目录存有APT本地软件包索引文件。/var/cache/apt/archives目录是APT的本地缓冲目录,其中缓存了最近下载的deb软件包文件。
      3. APT将采用/etc/apt/sources.list/etc/apt/apt.conf.d目录中所有文件作为配置文件。
      4. apt-get是一个命令行软件管理工具,能够利用软件仓库安装选定的软件包,或者删除、更新系统中已经安装的软件包,升级linux系统。具体的使用命令为:apt-get [-hvs] [-o=config string] [-c file] {[update] | [upgrade] | [dselect-upgrade] | [install pkgs] | [remove pkgs] | [purge pkgs] | [check] | [clean] | [autoclean] | [autoremove]},其中,apt-get命令支持的部分功能选项,自查。
      5. 常见使用
        1. sudo apt-get install packagename,安装指定的软件包;
        2. sudo apt-get update,用于同步软件源的软件包索引,获取最新的可用软件包版本信息;sudo apt-get upgrade,用于升级整个Ubuntu Linux系统(升级的过程,就是软件包的删除和重装过程);
        3. sudo apt-get remove/purge packagename,用于删除软件包,其中remove属于部分删除,保留软件包中配置文件,而purge属于彻底删除;
      6. sources.list配置文件
        1. apt-get、aptitude以及synaptic是基于APT的,而ATP是使用/etc/apt/sources.list配置文件来定义软件的发行源的;
        2. sources.list是主配置文件,可以在/etc/apt/sources.list.d目录中定义其他辅助配置文件,作为sources.list的补充;
    4. 利用aptitude管理软件包

      1. aptitude是一个可以替代apt-get的软件管理工具,语法格式:

      aptitude [options] {updtae | autoclean | clean | safe-upgrade}
      aptitude [options] {install | reinstall | full-upgrade | download | purge | remove | show} pkgs
      aptitude [options] search patterns
      aptitude help

    5. 常见使用
      1. sudo aptitude install package,安装软件包;
      2. sudo aptitude safe-update同步软件源的软件包索引文件,sudo aptitude safe-upgrade升级整个系统;
      3. aptitude show vsftpd用于查询各种软件包信息;
      4. aptitude search pkg-pattern,用于检索软件包,可以检索系统中已经安装的软件包;
      5. aptitude search ~T,查询所有的软件包;
      6. aptitude search ~U,列出软件仓库中可供更新的软件包;
      7. aptitude search ~i,列出系统中已经安装的软件包,如aptitude search ‘-i apache’表示要检索系统中已经安装的apache服务器软件包;
  • synaptic图形界面软件管理工具

    1. synaptic软件包管理器是一种基于APT开发的高级图形界面软件管理工具,其中实现了apt-get命令行工具的所有功能;
    2. 在命令行输入synaptic命令,启动;
    3. *
  • GNOME软件增删工具

    1. 是一种GNOME桌面菜单的软件管理工具,可以根据软件的功能或菜单分类,补充安装或删除选定的软件包,也可用于浏览、检索及查询软件包的说明信息;
    2. 在命令行,输入gnome-app-install启动;
    3. *
  • 八、用户管理

    1. 相关概念

      1. linux系统中的用户可以分为3类:超级用户(root)、管理用户普通用户。但也可以把超级用户管理用户通称为系统用户
        1. 超级用户是一个特殊的用户,用户标识号为0,可以访问任何程序和文件,任何系统都会自动提供一个超级用户帐号;
        2. 管理用户用于运行一定的系统服务程序,支持和维护相应的系统功能,用户标识号在1-999范围之内
        3. 除了超级用户和管理用户,其他均为普通用户。访问linux系统的每个用户,都需要有一个用户帐号。只有利用用户名和密码注册到系统之后,才能够访问系统提供的资源和服务;
      2. Ubuntu linux系统强烈建议,应尽量避免使用超级用户注册到系统中,如果确实需要执行系统管理与维护任务,可以在具体的命令前冠以sudo命令;
    2. /etc/passwd文件

      1. 安装linux系统之后,系统已经事先创建了若干系统用户帐号,其中包括超级用户root和管理用户daemon、bin和sys等,用于执行不同类型的系统管理和日常维护任务;
      2. 用户的帐号信息是有/etc/passwd和/etc/shadow文件共同维护的;
      3. passwd文件中包含了linux系统中每个用户除密码之外的重要信息,每个用户信息占用一行,每一行由7个字段组成,中间以冒号分开:username:password:uid:gid:comment:home_dir:login_shell(用户名:密码:用户id:用户组id:主目录:命令解释程序),在passwd中部分内容如下:

      root:x:0:0:root:/root:/bin/bash
      daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
      ….
      sucab:x:1000:1000:sucab,,,:/home/sucab:/bin/bash
      其中,每一个字段的具体说明如下:username:注册用户名,用户名在linux系统中必须是唯一的,且至少第一个字符选用字母;password为用户密码,但实际的密码已移至/etc/shadow文件中,如果用户设有密码,会显示为x,若显示*,则用户无法正常地注册到系统;uid用户id,是系统识别用户的主要手段,由系统或系统管理员分配,id为32为无符号整数,即为0-65536,其中0为超级用户,1-999为管理用户,1000-65536为普通的自定义用户;gid用户组id,系统中的每个用户均属于某个用户组,每个用户组除有组名之外,也有一个相应的用户组id,在0-999保留作系统用户组使用;comment为注释信息,包含用户全名,电话号码和电子邮件等用户信息;home_dir指定用户的主目录,环境变量${HOME},形如/home/username;login_shell指定用户注册后调用的shell,即命令解释程序,如果该字段为空,则默认的命令解释程序为/bin/bash,用户可以根据自己的爱好,选用其他命令解释程序,如korn shell,zsh,tcsh等。

  • /etc/shadow文件

    1. 是一个限制访问的系统文件,其中存有加密形式的密码和其他相关信息,格式如下:username:password:lastchanged:mindays:maxdays:warn:inactive:expire:reserve,在shadow中的部分内容如下:

    root:!:16198:0:99999:7:::
    daemon:*:16177:0:99999:7:::
    ….
    sucab:$6$En29/eVv$n1IaVG0PJ0x3QQtEoTDQU...FVYD.1:16198:0:99999:7:::
    其中,password是加密形式的密码,通常用crypt(3)函数生成;lastchanged是从1970年1月1日开始算起,直至最后一次修改密码之日的天数;mindays保持密码稳定不变的最小天数,必须大于等于0,仅当超过此限才能修改密码;maxdays保持密码有效的最大天数,超过此限,系统将会强制提示用户更换新密码;warn指定在密码有效期到期之前需提前多少天向用户发出警告信息;

  • 增加、修改和删除用户

    1. 添加用户
      1. useradd [-u uid] [-g group] [-d home_dir] [-s shell] [-c comment] [-m [-k skel_dir]] [-N] [-f inactive] [-e expire] login
      2. 其中,login表示新用户的注册用户名;
      3. -u uid,(–uid uid),用于指定新增用户的用户id,是当前已经分配的最大id号加1;
      4. -g group,(–gid group),用于指定一个现有用户组的id或用户组名;
      5. -N,(–no-user-group),?
      6. -d home_dir,(–home home_dir),用于指定新增用户的主目录;
      7. -s shell,(–shell shell),用与指定命令解释程序shell的完整路径名。默认为/bin/bash
      8. -c comment,(–comment comment),用于指定用户全名、电话号码以及电子邮件地址等注释信息;
      9. -m,(–create-home),在增加新用户时,如果用户的主目录不存在,则创建用户主目录。同时,把/etc/skel目录或-k选项指定目录中的初始化文件复制到用户主目录中;
      10. -k skel_dir,(–skel skel_dir),用于指定存储用户初始化文件(.profile)的目录,以便useradd命令能够把其中的文件复制到用户主目录;
      11. -f inactive,(–inactive inactive),用于指定相应用户一直未访问系统,但仍保证其注册帐号信息有效的最多天数,超过此限将锁住用户帐号;
      12. -e expire,(–expiredate expire),指定注册用户的有效期,即截止日期;

    sudo useradd -u 1001 -d /home/sucab -m -s /bin/bash sucab
    系统将会在/etc/passwd、/etc/shadow、/etc/group文件中各添加一行与用户sucab相关的信息。一旦创建了用户帐号,就可以使用passwd命令设置密码,使用usermod等命令修改passwd和shadow文件,更改用户的其他相关属性

  • 修改用户
    1. 除非用户名或用户id与其他用户冲突,一般情况下不要轻易修改用户帐号中的用户名和用户id,因为这将涉及到用户已经创建的所有文件和目录。但commnet,shell,password,home_dir等可以修改;
    2. 修改用户信息时,可以利用编辑器,直接修改passwd和shadow,也可以使用usermode命令,自查。
  • 删除用户
    1. 使用userdel命令,只需要一个命令即可删除passwd,shadow和group文件中的相应用户和用户组信息,同时还会把用户主目录中的所有文件和目录一同删除;
    2. userdel [-r] login,-r表示删除用户主目录,包括其中的文件和子目录。
  • 封锁用户帐号
    1. 在/etc/shadow文件的密码字段增加一个感叹号”!”前缀;
    2. 在/etc/passwd文件的密码字段增加一个星号”*”;
    3. 修改shadow的expire字段为一个过时的日期。
  • 定期更改密码
    1. 普通用户可以使用不带任何选项和参数的passwd命令修改自己的密码,使用实例如下:
      $ passwd
      更改 username 的密码。
      (当前)unix密码:输入原密码
      输入新的unix密码:输入新密码
      重新输入新的unix密码:再输一次
      修改成功
    2. passwd [-adehlSu] [-i inactive] [-m min] [-m warn] [-x max] [login]。超级用户则可以利用此命令的大量选项及参数维护系统中的用户帐号信息,passwd命令的部分选项自查,可以通过$ passwd --help,查看参数选项的作用,部分如下:
      -a,只能与-S选项一起使用,以查询所有用户帐号的状态信息,必须具有超级用户权限,即sudo passwd -aS
      -d,删除指定账户的密码;
      -e,强制指定账户密码过期;
      -h,显示此帮助信息并退出;
      -l,锁住指定的账户;
      -S,(–status),报告指定账户密码的状态;
      -u,(–unlock),解锁被指定账户。
      使用示例:
      $ sudo passwd -S sucab
      sucab P 05/08/2014 0 99999 7 -1,其中,P表示用户sucab已经设置了密码;若为NP表示未设置密码,L表示账户已经锁住。
  • 检验用户的有效用户ID
    1. 要检查用户的有效用户ID,可以使用id命令。例如,当sucab注册到系统之后,id命令的输出结果如下:
      $ id
      uid=1000(sucab) gid=1000(sucab) 组=1000(sucab),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
    2. su命令
      1. su命令能够改变用户的有效用户ID,而不必另行注册;
      2. 使用示例(假设当前注册用户是sucab,另一个账户是zyt):
        sucab@X-PC:~$ su zyt (切换到zyt身份)
        密码:输入zyt的密码
        zyt@X-PC:/home/sucab$,说明,即使改变用户身份,仍会保持之前的工作目录不变;
        如果,在su命令之后加上”-“、”-l”或”–login”,则可以直接进入其他用户的主目录,相当于zyt的直接登录。命令如下:
        sucab@X-PC:~$ su --login zyt
        密码:输入zyt的密码
        zyt@X-PC:~$
  • 定制用户的工作环境

    1. 相关概念:当用户注册到系统之后,用户的工作环境是由选定的命令解释程序和相应的用户初始化文件确定的。因此,用户管理的另一个任务是选择作为用户界面的命令解释程序和用户初始化文件。
    2. 选择命令解释程序
      1. linux系统配备的标准命令解释程序是bash,但同时也支持korn shell(ksh),基于C shell的TC shell(tcsh)以及Z shell(zsh)等,可以自由选用。
      2. /etc/shells中列出了ubuntu linux系统支持的所有命令解释程序,下面介绍4个常见的:
        1. Bourne Again Shell

          bash是基于POSIX 1003.2标准开发的一个免费版的shell,与Bourne shell和korn shell一脉相承,在功能上有较大的提高。bash,支持emacs与vi两种命令行编辑功能,支持历史命令、命令别名和作业控制等机制。因此,Bash是linux系统首选的shell。

        2. Korn shell
          (/bin/ksh)是Unix系统中继Bourne shell与C shell之后推出的第3个著名的shell。Korn shell以Borne shell为基础,同时充分吸纳了C shell的优点,极大增强和丰富了Bourne Shell的基础功能。
        3. TC shell
          C shell原为BSD版unix系统的命令解释程序,由加州大学伯克利分校计算机系的Bill Joy开发。TC shell(/bin/tcsh)是在C shell的基础上开发的,继承并发展了C shell的全部功能特性。但与bash 和korn shell等Bourne系列的shell不兼容。
        4. Z shell
          同上述的shell一样,zsh既是一个交互式的命令解释程序,也是一个强有力的编程语言。zsh吸收并集成了bash、ksh以及tcsh等shell的许多功能特性,能够提高用户与linux系统交互的效率,非常适合用作交互式shell。zsh是上述shell的超集。
        5. 任何时候,每个用户只能使用一个命令解释程序,但可以随时从一个shell切换到另一个shell环境。可以使用ps -f指令,找出ps的父进程,即可确定当前使用的哪一个shell。
    3. 设置用户初始化文件
      1. 初始化文件(也称为启动文件)是一种shell脚本,其中包含每次注册后用户希望执行的命令,在注册到系统之后,能够设置用户的工作环境。主要任务是设定用户的工作环境,如设置命令检索路径、环境变量和终端特性等。
      2. 每个shell均有自己的系统及用户初始化文件,具体的如下说明:
        1. Bash
          1. /etc/profile,用于设置系统范围的工作环境,如设置PATH环境,设置命令提示符等;
          2. $HOME/.profile,用于设置用户自己的工作环境,如设置PATH变量,定义命令别名等;
          3. $HOME/.bash_profile,作用同上,但Ubuntu Linux系统并不使用这个用户初始化文件;
          4. $HOME/.bash_login,作用同上,但Ubuntu Linux系统并不使用这个用户初始化文件;
          5. /etc/bash.bashrc,用于设置交互式非注册Shell系统范围的工作环境;
          6. $HOME/.bashrc,用于设置交互式非注册Shell的用户工作环境;
          7. BASH_ENV,如果变量已经设置,使用变量的值作为初始化文件,执行文件中的命令等,设置非交互式Shell的用户工作环境;
          8. $HOME/.bash_logout,用于定义退出Bash时需要执行的善后处理任务,如清除临时文件等。
        2. Korn Shell
        3. TC Shell
        4. Z Shell
      3. 每个Linux系统通常都提供若干标准的用户初始化文件,其中的默认设置基本上能够满足用户的常规要求。如有特殊需求,只需在此基础上进行适当的修改,增加特定的变量设置或命令。Ubuntu Linux系统提供的用户初始化模版文件,/etc/skel/.bash_logout/etc/skel/.bashrc/etc/skel/.profile。在Bash的运行环境中,用户需要设置和使用的通常只有~/.profile~/.bashrc两个初始化文件。同时,尽量在~/.profile中添加自己的设置,仅在注册时执行一次,但是~/.bashrc有可能会执行多次。
    4. 定制Shell工作环境

      1. Shell环境
        1. 环境变量:可用于Shell调度执行的所有进程的变量称为本地变量。使用env或set命令可以查阅这些变量的设置情况;
        2. Shell本地变量:仅对当前Shell有效的变量成为本地变量。如果期望变量的设置能够用于随后调度执行的任何命令或程序,必须使用export命令公布用户设置的变量。
      2. 设置环境变量
        1. 在安装一些软件应用的时候,需要在系统设置很多的环境变量,而这些软件本身会提供给用户一些设置环境变量的脚本,只要执行这些脚本程序,就可以完成该软件环境变量的的设置,而不需要用户自己一个个的配置;
        2. 设置的方法:
          1. . scriptsource script,利用该指令读取并执行Shell脚本,在当前的Shell中设置运行环境(也就是由当前的Shell解释执行)。其中,script是一个脚本文件,文件中包含必要的环境变量设置语句;
          2. 把环境变量的设置语句加到.profile等用户初始化文件中。

            注意:
            上述方法的设置,即使退出脚本,环境变量的设置仍将保持有效。如果使用sh mysql_env.sh,则退出shell后,当前的shell环境不会留存脚本中设置的任何变量。

      3. 设置命令检索路径
        1. 设置环境变量的一个重要内容是设置PATH变量,该PATH变量用于设置命令的检索路径,定义命令所在的目录。PATH变量包含一些列目录,目录名之间由冒号”:”分隔,常用命令所在的目录应该放在靠前的位置。
      4. 设定语言环境

        1. LANG和LC系列环境变量用于设置特定的语言环境locale,通常,只需设置LANG环境变量,即可确定一个语言环境;
        2. Ubuntu Linux系统采用POSIX格式xx_YY.CHARSET定义语言环境。其中,xxISO-639标准定义的语言代码,YYISO-3166标准定义的国家或地区代码,charset/usr/share/i18n/locales目录中列举的字符集之一;
        3. Ubuntu Linux系统支持Unicode(UTF-8)字符集,如简体中文语言环境,LANG变量为zh_CN.UTF-8或zh_CN.utf8;
        4. 查询当前Linux系统支持的语言环境,locale -a命令,当前设定的语言环境,locale
      5. 默认的文件访问权限

        1. 当用户创建一个目录或文件时,系统将会赋予新建目录或文件一个默认的访问权限,这个访问权限是由用户掩码(User mask)控制的,而用户掩码是由umask命令设置的。umask通常位于系统提供的/etc/profile初始化文件中。
        2. 输入umask,可以查阅当前的用户掩码设置

          1. 用户掩码包含4组八进制的数字:
            1. 第1组数字用于设置suid、sgid和粘性位等特权标志(umask命令中通常不考虑);
            2. 第2组数字用于设置用户自己的访问权限;
            3. 第3组数字用于设置同组用户的访问权限;
            4. 第4组数字用于设置其他用户的访问权限。
      6. 定制命令提示符
        1. 当进入终端,左边将出现shell命令提示符,通常命令提示符为[\u@\h \W]\$ (PS1='[\u@\h \W]\$')。其中\u表示注册的用户名,\h表示系统的名字,\W表示当前工作目录最后一个子目录的名字,\$表示根据用户的身份显示$(普通用户)或#(超级用户);
        2. Ubuntu Linux系统中,修改/etc/hostname文件,可以改变主机名字,同时需改etc/hosts文件,修改新的主机名和ip地址的映射。
  • 增加与删除用户组

    1. Linux系统中的每个用户都从属于某个用户组,同组的用户具有相同的用户组访问权限。此外,每个用户还可以临时改换其有效用户组,与其他用户组相关联。
    2. 系统提供的默认用户组

    3. 在linux系统中,与用户组有关的所有信息通常被存储在/etc/group系统文件中,文件中每一行定义一个用户组,格式如下:group_name:password:gid_user_list

      1. group_name,用户组名字。用户组可由2-8个字符组成,例如,可以定义一个用户组math,使数学系的用户均归属于math用户组;
      2. password,通常为x。这个字段当前并无实际的意义;
      3. gid,用户组ID。系统中的用户组ID必须是唯一的;
      4. user_list,用户组成员列表。其中可以包含属于当前用户组的所有用户名,之间逗号分隔。
    4. 添加用户组
      1. 手工编辑/etc/group
      2. groupadd [-g gid [-o]] group-g gid表示新增用户组ID。忽略此项,默认id为已分配最大id号加1.如果添加一个hadoop用户组,为sudo groupadd -g 22222 hadoop。修改和删除用户组的命令为groupmodgroupdel
  • 九、TCP/IP

    1. 网络管理
    2. 网络应用
      1. OpenSSH
        1. 相关概念:
          1. 在Linux中,OpenSSH是目前最流行的远程系统注册与文件传输应用,也是传统的Telent、FTP与R系列等网络应用的换代产品。其中,ssh(secure shell)可以替代telent、rlogin和rsh、scp(secure copy)与sftp(secure FTP)能够替代ftp;
          2. OpenSSH采用密钥的方式对数据进行加密,确保数据传输的安全。在正式开始传输数据之前,双方首先要交换密钥,当收到对方的数据时,再利用密钥和相应的程序对数据进行解密。
          3. OpenSSH采用随机的方式生成公私密钥,密钥通常只需生成一次,必要时也可以重新制作。当使用ssh命令注册到远程系统时,OpenSSH服务器的sshd守护进程将会发送一个公钥,OpenSSH客户端软件ssh将会提请用户确认是否接受发送的公钥。同时,OpenSSH客户机也会向服务器回送一个密钥,使OpenSSH连接双方的每个系统都拥有对方的密钥,因而能够解密对方经由加密链路发送的加密数据。
          4. OpenSSH服务器的公钥与私钥均存储在/etc/ssh目录中

    十、Apache服务器

    十一、MySQL数据库

    1. 安装mysql

      1. mysql-server:管理与维护数据库;
      2. mysql-client:连接与访问Mysql服务器。
      3. $sudo apt-get install mysql-server
    2. my.cnf配置文件

      1. mysql利用该文件定制自己的运行环境,其中port和socket用于客户端,大部分配置仅适用于服务器端;
      2. MySQL数据库配置变量
        1. basedir--basedir=path,MySQL数据库的安装目录,凡以相对路径出现的文件均以这个目录为根目录。默认的安装目录为/usr
        2. bind-address--bind-address=IP,绑定的IP地址,表示MySQL服务器仅监听并接收针对指定指定IP地址的客户访问。这个配置变量的默认值为127.0.0.1,这意味着MySQL服务器仅监听本地主机;
        3. datadir-h path--datadir=path,设定存储MySQL数据库及其数据库表的目录位置,默认的目录位置为/var/lib/mysql
        4. flush--flush,如果把这个配置变量设定为ON,表示在执行完每个SQL语句之后,MySQL服务器需要立即清除内存缓冲区,把所有的数据变动都写到磁盘中,实现内存与磁盘的数据同步。通常,MySQL服务器执行的每个SQL语句仅影响系统缓冲区,由操作系统实现内存与磁盘的数据同步;
        5. language-L language--language=langname,当出现错误时,MySQL数据库服务器将会以设定的语言向客户端返回错误信息。其中,langname可以是一个语言的名字,也可以是语言文件的绝对路径名,其默认值为/usr/share/mysql/english
        6. log-l [filename]--log[=filename],用于设定和启用常规的查询日志文件,记录客户端的连接请求及提交的SQL语句。默认的查询日志文件为/var/log/mysql.log
        7. log-bin--login-bin[=basename],用于设定和启用二进制日志文件。MySQL数据库使用这个日志文件记录所有涉及数据变动的SQL语句。二进制日志文件可用于数据库的备份与恢复。利用这个配置变量设定的文件名是日志文件的基本名字,MySQL服务器将在创建的文件名后面增加一个顺序后缀。如果未指定文件名,MySQL服务器将会以host-name-bin作为基本名字;
        8. log-error--log-error[=file],设定MySQL数据库服务器的错误日志文件,用于记录mysqld守护进程的启停时间以及运行期间产生的严重错误信息;
        9. log-warnings-W [level]--log-warnings[=level],设定是否在错误日志文件中记录警告信息,如网络故障、连接终止以及重新连接等。默认值为1,表示记录警告信息;0表示禁用;大于1的值表示记录更多的信息,如拒绝访问信息等;
        10. pid-file--pid-file file,指定存储MySQL服务器守护进程mysqld的PID的文件名;
        11. port--port portnum,设定MySQL服务器或客户端监听的TCP/IP端口号,其默认值为3306;
        12. socket--socket=path,客户端用于连接MySQL数据库或服务器用于监听本地连接的套接字文件的路径名;
        13. tmpdir-t path--tmpdir=path,MySQL数据库守护进程mysqld用于存储临时文件的目录位置,其默认值为/tmp
        14. user-u {username | userid},以指定用户身份运行mysqld守护进程,默认值为mysql。
      3. my.cnf,配置文件主要用于设定mysql数据库文件的存储位置、数据库的各种日志文件、守护进程的PID文件及其他配置参数。在/etc/mysql/my.cnf是全局配置,~/.my.cnf是用户特定设置。
      4. 每次修改my.cnf文件时,都需要重新启动mysqld守护进程,才能确保修改后的配置立即生效,具体指令为sudo /etc/init.d/mysql restart
    3. MySQL数据库命令行界面
      1. 进入命令行指令
        1. mysql [options] [dbname]
        2. mysql --user=username --password=password [dbname]
        3. 常用mysql命令的部分选项:选项;GNU选项;简单说明
          1. -?--help;显示帮助信息及可用的命令
          2. -h hostname--host=hostname;连接指定主机中的mysql服务器;
          3. -p[password]--password[=password];指定连接mysql服务器时需要提供的密码。如果在-p后面直接输密码,之间不能有空格。如果不提供密码, 会提示输入密码,可以避免明文显示密码;
          4. -P portnum--port=portnum;指定连接mysql服务器时使用的tcp/ip端口号;
          5. -u username--user=username;指定以哪一个用户身份连接mysql服务器;
      2. sql脚本与批处理
        1. 除了交互方式输入命令或sql语句之外。若要以批量方式访问与查询mysql数据库,可以把交互过程使用的命令或sql语句写入一个文件;
        2. mysql -u username -p[=password] dbname < scriptfile
        3. 如果当前已经处于mysql交互环境,可以直接使用source scriptfile
        4. 如果查询产生的记录较多,可以采用管道机制逐页新式查询结果或写到文本文件中查看:
          1. mysql -u username -p[password] < batch-file | more
          2. mysql -u username -p[password] < batch-file > mysql.out
    4. 设置用户及其访问权限
      1. mysql服务器安装之后,只有一个用户能够访问数据库管理系统,就是数据库管理员root,其地位类似于linux系统中的超级用户;
      2. 由于数据库管理员root具有无限的权利,一般仅限于数据库的管理与维护,不建议以root用户的身份访问数据库,故需要添加必要的mysql用户,设定密码,赋予用户适当的数据库访问权限,如创建应用数据库等;
      3. mysql维护的所有用户名及其密码数据都存储在一个专用的数据库mysql中。数据库管理员可以利用create、grant以及insert等语句,把用户添加到这个数据库中。此外,利用grant语句还可以同时赋予用户访问数据库或数据库表的权限,具体用法如下:

        grant all privileges on database To username@"servername" identified by 'password';
        其中,database是数据库名,username表示新增的用户,servername是msyql服务器的主机名或IP地址,password是用户的密码;
        示例:
        要添加一个mysql数据库用户test,假定密码为123123,赋予其访问本地数据库forum的所有访问权限:
        mysql -h 127.0.0.1 -u root -p
        use mysql
        grant all privileges on forum.* to test@"localhost" identified by '123123'
        flush privileges//把设置信息写入mysql数据库中,使新加的用户帐号立即生效;

    5. 访问mysql数据库
      1. 创建表 (user表)
      2. 录入数据
        1. insert: insert into user (username) values ("");
        2. load data:(有的版本不支持)
          1. 创建user.txt,每一个记录与user表字段对齐,中间用制表符隔开,使用\N表示NULL;
          2. load data local infile '~/user.txt' into table user;
    6. MySQL数据库备份与恢复

      1. 备份方法
        1. 文件备份:
        2. 数据备份:备份数据,而忽略数据库表结构。select * into outfile 'filename' from tablename。恢复时,使用load data infile语句或mysqlimport命令;
        3. 利用备份工具实现完整备份: mysqldumpmysqlhotcopy脚本,第二个只是单纯地复制素有的数据表文件,如.frm、.MYD等;
    7. 密码维护与网络安全

      1. 更换root的密码
        1. mysql方式
          1. mysql -u root -h 127.0.0.1 -p;
          2. update user set password=password('newpassword') where user='root';
          3. flush privileges;
          4. quit;
        2. mysqladmin
          1. mysqladmin -u root -p password newpassword
      2. msyql服务器进程会监听服务器所有网络接口的3306端口,接收任何远程mysql客户端的数据库访问请求:
        1. netstat -an | grep 3306

    Edited by sucab


    你可能感兴趣的:(Linux)