Linux基础


一、Linux与Windows的不同


1、Linux严格区分大小写

2、Linux中所有内容以文件形式保存,包括硬件

3、Linux不靠扩展名区分文件类型(靠权限区分文件类型)

二、常用扩展名(约定俗成)便于区分:(靠权限执行)


1、压缩包:“*.gz”,“*.bz2”,“*.tar.bz2”,“*.tgz”等

2、二进制软件包:“*.rpm” 

3、网页文件:“*.html”,“*.php”

4、脚本文件:“*.sh” 

5、配置文件:“*.conf”

三、 [root@localhost ~]# 的含义 

       root :用户名,此处为管理员


       localhost :计算机主机名


       ~:但前所在目录(~表示家目录)。管理员的家目录为 /root  ; 普通用户的家目录为/home/user1/


      #:超级用户的提示符;  普通用户的提示符是$

四、常用命令的作用


    /根目录 


   /bin 命令保存目录(普通用户就可以读取的命令)


   /boot  启动目录,启动相关文件


   /dev  设备文件保存目录


   /etc 配置文件保存目录


   /home 普通用户的家目录


   /lib  系统库保存目录


   /mnt 系统挂载目录


   /media 挂载目录


   /root 超级用户的家目录


  /tmp 临时目录

  

  /sbin 命令保存目录(超级用户才能使用的目录)


  /proc 直接写入内存的

  

   /sys 


   /usr 系统该软件资源目录 

       /usr/bin/系统命令(普通用户)

       /usr/sbin/系统命令(超级用户)


  /var 系统相关文档内容

五、重要的快捷键


  • TAG 键: 命令不全 / 档案补齐
  • Ctrl + c 键: 停止/指令串终止
  • Ctrl + d 键:    键盘输入结束

六、相关命令


1. 显示日期

  • date                          #显示日期
  • date +%y/%m/%d    #指定格式

  • date +%H:%M         #指定格式


2. 显示日历

  • cal                           #当前日历
  • cal 7 2015               #指定日历

3. 帮助命令

    进入man指令的功能后,可以按下[空格键]往下翻页,可以按下[q]案件来离开man环境

  • man [命令]                              #获取指定命令的帮助
  • man -k 命令                            #查看和命令相关的所有帮助

    相当于   apropos 命令

  • info [命令]                               #功能与man类似

4. 将数据同步写入磁盘
  • sync
5. 改变文件属性与权限
  • chgrp users install.log               #将install.log的群租改为user
  • chown bin install.log                  #将install.log的拥有者改为bin这个账号
  • chown  root:root install.log        #将install.log的拥有者与群组改回为root
  • chmod 777 linux                        #将linux文件的权限都启用

  •  chmod u=rwx,go=rwx linux      #将linux文件的权限都启用

       改变档案拥有者,chown   
                                                             #chown [-R] 账号名称 档案或目录
                                                             #chown [-R] 账号名称:组名 档案或目录
       选项
       -R:进行递归(rescursive)的持续变更,也就是同次目录下的所有档案都变跟

6. 目录处理

  •     pwd                       #查看当前所在目录
  •     pwd -p #查看真实的路径,而非使用链接(link)路径
  •     mkdir [目录名] #创建目录
  •     mkdir -p [目录名]                          #递归创建目录
  •     mkdir -m 700 [目录名]  #创建目录并且指定目录权限
  •     rmdir  [目录名]           #删除空目录
  •     rmdir -p [目录名]  #连同上层空目录一起删除
  •     rmdir  -r                  #删除文件
  •     rmdir  -rf                                      #强制删除
  •     cd ~                     #进入当前用户的家目录
  •     cd -                       #进入上次目录
  •     cd ..                      #进入上一级目录
  •     cd .                      #进入当前目录

7  查看当前目录下的文件

   ls

  常用选项与参数

-a : 全部的档案,连同隐藏档(开头为.的档案) 一起列出来

-d : 仅列出目录本身,而不是列出目录内的档案数据

-l  :长数据串输出,包含档案的属性与权限等等数据

  • ls                                           #查看当前目录下的文件
  • ls -a                                      #显示所有文件,包括隐藏文件
  • ls -l                                       #显示详细信息
  • ls -al ~                                  #将家目录下的所有档案列出
  • ls -alF --color=never ~          #不显示颜色,但在文件未显示出该文件代表的类型
  • ls -al --full-time ~                  #完整呈现档案的修改时间
  • ls -d                                    #查看目录属性
  • ls -h                       #人性化显示文件大小
  • ls -i                                       #显示inode
  • ls -Z                                     #观察安全性文本

8  复制命令  cp [选项] [原文件或目录] [目标目录]

cp

常用选项与参数

-a :  相当于-pdr的意思,至于pdr请看下面

-d :  若来源文件为链接文件的属性(link file),则复制链接文件属性而非档案本身  

-i :   若目标文件已经存在时,在覆盖时会先询问动作的进行

-p  :连同档案的属性一起复制过去,而非使用默认属性

-r  :递归持续复制,用于目录的复制行为

  • cp -r # 复制目录
  • cp ~/.bashrc /tmp/bashrc #将家目录下的.bashrc复制到/tmp下,并更名为bashrc/.
  • sudo cp -a /tmp . #复制/tmp目录的所有文件至当前目录,包括文件属性
  • cp -p  #连文件带属性复制
  • cp -d  #若原文件时链接文件,则复制链接属性
  • cp -l hello.sh hello_l.sh                      #硬连接复制文件
  • cp -s hello.sh hello_s.sh #软连接复制文件
  • cp -u .bashrc /tmp/bashrc #若.bashrc比/tmp/bashrc新才复制过来

9  移除档案或目录 rm [-fir] 档案或目录

rm 

选项与参数

-f :  就是force的意思,忽略不存在的档案,不会出现警告讯息

-i :  互动模式,在删除前会询问使用者是否动作

-r :   递归删除,这是非常危险的选项

  • rm /tmp/bashrc #删除tmp目录下的bashrc
  • rm -i hello* #使用通配符批量删除
  • rm -r tmp #删除tmp目录(包括tmp下的文件)
  • \rm -r tmp #删除tmp目录,且不询问(包括tmp下的文件)

10 移动档案或目录或更名 mv 

mv

选项与参数

-f:   force强制的意思,如果目标档案已经存在,不会询问而直接覆盖

-i :  若目标档案已经存在时,就会询问时候覆盖

-u :   若目标档案已经存在,且source比较新,才会更新update


  • $mv wtmp mvtest #将wtmp文件移到mvtest目录中

  • mv mvtest mvt #将mvtest目录更名为mvt

11 取得路径的文件名与目录名字

  • basename mvtest/wtmp           #取得最后的档案名
  • dirname mvtest/wtmp #取得最后的目录名

12 直接检视档案内容 cat 

cat 

选项与参数

-b:  列出行号,仅针对非空白行做行号显示,空白行不标行号!

-n :  打印出行号,连同空白行也会有行号,与-b的选项不同;

  • cat -n .bashrc #查看.bashrc这个档案,显示行号
  • tac .bashrc #查看.bashrc这个档案,但从最后一行开始显示

13 修改档案时间或监置新档 touch

  • touch testtouch  #新建一个空的档案
  • touch -d "2 days ago" testtouch #修改testtouch的时间为两天前
  • touch -t 1511112358 testtouch #修改testtouch的时间为2015/11/11 23:58

14  配置档案隐藏属性 chattr [+-=][ASacdistu] 档案或目录

chattr

选项与参数

-+:  增加某一个特殊参数,其他原本存在参数则不动

-- :  移除某一个特殊参数,其他原本存在参数则不动

-= : 设置一定,且仅有后面接的参数


-a : 当设定a之后,这个档案将只能增加数据,而不能删除也不能修改数据,只有root

-i :当设置i之后,这个档案[不能被删除、改名、设定连接、写入]


15 显示档案隐藏属性 lsattr [-adR] 档案或目录

选项与参数

-a:  将隐藏文件的属性也秀出来

-d:  如果接的是目录,仅列出目录本身的属性而非目录内的文件民

-R : 连同子目录的数据也一并列出来


16 重启命令 

  • shutdown -r now #立刻重启
  • shutdown -r 10                     #过10分钟自动重启
  • shutdown -r 20:35               #在时间为20:35时候重启
  • shutdown -h now                 #立刻关机
  • shutdown -h 10                   #10分钟后自动关机


17 命令搜索命令

  • whereis 命令名

      -b :                                                  #只查找可执行文件位置


      -m: #只查找帮助文件位置

  • which 命令名                            # 查看命令所在位置,如果有别名的话同时显示命令别名
  • locate  文件名

                                                             #在后台数据库中按文件名搜索,搜索速度快,搜索的库为  /var/lib/mlocate ,更新的频率为一天一次,可以通过 updatedb命令强制更新。

                                                             #local命令的配置文件中( /etc/updatedb.cnf) 的设置会让local命令不搜索某些目录或某些类型的文件

  •      find命令

       find [搜索范围] [搜索条件]

                                                            #搜索文件

                                                            #find是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配。

      *匹配任意内容

       ? 匹配任意一个字符

       [] 匹配任何一个中括号内的字符


  • find / -mtime 0                             #将过去系统上面24小时内有更改过内容的档案列出
  • find /etc -newer /etc/passwd       #寻找/etc底下的档案,如果档案日期比/etc/passwd新就列出
  • find / -name install.log                 #根据名称在/目录下搜索所有install.log文件
  • find / -iname install.log                #不区分大小写
  • find /root -user root                     #在root下寻找属于root的文件
  • find /root -nuser                          #查找没有所有者的文件
  • find / -perm +7000                      #搜寻档案中含有SGID或SUID或SBIT的属性
  • find / -size +1000k                      #找出系统中,大于1MB的档案
  • find /root -name “install.log*”       #根据名称在/root目录下搜索所有匹配 install.log*文件
  • find /var -type s                           #找出/var目录下,文件类型为Socket的档案
  • find /var/log -mtime +10               #查找10天前修改的文件

                                                                 #-10 10天内修改文件

                                                                #10   10天当天修改的文件

        #+10  10天前修改的文件

                                                               # atime 文件访问时间

                                                               #ctime 改变文件属性

        #mtime 修改文件内容

  • find . -size 25k                            #查找文件大小是25k2624的b的文件

                                                               #-25k 小于25kb的文件

                                                              #25k  等于25kb的文件

                                                               #+25k 大于25k的文件

  • find . inum 262422                      #查找i节点是262422的文件
  • find /etc -size -20k -a -size -50k  #查找/etc/目录下,大于20KB并且小于50kb的文件

                                                                  #-a and 逻辑与,两个条件都满足

        #-o or 逻辑或 ,两条条件满足一个即可

  • find /etc -size +20k -a -size -50k -exec ls {} \;#查找/etc/目录下,大于20kb并且小于50kb的文件,并显示详细信息


18. 查看网络

  •  ip addr
  •  ifconfig   #查看与配置网络状态的命令
  •  ifconfig eth0 192.168.0.200 netmask 255.255.255.0  #临时设置eth0网卡的IP地址与子网掩码

19  磁盘与目录的容量  df [-ahikHTm] [目录或文件]
df
常用选项与参数
-l:   仅显示本地磁盘(默认)
-a:  显示所有文件系统的磁盘使用情况,包括比如/proc/

-h:  以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示

-H: 以1000进制计算最合适的单位显示磁盘容量

-T:  显示磁盘分区类型

-t: 显示指定类型文件系统的磁盘分区

-x: 不显示指定类型文件系统的磁盘分区

-i:  不用硬盘容量,而已inode的数量来显示

  • df                          #呼叫出目前挂在的指令
  • df -h                     #将容量以容易阅读的格式显示出来
  • df -aT                   #将系统内的所有特殊文件格式以及名称都列出来
  • df -h /etc              #将/etc 底下的可用磁盘容量以容易阅读的格式显示
  • df -ih                    #将目前各个partition当中可用的inode数量列出

du [-ahskm] 档案或目录名称

常用选项与参数

-b:  以byte为单位统计文件

-k:  以KB为单位统计文件

-m:  以MB为单位统计文件

-h: 按照1024进制以最适合的单位统计文件

-H:  按照1000进制以最适合的单位统计文件

-s:  指定统计目标


  • du                        #列出目前目录下的所有档案容量
  • du -a                   #同上,但是将档案的容量也列出
  • du -sm /*             #检查根目录底下,每个目录所占的容量

20. ln [-sf] 来源文件 目标文件
ln
常用选项与参数

-s:  如果不加任何参数就进行连接,那就是hard link,至于 -s 就是symbolic link

-f:  如果目标文件存在,就主动将目标文件直接移除后再建立

  • ln passwd passwd-hd              #创建一个passwd的硬链接passwd-hd
  • ln -s passwd passwd-so          #创建一个passwd的软链接passwd-so

21. 磁盘分区 fdisk [-l] 装置名称

fdisk

选项与参数

-l:  输出后面接的装置所有的partition内容,。若仅有 fdisk -l时,则系统将会把整个系统内能搜寻到的装置的partition均列出来。


22. 磁盘格式化 mkfs [-t 文件系统格式] 装置文件名

mkfs

选项与参数:

-t:  可以接文件系统格式,例如ext3,ext2,vfat等



23. 磁盘挂载与卸除 mount [-t 文件系统] [-L Label 名] [-o 额外选项] [-n] 装置文件名 挂载点 ;   unmount [-fn] 装置文件名或挂载点

mount

  • mkdir /mnt/hdc6 ;  mount /dev/hdc6 /mnt/hdc6                                            #将刚刚建立的/dev/hdc挂载到/mnt/hdc6上
  • mount -l                                                                                                        #观察目前[已挂载]的文件系统,包含文件系统的Label名称
  • mkdir /media/cdrom ;  mount -t iso9660 /dev/cdrom /media/cdrom            # 挂载光盘
  • mount -o remount,rw,auto /                                                                         #将 / 重新挂载,并加入参数为rw ,auto
  • mkdir /mnt/home ; mount --bind /home /mnt/home                                     #将/home这个目录暂时挂载到 /mnt/home底下

unmount

选项与参数:

-f:  强制卸除,可用在类似网络文件系统(NFS)无法读取到的情况下

-n:  不更新 /etc/mtab 情况下卸除

  • unmount /dev/hdc6                                                                                      #用装置文件名来卸除
  • unmount /media/cdrom                                                                                #用挂载点来卸除


24  压缩

常见的5种压缩格式

gzip  

gzip [-cdtv#] 档案名 

选项与参数

-c: 将压缩的数据输出到屏幕上,可透过数据流重导来处理

-d: 解压缩的参数

-t:  可以用来检验一个压缩文件的一致性~看看档案有无错误

-v:  可以显示出原档案/压缩文件 的压缩比等信息

-#:  压缩登记,-1最快,但是压缩比最差、-9最慢,但是压缩比最好,默认是-6

  • gzip -v test.sh                                           #压缩test.sh。并显示压缩比
  • gzip -d test.sh.gz                                      #将test.sh.gz解压
  • gzip -9 -c test.sh > tesh.sh.gz                  #用最佳压缩比压缩test.sh,并且保留原本的档案

bzip2

bzip2 [-cdkzv#] 档案名

选项与参数

-c: 将压缩的数据输出到屏幕上,可透过数据流重导来处理

-d: 解压缩的参数

-k:  保留源文件,而不会删除原始的档案

-z:  压缩的参数

-v:  可以显示出原档案/压缩文件的压缩比等信息

-#:  压缩登记,-1最快,但是压缩比最差、-9最慢,但是压缩比最好,默认是-6

  • bzip2 -z  test.sh                                         #压缩test.sh
  • bzip2 -d test.sh.bz2                                  #解压test.sh.bz2

tar

tar [-j | -z] [cv] [-f 建立的档名] filename...             #打包与压缩

tar [-j | -z] [tv] [-f 建立的档名]                               #查看档名

tar [-j | -z] [xv] [-f 建立的档名]                              #解压缩

常用选项与参数:

-c: 建立打包档案,可搭配 -v来 查看过程中被打包的档名

-t:  查看打包档案的内容有哪些档名

-x:  解打包或解压缩的功能,可以搭配-C 在特定目录解开,特别留意的是,-c, -t, -x 不可同时出现在一串指令中

-j:  透过 bzip2的支持进行压缩/解压缩 : 此时档名最好为 *.tar.bz2

-z:  透过 gzip 的支持进行压缩/解压缩 : 此时档名最好为 *.tar.gz 

-v:  在压缩/解压缩的过程汇总,将正在处理的文件名显示出来

-f : filename:  -f 后面要立刻接要被处理的档名!建议-f 单独写一个选项

-c:  目录:  这个选项在解压缩,若要在特定目录解压缩,可以使用这个选项

-p:  保留备份数据的原本权限属性,常用于备份(-c)重要的配置文件 

-P:  保留绝对路径,即允许备份数据中含有根目录存在

--exclude =FILE : 在压缩的过程中,不要将FILE打包

  • tar -jcv -f filename.tar.bz2 要被压缩的档案或目录名称                    #压缩
  • tar -jtv -f filename.tar.gz2                                                                 #查询
  • tar -jxv -f filename.tar.bz2 -C                                                           #欲解压缩的目录
  • tar -zpcv -f etc.tar.gz /etc #备份/etc
  • tar -ztv -f etc.tar.gz                                                                          #查看 etc.tar.gz 档名字
  • tar -zxv -f etc.tar.gz                                                                         #解压缩 etc.tar.gz
  • tar -jxv etc.tar.gz etc/shadow                                                          #解开etc.tar.gz中的 etc/shadow



25. 字符串搜索  grep [-acinvAB] [--color=auto] '搜寻字符串' filename

选项与参数:

-a: 将binary档案以text档案的方式搜索数据

-c:  计算找到'搜寻字符串'的次数

-i:  忽略大小写不同

-n:  输出行号

-v:  反向选择,即显示出没有‘搜索字符串’的那一行

-A: 后面可加数字,为after的意思,除了该列之外,后续的n行也列出来  

-B: 后面可加数字,为before的意思,除了该咧之外,前面的n行也列出

--color=auto:  加上颜色


  • last | grep 'root'                                                               #将last当中,有出现root的那一行
  • last | grep -v 'root'                                                          #与例1相反,只要没有root的就取出
  • last | grep 'root' |cut -d ' ' -f1                                          #在last的输出讯息中,只要有root就取出,并且仅取第一列
  • grep --color=auto 'MANPATH' /etc/man.config            #取出/etc/man.config内包含MANPATH的那几行
  • dmesg | grep -n -A3 -B2 --color-auto 'eth'                   #关键词所在的前两行与后三行也一起显示
  • grep -n 't[ae]st' regular_express.txt                             #搜寻test或taste这两个单字
  • grep -n '\.$' regular_express.txt                                   #搜寻行尾结束为小数点的那一行
  • grep -n '^$' regular_express.txt                                   #找出空白行
  • grep -v '^$' /etc/syslog.conf | grep -v '^#'                     #第一个 -v '^$'代表不要空白行,第二个 -v '^#' 代表不要开头是#的那行
  • grep -n 'g..d' regular_express.txt                                #找出g??d的字符串
  • grep -n 'ooo*' regular_express.txt                              #至少要两个以上的oo字符串
  • grep -n 'goo*g' regular_express.txt                            #两个g之间至少有一个o 
  • grep -n 'g*g' regular_express.txt                                #找出开头与结尾是g的字符串,中间有无字符串不关心
  • grep -n 'g.*g' regular_express.txt                               #gg中间至少要有一个字符
  • grep -n 'go\{2,5\}g' regular_express.txt                     #要出g后面接2到5个o,再接一个g的字符串



26.备份工具 dd if="input_file" of="output_file" bs="block_size" count="number"

dd

选项与参数

-if:  就是input file, 也可以是装置 

-of: 就是output file,也可以是装置

-bs: 规划一个block大小,若未指定则预设是512 bytes

-count: 多少个bs的意思

  • dd if=/etc/passwd of=passwd.back                          #将/etc/passwd备份到passwd.back当中
  • dd if=/dev/hdc of=mbr.back bs=512 count=1          #将自己的磁盘第一个扇区备份下来

27 完整备份工具 dump [-Suvj] [-level] [-f 备份档] 待备份资料

dump

选项与参数

-S:  仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕

-u:  将这次 dump的时间记录到 /etc/dumpdates 档案中

-v:   将dump的档案过程显示出来

-j:  加入 bzip2的支持,将数据进行压缩,默认bzip2的压缩等级为2

-level:  -0~-9 共10个等级

-f:  后面产生的档案


  • dump -S /dev/hdc1                               #测试备份 /dev/hdc1需要多少容量
  • dump -0u -f /root/boot.dump /boot       #将完整备份的文件记录成为/bot/boot.dump ,同时更新记录文件

restore  还原

  • restore -t -f /root/boot.dump                #查看备份
  • restore -C -f /root/boot.dump              #查看文件系统与备份文件之间的差异

28 与文件系统及程序的限制关系:ulimit

bash可以[限制用户的某些系统资源],比如cpu,内存等

ulimit -[SHacdfltu] [配额]

选项与参数

-H: hard limit,严格的设定,必定不能超过这个设定的数组

-S: soft limit,警告的设定,可以超过这个设定值,但是若超过则有警告讯息

    在设定上,通常soft会比hard小,举例来说,soft可以设定为80而hard设定为100。当介于80~100时,系统会有警告讯息

-a: 后面不接任何选项与参数,可列出所有的限制额度

-c: 当某些程序发生错误时,系统可能会将该程序在内存中的信息写成档案

-f: 此shell可以建立的最大档案容量(一般可能设定为2GB)

-l: 可用于锁定的内存量

-t: 可使用的最大CPU时间

-u: 单一用户可以使用的最大程序数量

  • ulimit -a                        #列出你目前身份的所有限制资料树值
  • ulimit -f 10240              #限制用户仅能建立10MBytes以下的容量的档案

29 历史命令  history [选项] [历史命令保存文件]

选项:

n:  数字,意思是[要列出最近的n笔命令行表]的意思

-c:清空历史命令

-a:  将目前新增的history指令新增入histfiles中,若没有加histfiles,则预设~/.bash_history

-r:将histfiles的内容读到目前这个shell的history记忆中

-w: 将目前的history记忆内容写入histfiles中

  • history                               #列出目前内存内的所有history记忆
  • history 3                            #列出最近3
  • history -w                          #立即将目前的资料写入histfile当中


30 别名与快捷键

(1)不显示颜色

ls - -color=never /

alias ls =“ls  - - color=never”   设置别名

(2)ailias 查看所有生效别名


(3)别名永久生效与删除别名

vi ~/.bashrc  写入环境变量配置文件

source .bashrc   让配置文件生效


(4)unalias 别名  删除别名


31读入环境配置文件的指令  source:

source 配置文件档名 

  • source ~/.bashrc      #读入~/.bashrc档案
  • . ~/.bashrc               #读入~/.bashrc档案


32

快捷键

ctrl+c  强制终止当前命令

ctrl+l   清屏

ctrl+a  光标移动到命令行首

ctrl+e  光标移动到命令行尾

ctrl+u  从光标所在位置删除到行首

ctrl+z  把命令放入后台

ctrl+r   在历史命令中搜索


33通配符与特殊符号

*:代表[0个到无穷多个]任意字符

? :代表[一定有一个]任意字符

[]:代表[一定有一个在括号内]的字符。例如[abcd]代表[一定有一个字符,可能是a,b,c,d这四个任何一个]

[-]:若有减号在中括号内时,代表[在编码顺序内的所有字符]。例如[0-8]代表0到9之间的所有数字,因为数字的语系编码是连续的。

[^]:若中括号内的第一个字符为^,那表示[反向选择],流入[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受。

  • ll -d /etc/cron*     #找出/etc/底下以cron为开头的档名
  • ll -d /etc/?????     #找出/etc/底下文件名[刚好是五个字母]的文件名
  • ll -d /etc/*[0-9]*   #找出/etc/底下文件名含有数字的文件名
  • ll -d /etc/[^a-z]*   #找出/etc/底下,档名开头非为小写字母的文件名
  •  cp -a /etc/[^a-z]* /tmp  #将上一例的档案复制到/tmp中

除了通配符之外,bash环境中的特殊符号有哪些呢?

#:批注符号,常被用在script当中,在后的数据均不执行

\:跳脱符号,将[特殊字符或通配符]还原成一般字符

|:管线,分隔两个管线命令的界定

;:连续指令下达分隔符:连续性命令的界定

~:用户的家目录

$:取用变数前导符,亦即是变量之前需要加的变量取代值

&:工作控制,将指令变成背景下工作

!:逻辑运算意义上[非]not的意思。

/:目录符号,路径分割的符号

>,>>:数据流重导向,输出导向,分别是[取代]与[累加]

<,<<:数据流重导向,输入导向

‘’:单引号,不具有变量置换的功能

“”:双引号,具有变量置换的功能

``:两个[`]中间为可以先执行的指令,也可以使用$()

():在中间为子shell的起始与结束

{}:在中间为命令区块的组合



34

 输出重定向

命令 > 文件  以覆盖的方式,把正确输出和错误输出都保存到同一文件中。

命令 >> 文件  以追加的方式,把正确数出和错误输出都保存到同一文件中。

命令 >>文件1  2>>文件2  把正确的输出追加到文件1中,把错误的输出追加到文件2中


35 && 和 || 

cmd1 && cmd2 

(1)若cmd1执行完毕且正确执行,则开始执行cmd2

(2)若cmd1执行完毕且为错误,则不执行cmd2

cmd1 || cmd2

(1)若cmd1执行完毕且正确执行,则cmd2不执行

(2)若cmd2执行完毕且为错误,则开始执行cmd2

  • ls /tmp/abc && touch /tmp/abc/hehe                                       #使用ls查阅目录/tmp/abc是否存在,若存在则用touch建立 /tmp/abc/hehe
  • ls /tmp/abc || mkdir /tmp/abc                                                  #测试/tmp/abc是否存在,若不存在则建立。
  • ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe          #不清楚/tmp/abc是否存在,但是要建立/tmp/abc/heh档案


36 cut

选项与参数:

-d:  后面接分隔字符。与-f一起使用

-f:依据-d的分隔字符将一段讯息分割成数段,用-f取出第几段的意思

-c:  以字符(characters)的单位取出固定字符区间

  • echo $PATH | cut -d ':' -f 5                                                #将PATH变量的第5个路径取出
  • export | cut -c 12-                                                              #将export输出的讯息,取得第12字符以后的所有字符串
  • last | cut -d ' ' -f 1                                                               #用last将显示的登入者的信息中,仅留下用户大名

37 sort

sort [-fbMnrtuk] [file or stdin]

选项与参数:

-f:  忽略大小写的差异,例如A与a视为编码相同

-b:忽略最前面的空格部分

-M: 以月份的名字来排序,例如JAN, DEC等排序方法

-n:  使用[纯数字]进行排序(默认是以文字形态来排序)

-r:反向排序

-u:  就是uniq,相同的数据中,仅出现一行;

-t:分隔符,预设使用[tab]键来分割

-k:  以那个区间(field)来进行排序的意思

  • cat  /etc/passwd |sort                       #将个人账号进行排序
  • cat /etc/passwd | sort -t ':' -k 3 -n     #帐号信息以[:]进行分割,第三行数字进行排序
  • last | cut -d ' ' -f1 | sort                     #利用last,将输出的数据仅取账号,并进行排序


38 uniq 

uniq [-ic]

选项与参数:

-i :  忽略大小写字符的不同

-c:进行计数

  • last | cut -d ' ' -f1 | sort | uniq                              #使用last将账号列出,仅取出账号拦,并且相同的只输出一次
  • last | cut -d ' ' -f1 | sort | uniq -c                         #承上题,还需知道每个账号的登录次数

39 wc

wc [-lwn]

选项与参数

-l:  仅列出行

-w:仅列出多少字(英文单词)

-m:多少字符

  • cat /etc/man.config | wc                                      #那个/etc/man.config 里面到底有多少相关行,字,字符数

40 tree

tree [-a] file

选项与参数

-a:  以累加(append)的方式,将数据加入到file当中

  • last | tree last.list | cut -d " " -f1                           #将last的输出存一份到last.list档案中
  • ls -l /home | tree ~/homefile |more

41  字符转换命令: tr , col , paste 

tr [-ds] SET1 .....

选项与参数

-d:  删除讯息当中的SET1这个字符串;

-s:  取掉重复的字符

  • last | tr '[a-z]' '[A-Z]'                                         #将last输出的讯息中,所有的小写变成大写字符
  • cat /etc/passwd | tr -d ':'                                 #将/etc/passwd 输出的讯息中,将冒号(:)删除

col [-xb]

选项与参数

-x:  将tab键转换成对等的空格键

-b:  在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符


  • cat /etc/man.config | col -x | cat -A | more                           #利用cat -A 显示出所有特殊按键,最后以col将将[tab]转成空白

paste [-d] file1 file2

选项与参数

-d:  后面可以接分隔字符。预设是以[tab]来分隔的

- :  如果file部分写成-  ,表示来自standard input的资料的意思

  • paste /etc/passwd /etc/shadow                                        #将/etc/passwd与/etc/shadow同一行贴在一起


42  分隔命令: split [-bl] file PREFIX

split

选项与参数

-b:  后面可接欲分隔成的档案大小,可加单位,例如b,k,m等 

-l:   以行数来进行分割

PREFIX: 代表前导符的意思,可作为分割档案的前导文字。

  • cd /tmp ; split -b 300k /etc/termcap termcap                #我的/etc/termcap有七百多K,要发成300k一个
  • cat termcap* >> termcapback                                      #将上面的几个档案合成一个档案,名为termcapback

43 sed

$表示最后一行
sed命令中使用 \(\) 包裹的内容表示郑泽表达式的第n部分
  • nl /etc/passwd | sed '2,5d'                                            #将 /etc/passwd的内容列出并且打印行号,同时,将2~5行删除
  • nl /etc/passwd | sed '2d'                                               #将 /etc/passwd的内容列出并切打印行号,同时,删除第2行
  • nl /etc/passwd | sed '3,$d'                                            #将 /etc/passwd的内容列出并且打印行号,同时,删除第3行至最后一行
  • nl /etc/passwd | sed '2a drink tea'                                #在第二行后,加上 [drink tea]字样
  • nl /etc/passwd | sed '2i drink tea'                                 #在第二行前,加上[drink tea]字样
  • nl /etc/passwd | sed '2,5c No 2-5 number'                   #第2-5行的内容取代为[ No 2-5 number ]
  • nl /etc/passwd | sed -n '5,7p'                                        #仅列出 /etc/passwd 档案内的第5-7行
  • sed '1,$a \add one' test.txt                                            #在test.txt文件中第一行至最后一行都加上add one
  • sed '/first/a \add one' test.txt                                         #在包含first字符串的行的后面加上字符串add one
  • sed '/^ha.*day$/a \add one'                                           #在ha开头,以day结尾的行,后面加add one
  • sed '$c \add one' test.txt                                               #将最后一行替换成字符串"add one"
  • sed 's/line/text/g' test.txt                                                #将文本中的所有line替换成text,g是全局的意思,如果没有g,则只会替换第一个line
sed 's/要被取代的字符串/新的字符串/g'
  • ipconfig | grep 'inet addr' | sed 's/^.*addr://g'                                                #将ip前面的部分予以删除
  • ipconfig | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'                #将ip后面的部分予以删除
  • cat /etc/man.config | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'                      #删除批注和空白符
  • sed -i 's/\.$/\!/g' regular_express.txt                                                            #利用sed将regular_express.txt内的每一行结尾.换成!
  • $sed -i '$a # This is a test' regular_express.txt                                           #利用sed直接在regular_express.txt最后一行加入[#This is a test]

44 格式化打印: printf

printf '打印格式' 实际内容

选项与参数:

关于格式方面的几个特殊样式:

\a  警告声音输出

\b  退格键

\f   清除屏幕

\n  输出新的一行

\r   即Enter按键

\t   水平的[tab]按键 

\v   垂直的[tab]按键

\xNN  NN为两位数的数字,可以转换数字称为字符

关于C语言内,常见的变数格式

%ns   n是数字,s代表string,即多少个字符

%ni    n是数字,i 代表integer ,即多少个整数字数

%N.nf  n和N都是数字,f代表floating,如果有小数字数,假设我共要十个位数,但小数点有两位,即为%10.2f


45 awk 

awk '条件类型 1{动作1} 条件类型 2{动作2} ....' filename

  • last -n 5 | awk '{print $1 "\t" $3}'                         #取出账号与登入者的IP,且以[tab]隔开
awk 有一些内建的变量
NF  每一行拥有的字段总数
NR  目前awk所处理的时[第几行]数据
FS  目前的分割字符,默认是空格

  • cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {PRINT $1 "\t" $3} '

46 diff [-bBi] from-file to-file

选项与参数

-from-file: 一个档名,作为原始比对档案的档名  

-to-file:   一个档名,作为目的比对档案的档名

注意,from-file或 to-file可以 -取代,那个-代表[Standard input] 之意

-b: 忽略一行当中,仅有多个空白的差异。例如"about me" 与'about     me"相同

-B: 忽略空白行的差异

-i:  忽略大小写的不同

  • diff passwd.old passwd.new                                            #比对passwd.old与passwd.new的差异
  • diff -Naur passwd.old passwd.new > passwd.patch        # 以passwd.old与passwd.new 制作布丁档案
  • patch -p0 < passwd.patch                                                #将上一例制作出来的path file用来更新旧版数据
  • patch -R -p0 < passwd.patch                                          # 恢复旧档案的内容


47  shell script的追踪与debug

sh [-nvx] script.sh

选项与参数

-n : 不要执行script, 仅查询语法的问题

-v:在执行script前,先将scripts的内容输出到屏幕上

-x:将使用到的script内容显示到屏幕上,这是很有用的

  • sh -n sh.16.sh       #测试sh16.sh有无语法问题
  • sh -x sh15.sh       #将sh15.sh的执行过程全部列出来

48 实际运行单一工作排程 at [-mldv] TIME

at

选项与参数

-m : 当at的工作完成后,即使没有输出讯息,以email通知使用者改工作完成 

-l:at -l 相当于atrm,列出目前系统上面的所有该用户的at排程

-v: 可以使用较明显的时间格式栏出at排程中的任务栏表

-c:可以列出后面接的该项工作的实际指令内容

  • atq                      #查询目前主机上面有多少的at工作排程
  • atrm 5                 #将上诉的第5个工作移除
batch与at类似,它会在系统的cpu工作负载小于0.8的时候,才进行所下达的工作任务

crontab [-u username] [-l|-e|-r ]

选项与参数

-u: 只有root才能进行这个任务,即帮助其他使用者建立/移除crontab工作排程 

-e:编辑crontab的工作内容

-l:  查阅crontab的工作内容

-r: 移除所有crontab的工作内容,若仅移除一项,请用-e去编辑

(1)假若你的女朋友生日是5月2日,你想要在5月1日的23:59发一封信给他,这封信的内容已经写在/home/dmtsai/lover.txt 内了,该如何进行?
    答: 直接下达 crontab -e之后,编辑

 59 23 1 5 * mail kiki < /home/dmtsai/lover.txt

(2)假如每五分钟需要执行 /home/dmtsai/test.sh 一次,又该如何?

     答: 同样适用crontab -e ,编辑

*/5 * * * * /home/dmtsai/test.sh

(3) 假如你每星期六都与朋友有约,那么想要每个星期五下午4:30告诉你朋友星期六的约会不要忘记,则:

答: 适用 crontab -e 编辑

  30 16 * * 5 mail friend@his.server.name < /home/dmtsai/friend.txt

  • crontab -l              #查询使用者目前的crontab

49. 观察目前的背景工作状态:jobs [-lrs]

选项与参数

-l:  除了列出job number与指令串之外,同时列出PID的号码

-r:仅列出正在背景run的工作

-s:  仅列出正在背景中暂停(stop)的工作

  • jobs -l         #观察目前的bash当中,所有的工作,与对应的PID

50 将背景工作拿到前景来处理 fg %jobnumber

选项与参数

-%jobnumber:  jobnumber为工作号码(数字)。注意,那个%是可有可无的。


51 管理背景当中的工作: kill -signal %jobnumber

选项与参数

-l :   这个是L的小写,列出目前kill能哦股使用的讯号( signal)有哪些

signal: 代表给予后面的那个工作什么样的指示,一般来说有:

   -1: 重新读取一次参数的配置文件

   -2: 代表与由键盘输入 [ctrl]-c 同样的动作

   -9:  立刻强制删除一个工作

   -15: 以正常的程序方式终止一项工作。与-9是不一样的。


52 脱机管理问题  nohup

nohup可以让你再脱机或注销系统后,还能让工作继续进行,他的语法有点像这样:

nohup [指令或参数]      #在终端机前景中工作

nohup [指令或参数] &  #在终端机背景中工作


53 程序的观察

ps : 将某个时间点的程序运作情况截取下来

  • ps aux                                                #观察系统所有的程序数据 
  • ps -lA                                                #观察所有系统的数据
  • ps axjf                                               #连同部分程序树状态
  • ps -l                                                  #仅观察自己的bash相关程序
  • ps aux | egrep '(cron|syslog)'           #找出与cron与syslog这两个服务有关的PID号码

top : 动态观察程序的变化 top  [-d 数字] | top [-bnp]

top 预设使用CPU使用率(%CPU)作为排序的重点,如果你想要使用内存使用率排序,则可以按下[M],若要回复则按下[P]即可 。如果想要离开top则按下[q]吧!

  • top -d 2                                   #每两秒钟更新一次top
  • top -b -n 2 > /tmp/top.txt        #将top的信息进行2次,然后将结果输出到 /tmp/top.txt

pstree

  • pstree -A                                 #列出目前系统上面所有的程序树相关性
  • pstree -Aup                             #承上题,同时秀出PID与users


54  nicee [-n 数字] command

选项与参数

-n :   后面接一个数值,数值范围-20~19

  • nice -n -5 vi &                               #用root 给一个nice值为-5,用于执行vi,并观察该程序


55 已存在程序的nice重新调整 renice [number] PID

选项与参数

PID :   某个程序的ID


56 系统资源的观察

free 观察内存使用情况 free [-b|-k|-m|-g] [-t]

选项与参数

-b: 直接输入free时,显示的单位是Kbytes,我们可以使用b(bytes) ,m(Mbytes)及g(Gbytes)来显示单位

-t: 在输出的最终结果,显示物理内存与swap的总量

  • free -m                      #显示目前系统的内存容量


uname :  查询系统与核心相关信息  uname [-asrmpi]

选项与参数

-a: 所有系统相关的信息,包括底下的数据都会被列出来;

-s: 系统核心名称

-r: 核心的版本

-m:  本系统的硬件名称,例如 i686 或x86_64

-p: CPU的类型,与-m类似,只是显示的是CPU的类型

-i:    硬件的平台(ix86)

  • uname -a                                #输出系统的基本信息

57  netstat [-atunlp]

选项与参数

-a: 将目前系统上所有联机、监听、Socket数据都列出来

-t:  列出tcp网络封包的数据

-u: 列出udp网络封包的数据

-n: 不以程序的服务名称,以port number来显示

-l:  列出目前正在网络监听的服务

-p: 列出该网络服务的程序PID

  • netstat                               #列出目前系统已经建立的网络联机与unix socket状态
  • netstat -tlnp                      #找出目前系统上已在监听的网络联机及其PID
  • netstat -tulp                      #找出目前系统开启的[网络服务]有哪些
  • netstat -lnp                       #找出所有的有监听网络的服务
  • service --status-all          #观察所有的服务状态

58  侦测系统资源变化  vmstat 

r: 等待运作中的程序数量 

b: 不可被唤醒的程序数量

这两个项目越多,代表系统越忙碌

si: 由磁盘中将程序取出的量

so: 由于内存不足而将没用到的程序写入到磁盘的swap的容量

如果si/so 的数值太大,表示内存内的数据常常得在磁盘与主存储器间传来传去,系统效能会很差

bi: 由磁盘写入的区块数量

bo:写入到磁盘去的区块数量。

如果这部分的值越高,代表系统的I/O非常忙绿

选项与参数

-a: 使用 inactive/active(活跃与否)取代buffer/cache的内存输出信息

-f:  将开机到目前为止,系统复制(fork)的程序数

-s: 将一些时间(开机到目前为止)导致内存变化情况列表说明

-S: 后面可以接单位,让显示的数据有单位。例如K/M取代bytes的容量

-d:  列出磁盘的读写总量统计表

-p: 后面列出分割槽,可显示该分割槽的读写总量统计表

  • vmstat 1 3                         #统计目前主机的CPU状态,每秒一次,共计三次


59 fuser [-umv] [-k [i] [-signal]] file/dir

  • fuser -uv .                           #找出目前所在目录的使用 PID/所属账号/权限 
  • fuser -mvu /proc                 #找到所有使用到 /proc 这个文件系统的程序


60 lsof 

  • lsof                                     #列出目前系统上面所有已经被开启的档案与装置
61 pidof [-sx] program_name

选项与参数

-s: 仅列出一个PID而不列出所有的PID

-x: 同时列出该program name 可能的PPID那个程序的PID  

  • pidof init syslogd                              #列出目前系统上面init以及syslogd这两个程序的PID

62 chkconfig: 管理系统服务默认开机启动与否

选项与参数

--list:  仅将目前的各项服务状态栏出来

--level:   设定某个服务在该level下启动(on)或关闭(off)

  • chkconfig --list | more                       #列出目前系统上面所有被chkconfig管理的服务
  • chkconfig --list | grep "3:on"             #显示目前在run level 3为启动的服务
  • chkconfig --level 345 atd on            #让atd这个服务在run level为3,4,5时启动

63 gcc 的简易用法

  • gcc -c hello.c                                       #仅将原始码编译成为目标文件,并不制作链接等功能
  • gcc -O hello.c -c                                  #在编译的时候,依据作业环境给予优化执行速度,会自动产生hello.c这个档案,并且进行优化
  • gcc sin.c -lm -L/usr/lib -I/usr/include   #在进行binary file制作时,将连结的函数库和相关的路径填入
  • gcc -o hello hello.c                             #将编译的结果输出成某个特定档名
  • gcc -o hello hello.c -Wall                    #在编译的时候,输出较多的讯息说明


64  rpm -ivh package_name

选项与参数

-i: install的意思 

-v:   查看更细部的安装信息画面

-h: 以安装信息列显示安装进度

rpm安装时常用的选项与参数说明

--nodeps:  当软件属性相依问题而无法安装,但你执意安装时

--replacefiles: 如果在安装的过程中出现了[某个档案已经被安装在你的系统上]的信息,又或许出现版本不合的讯息时,可以使用这个参数来直接覆盖档案

--replacepkgs: 重新安装某个已经安装过的软件!如果你要安装一堆RPM软件档案时,可以使用rpm -ivh *.rpm ,但若某些软件已经安装过了,此时系统就会出现[某软件已安装]的信息,导致无法继续安装,此时可以使用这个选项来重复安装

--force: 这个参数就是 --replacefiles 与 --replacepkgs的综合

--test: 想要测试一下该软件是否可以被安装到使用者的Linux环境当中,可找出是否有属性相依的问题

--justdb:由于RPM数据库破损或者某些缘故产生错误时,可以使用这个选项来更新软件在数据库内的相关信息

--nosignature: 想要略过数字签名的检查时,可以使用这个选项

--prefix 新路径:想要将软件安装到其他非正规目录时。

--noscripts: 不想让软件在安装过程中自行执行某些系统指令

  • rpm -q logrotate                     #找出Linux是否有安装logrotate这个软件
  • rpm -ql logrotate                    #列出上题当中,属于该软件所提供的所有目录与档案
  • rpm -qi logrotate                    #列出logrotate这个软件的相关说明数据
  • rpm -qc logrotate                  #找出logrotate的配置文件
  • rpm -qd logrotate                 #找出logrotate的说明档
  • rpm -qR logrotate                 #若要成功安装logrotate, 还需要什么档案的帮助
  • rpm -qf /bin/sh                      #找出/bin/sh是哪个软件提供的
  • rpm -qpR filename.i386.rpm  #找出档案的需求档案
  • rpm -qa | grep ^c | wc -l         #找出系统中以c开头的软件有几个
  • rpm -V logrotate                    #列出Linux内的logrotate这个软件是否被更动过
  • rpm -Vf /etc/crontab              #查询一下,你的/etc/crontab是否有被更动过
  • rpm -e pam                           #卸载一个软件,但是必须先删除依赖他的软件
  • rpm --rebuilddb                     #重建数据库


65  yum [option] [查询工作项目] [相关参数]

选项与参数

[option]: 主要的选项,包括有:

-y: 当yum要等待用户输入时,这个选项可以自动提供yes的响应

--installroot=/some/path: 将该软件安装在 /some/path 而不使用默认路径

-install :后面接要安装的软件

-update:后面接要升级的软件,若要整个系统都升级,就直接update即可

-remove:  后面接要移除的软件

[查询工作项目][相关参数]: 这方面的参数有:

search : 搜寻某个软件名称或者是描述的重要关键字

list: 列出目前yum所管理的所有软件名称与版本,有点类似 rpm -qa 

info:同上,不过有点类似  rpm -qai 的执行结果

provides:从档案去搜索软件!类似 rpm -qf 的功能

  • yum search raid                  #搜寻磁盘阵列(raid)相关的软件有哪些
  • yum info mdadm                 #找出mdadm 这个软件的功能
  • yum list                               #列出yum 服务器上面提供的所有软件名称
  • yum list updates                 #列出目前服务器上可供本机进行升级的软件有哪些
  • yum provides passwd        #列出提供passwd这个档案的软件有哪些
  • yum install pam-devel        #安装pam-devel 
  • yum repolist all                  #列出目前 yum server 所使用的容器有哪些
  • yum clean  all                    #删除已下载过的所有容器的相关数据
  • yum grouplist                    #查阅目前容器与本机上面的可用与安装过的软件群组有哪些


66 test指令的测试功能

当要检查系统上面某些档案或者相关属性时,利用test这个指令,比如

  • test -e /dmtsai                  #检查 /dmtsai是否存在
执行结果并不会显示任何讯息,但最后可以通过$? 或 && 及 || 来展现整个结果。
  • test -e /dmtsai && echo "exist" || echo "Not exist"
除了 -e之外,还有很多测试的标志,如
-e :  该 [档名是否存在]
-f: 该[档名]是否存在且为file
-d:   该[档名]是否存在且为目录
-b:   该[档名]是否存在且为一个block device装置
-c:   该[档名]是否存在且为一个character device装置
-S:该[档名]是否存在且为一个Socket档案
-p:   该[档名]是否存在且为一个FIFO(pipe)档案
-L:   该[档名]是否存在且为一个连结档
-r :   该[档名]是否存在且具有[可读]权限
-w:该[档名]是否存在且具有[可写]权限
-x: 该[档名]是否存在且具有[可执行]权限
-u: 该[档名]是否存在且具有[SUID]的属性
-g: 该[档名]是否存在且具有[SGID]的属性
-k: 该[档名]是否存在且具有[Sticky bit]的属性
-s: 该[档名]是否存在且为[非空白档案]?
两个档案之间的比较,如: test file1 -nt fil2
-nt:判断 file1 是否比 fil2 新
-ot:判断 file1 是否比 file2 旧
-ef:判断file1与fil2是否为同一档案,可用在判断hard link的判断上。
关于两个整数之间的判断,例如: test n1 -eq n2
-eq:两数值相等
-ne:量数值不相等
-gt: n1 大于 n2
-lt : n1 小于 n2
-ge: n1大于等于n2
-le: n1小于等于n2
判断字符串数据
test -z String :判断字符串是否为0? 若String为空字符串,则为true
test -n String :判断字符串是否非为0? 若String 为空字符串,则为false。-n可省略
test str1 = str2 :判断str1是否等于str2,若相等,回传true
test str1 != str2: 判断str1是否不等于str2,若相等,则回传false
多重条件判定,例如 test -r filename -a -x filename
-a :  (and)量状况同时成立。
-o :(or) 两状况任何一个成立
! :反相状态,例如 test ! -x file ,当file不具有 x时,回传true


67 变量内容的删除、取代与替换

${变量#关键词}: 若变量内容从头开始的数据符合[关键词],则将符合的最短数据删除

${变量##关键词}:若变量内容从头开始的数据符合[关键词],则将符合的最长数据删除

${变量%关键词}:若变量内容从尾向前的数据符合[关键词],则将符合的最短数据删除

${变量%%关键词}:若变量内容从尾向前的数据符合[关键词],则将符合的最长数据删除

${变量/旧字符串/新字符串}:若变量内容符合[旧字符串]则[第一个旧字符串会被新字符串取代]

${变量//旧字符串/新字符串}:若变量内容符合[旧字符串]则[全部的旧字符串会被新字符串取代]

var=${str-expr} : 若str已设定,则var=str,否则var=expr

var=${str:expr}:若str已设定且非空,则var=str,否则var = expr

var=${str+expr}:若str已设定,则var=expr ,否则var =""

var=${str:+expr}:若str已经设定非空,则var =expr,否则var =""

var=${str=expr}: 若str已经设定,则str不变,var=str, 否则str=expr,var=expr

var=${str:=expr}:若str已设定非空,则str不变,var=str,若str为空,则str=expr,var=expr,若str未设定则,str=expr,var=expr

var=${str?expr}:若str已设定,则var=str,否则输出expr至stderr

var=${str:?expr}:若str已设定非空,var=str,否则输出expr至stderr



七、其他

1. 绝对路径和相对路径

绝对路径:路径的写法[一定是由根目录/写起],例如:/usr/share/doc 这个目录

相对路径:路径的写法[不是由/写起],例如由/usr/share/doc 要到/usr/share/man底下时,可以写成:[cd ../man ] 这就是相对路径的写法

2.目录的相关操作

[.] 代表此层目录

[..] 代表上一层目录

[-] 代表前一个工作目录

[~] 代表[目前用户身份]所在的家目录

~account 代表account这个用户的家目录(account是个账号名称)

3.三个时间的概念

modification time(mtime): 当该档案的[内容数据]变更时,就会更新这个时间!内容数据指的是档案的内容,而不是档案的属性和权限。

status time(ctime): 当该档案的[状态(status)]改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间。

access time(atime): 当该档案的[内容被取用],就会更新这个读取时间(access)。举例来说,我们使用cat去读取/etc/man.config,就会更新档案的atime。

4.权限与指令的关系

(1)让用户能够进入目录成为[可工作目录]的基本权限为:

  •    可使用的指令:例如cd等变换工作目录的指令
  •    目录所需权限:用户对这个目录至少要拥有x权限
  •    额外需要:如果用户想要在这个目录内利用ls查阅文件名,则用户对此还需要r的权限
(2)用户在某个目录内读取一个档案的基本权限为:
  • 可使用的指令:例如cat, less, more 等等
  • 目录所需权限:用户对这个目录至少要拥有x权限
  • 档案所需权限:使用者对这个档案至少要拥有r权限
(3)让使用者可以修改一个档案的基本权限为:
  • 可使用的指令:例如nano或未来要介绍的vi编辑器等
  • 目录所需权限:用户在该档案所在目录至少要拥有x权限
  • 档案所需权限:使用者对这个档案至少要有w,x权限
(4)让使用者可以建立档案的基本权限为:
  • 目录所需权限:用户在该目录至少需要w, x权限。重点在w权限
(5)让用户进入某个目录并且执行该目录下某个指令的基本权限为:
  • 目录所需权限:用户在该目录至少需要有x权限
  • 档案所需权限:使用者在该档案至少需要有x权限
5. 特殊权限
(1)SUID:当s这个标记出现在档案拥有者的x权限上时,此时就被称为Set UID,简称为SUID的特殊权限。基本上SUID有这样的限制和功能:
  •    SUID权限仅对二进制程序有效
  •    执行者对该程序需要有x权限才可执行
  •    本权限只在执行该程序的过程中有效
  •    执行者将具有该程序拥有者的权限
(2)SGID:当s这个标记出现在档案群组的x权限上时,此时就被称为Set GID,简称为SGID。与SUID不同,SGID可以针对档案或目录来设定,SGID有如下功能:
  • SGID对二进制程序游泳
  • 程序执行者对该程序来说,需具备x的权限
  • 执行者在执行的过程中将会获得该程序群组的支持
        注意,当一个目录设定了SGID权限之后,它将具有如下的功能:
  • 用户对此目录具有r与x权限时,该用户能够进入该目录
  • 用户在目录下的有效群组将会变成该目录的群组
  • 用途:若用户在此目录具有w权限,则使用者建立的新档案,该新档案的群组与此目录群组相同
(3)SBIT:SBIT目前只针对目录有效,SBIT对目录的作用是:
  • 当用户对此目录具有w,x权限时,即具有写入权限时;
  • 当用户在此目录建立档案或目录时,仅有自己和root才有权限删除该档案

权限的设定 ,如 2770 。第一个数字表示的是特殊权限,4表示SUID,2为SGID,1为SBIT

6  关于减号 -的用途

在管线命令当中,常常会使用到前一个指令的stdout作为这次的stdin,某些指令需要用到文件名(例如tar)来进行处理时,该stdin与stdout可以利用减号‘-’来替代,举例来说:

  • tar -cvf - /home | tar -xvf -
上面这个例子是说:[我将/home 里面的档案给他打包,但打包的数据不是纪录到档案,而是传送到stdout;经过管线后,将tar -cvf - /home 传送到后面的tar -xvf -]。后面的这个 - 则是取用前一个指令的stdout, 因此,我们就不需要使用file了 。

7 系统的开机流程

(1)加载BIOS的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置

(2)读取并执行第一个开机装置内MBR的boot Loader(即grub , spfdisk等程序)

(3)依据boot loader的设定加载Kernel , Kernel 会开始侦测硬件与加载驱动程序

(4)在硬件驱动成功后,Kernel会主动呼叫init程序,而init会取得run-level信息

(5)init 执行 /etc/rc.d/rc.sysinit 档案来准备软件执行的作业环境(如网络,时区等)

(6)init 执行 run-level 的各个服务之启动(script 方式)

(7)init 执行 /etc/rc.d/rc.local 档案

(8)init 执行终端机仿真程序 mingetty 来启动login程序,最后就等待用户登入啦。


8  如何查看与修改 runlevel

查看很简单,只要输入 [runlevel] 就可以得知。而如果要修改目前的runlevel,可以直接输入 init [level] 例如要去到 runlevel 3可以: [init 3]即可。如果想要每次开机都设定固定的runlevel ,那么可以修改 /etc/inittab 这个档案! 将里面的这一行改成 : [id:3:initdefault:] 即可

八、综合案例

1. 管理员root讲自己的.bashrc文件复制给dmtsai,并且允许他修改。

cp ~/.bashrc ~dmtsai/bashrc  #复制档案
chown dmtsai:users ~dmtsai/bashrc  #修改档案所有者


2.在/temp下建立一个目录,这个目录名为canghong,并且拥有着为canghong,群组为users,此外,任何人都可以进入该目录浏览,但是只有canghong可以进行修改。
mkdir /tmp/canghong  #创建目录
chown -R canghong.ch:users /tmp/canghong  #修改所有者
chmod -R 755 /tmp/canghong   #修改权限

3. 创建两个账号,分别是alex和arod,这两个账号共同支持一个名为project的群组。假设两个用户需要共同拥有ahome目录的开发权,且该目录不许其他人进入查阅,请问该权限的目录该如何设定

groupadd project  #增加新的群组
useradd -G project alex  #建立alex账号,且支持project
useradd- G project arod  #建立arod账号,且支持project
mkdir ahome   #建立项目目录
chgrp project ahome #修改目录的群组
chmod 770 ahome  #修改目录的权限
chmod 2770 ahome  #给目录加入SGID权限

4 备份 /srv/myproject 这个目录内的数据至/backups这个目录下。然后进行还原

mkdir /backups        #创建目录
dump -0u -j -f /backups/myproject.dump /src/myproject       #开始进行dump,进行level 0的完整备份
cp -a /var/log /srv/myproject #假设现在原文件加大了
dump -1u -j -f /backups/myproject.dump.1 /src/myproject #将/srv/myproject以level1来进行备份
还原 

umount /dev/hdc6  #先将/srv/myproject卸除
mkfs -t ext3 /dev/hdc6 #将partition重新格式化
mount -a  #重新挂载原本的partition
cd /srv/myproject  
restore -r -f /backups /myproject.dump #将完整备份的level 0的档案 /backups/myproject.dump 还原回来
cd /src/myproject
restore -r -f /backups/myproject.dump.1 #将后续的level 1的备份也还原


5 以ls -l配合grep 找出 /etc/ 底下文件类型为链接文件属性的文件名

由于ls -l 列出连接档时标头会有[l] ,因此使用如下的指令即可找出结果:

ls -l /etc | grep '^l'

6 假设有一个指令程序,名称为: ping.sh 这个档名。我想要让系统每3分钟执行这个档案一次,但是偏偏这个档案会有很多讯息显示出来,所以我的root账号每天都会收到差不多四百多封的信件。请问如何设定比较好?

这个涉及数据流重导向的问题,我们可以将他导入档案或者直接丢弃。如果讯息不重要的话,那么就予以丢弃,如果讯息很重要的话,才将他保留。假设今天这个命令不重要,所以将他丢弃掉,因此,可以这样写

*/3 * * * * root /usr/local/ping.sh > /dev/null 2>&1


7 查询 crond这个daemon的PID和他的PRI值

ps aux | grep crond


8 通过安装、设定、启动、观察与管理防火墙机制,完整地了解一个服务的启动与观察

rpm -q telnet-server   #查看telnet是否安装
yum install telnet-server   #安装telnet
chkconfig --list telnet      #查看配置文件 telnet,只有on或off者为super daemon
ll /etc/xinetd.d/telnet
grep "^telnet" /etc/services
chconfig telnet on ;chkconfig --list telnet #改变telnet,让其启动
/etc/init.d/xinetd restart    #重启
netstat -tlnp | grep xinetd
grep server /etc/xinetd.d/telnet  #找到telnet的主程序是哪一支
vim /etc/hosts.allow  #指定开放的网域
   in.telnetd:.edu.tw
vim /etc/hosts.deny   #指定封闭的网域
  in.telnetd:ALL



9  在没有网络的前提下,想要安装一个名为pam-devel的软件,你手边只有原版光盘,如何是好?

可以通过挂载原版光盘来进行数据的查询与安装。将原版光盘放入光驱,底下我们尝试将光盘挂载到/media当中

mount /dev/cdrom /media  #挂载光盘
find /media -name 'pam-devel*'   #找出档案的实际路径
rpm -ivh pam-devel... --test        #测试此软件是否具有相依性
rpm -ivh pam-devel....               #直接安装
umount /dev/cdrom                  #卸除光盘






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值