linux学习笔记

Linux自己的文件数据: /usr/share/doc (在你的Linux系统中)

tab  补全命令,提示
ctrl+c  结束指令
ctrl+d   exit
shift+PageUP   down翻页
--help  指令语法
man page     DATE(   1  )里面的数字即

1 使用者在shell环境中可以操作的指令或可可执行文件
2 系统核心可调用的函数与工具等
3 一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
4 设备文件的说明,通常在/dev下的文件
5 配置文件或者是某些文件的格式
6 游戏(games)
7 惯例与协定等,例如Linux文件系统、网络协定、ASCII code等等的说明
8 系统管理员可用的管理指令
9 跟kernel有关的文件

/string  向“下”搜寻string
?string  向“上”搜寻 string 这个字串
可以 n 继续往下查询,用 N 往上查询


将数据同步写入硬盘中的指令: sync
惯用的关机指令: shutdown
重新开机,关机: reboot, halt, poweroff

切换各个不同的终端机接口6个,默认第一个Xwin
切换的方式为 Crtl + Alt + [F1]~[F6]


Linux是 多用户 多任务 的系统
文件可存取的身份分别是 owner/group/others三种身份各有 read/write/execute 


/etc/passwd    帐号与一般身份使用者相关信息
/etc/shadow    个人的密码
/etc/group     群 组名称

ls -al         列出所有的文件详细的权限与属性(包含隐藏文件)

第一个字符代表这个文件是“目录、文件或链接文件等等”:
    当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;正规文件(regular file )
        纯文本文件(ASCII)  cat  name
        二进制档(binary)cat本身就是
        数据格式文件(data)程序运行产生的特定格式的文件

    当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
    若是[ l ]则表示为链接文件(link file);  类似Windows系统下面的捷径
  /dev
    若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);/dev/sda看看
    若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备
    
    第一个属性为 [ s ] 数据接口文件(sockets) 最常在/run或/tmp目录中看到

    数据输送档(FIFO, pipe) [ p ] 主要的目的在解决多个程序同时存取一个文件所造成的错误问题

    *.sh : 脚本或批处理文件 (scripts)
    Z, .tar, .tar.gz, .zip, *.tgz: 经过打包的压缩文件
    .html, .php:网页相关文件    

1    +     3+        3+         3
        “rwx”    “rwx”       “rwx”
        个人      群组        其他人   为  ---  表示没有权限
[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)
                           不含删除该文件          可以被系统执行的权限
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
权限 节点  文件拥有者 拥有者所在群组  文件大小 。。。。。
      ||
表示有多少文件名链接到此节点


文件拥有者test1[rwx]可以在本目录中进行任何工作

而testgroup这个群组r-x的帐号,例如test2,test3亦可以进入本目录进行工作,但是不能
在本目录下进行写入的动作;

至于other的权限中[r--]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进
入此目录


chgrp :改变文件所属群组       chgrp [-R] dirname/filename ...
chown :改变文件拥有者        chown [-R] 帐号名称 文件或目录
                             chown [-R] 帐号名称:群组名称 文件或目录
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
                                      [4+2+1][4+0+1]
> r:4 > w:2 > x:1    改变权限为 -rwxr-xr-- chmod 754 test.sh 
也可以:  chmod u=rwx,g=rx,o=r filename
-rwxr-xr-x     chmod u=rwx,go=rx .bashrc
            chmod a+w .bashrc 所有人加上写权限


Linux文件长度限制:单一文件或目录的最大容许文件名为 255Bytes  英文255个 中文 128 


              /home/dmtsai       回到当前用户的主文件夹
cd:变换目录  cd ~dmtsai          cd ~                   cd -   前一个工作目录   
change dictionary
pwd  显示目前的目录      pwd -P 显示链接文件的真实路径
print working directory 

mkdir  创建一个新的目录
    mkdir -p 1/2/3   创建多层目录  没有-p会创建失败,提示前一级目录不存在
    mkdir -m 711 test  指定文件的权限
rmdir 删除一个空的目录   rm -rf dirname

echo $PATH    //环境变量 PATH   用冒号(:)来隔开
PATH="${PATH}:/root"     //添加环境变量

ls -a  全部的文件,连同隐藏文件( 开头为 . 的文件)一起列出来
   -l  长数据串行出,包含文件的属性与权限等等数据;
   -d :仅列出目录本身,而不是列出目录内的文件数据

cp [options] source1 source2 source3 .... directory
源文件有两个以上,则最后一个目的文件一定要是“目录”才行
    -a :相当于 -dr --preserve=all 的意思,除了权限相关参数外,还加入 SELinux 的属性, 
         links,xattr 等也复制了;(常用)
    -i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
    -r :递回持续复制,用于目录的复制行为;(常用)    
    -p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用); 
    
    -d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
        cp 链接文件 目标   会复制链接文件指向的文件,若需要复制链接文件则用-d

    -f :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;
    -l :进行硬式链接(hard link)的链接文件创建,而非复制文件本身;       !!!!实体链接
    -s :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;
    -u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
   ( update )

 rm [-fir] 文件或目录
     -f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
    -i :互动模式,在删除前会询问使用者是否动作
    -r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!

rm ./-aaa-   或 rm -- -aaa-        删除 -  开头的文件 如:  -**

指令前加上反斜线,可以忽略掉 alias 的指定选项


mv [options] source1 source2 source3 .... directory
    -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
    -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
    -u :若目标文件已经存在,且 source 比较新,才会更新 (update)


basename /etc/sysconfig/network    network

dirname /etc/sysconfig/network     /etc/sysconfig

文件内容查阅
    cat (concatenate)由第一行开始显示文件内容                       断行字符以 $
        -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;[tab]会以 ^I 
        -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
        -E :将结尾的断行字符 $ 显示出来;
        -n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
        -T :将 [tab] 按键以 ^I 显示出来;
        -v :列出一些看不出来的特殊字符


    tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
    nl 显示的时候,顺道输出行号!

    more 一页一页的显示文件内容  
        空白键 (space):代表向下翻一页;
        Enter :代表向下翻“一行”;
        :f :立刻显示出文件名以及目前显示的行数;
        /字串 :代表在这个显示的内容当中,向下搜寻“字串”这个关键字;
        b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用

    less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
        空白键 :向下翻动一页;
        [pagedown]:向下翻动一页;
        [pageup] :向上翻动一页;
        /字串 :向下搜寻“字串”的功能;
        ?字串 :向上搜寻“字串”的功能;
        n :重复前一个搜寻 (与 / 或 ? 有关!)
        N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
        g :前进到这个数据的第一行去;
        G :前进到这个数据的最后一行去 (注意大小写);
        q :离开 less 这个程序;
    head 只看头几行
         head -n 20 /etc/man_db.conf
            后面100行的数据都不打印
            head -n -100 /etc/man_db.conf
    tail 只看尾巴几行
        100行以后
         tail -n +100 /etc/man_db.conf
    前 20 行,再取后十行
    head -n 20 /etc/man_db.conf | tail -n 10

    od 以二进制的方式读取文件内容!
         od [-t TYPE] 文件
            a :利用默认的字符来输出;
            c :使用 ASCII 字符来输出
            d[size] :利用十进制(decimal)来输出数据,每个整数占用 size Bytes ;
            f[size] :利用浮点数值(floating)来输出数据,每个数占用 size Bytes ;
            o[size] :利用八进位(octal)来输出数据,每个整数占用 size Bytes ;
            x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size Bytes ;

        将/etc/issue这个文件的内容以8进位列出储存值与ASCII的对照表
        od -t oCc /etc/issue

touch
    -a :仅修订 access time;
    -c :仅修改文件的时间,若该文件不存在则不创建新文件;
    -d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
    -m :仅修改 mtime ;
    -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]

                                                        文件被创建的    
    创建一个空的文件;      status time (ctime)状态status)改变时权限与属性
    将某个文件日期修订为目前 (mtime 与 atime) modification time   access time
                                                 内容改变
    touch 文件名    三个时间 (atime/ctime/mtime) 都会更新为目前的时间
    touch -d "2 days ago" bashrc  将日期调整为两天前      

文件默认权限:umask  0022 被去掉的权限 r4w2x1
                    (-----w--w-)
                    (d----w--w-)
“文件”则默认“没有可执行( x )权限” 默认权限如下: -rw-rw-rw- 666
创建为“目录”   drwxrwxrwx 777

创建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
创建目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

设置 umask  :    umask 002


文件隐藏属性
    chattr(设置文件隐藏属性)  chattr [+-=][ASacdistu] 文件或目录名称
        + :增加某一个特殊参数,其他原本存在参数则不动。
        - :移除某一个特殊参数,其他原本存在参数则不动。
        = :设置一定,且仅有后面接的参数

        i :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”
                对于系统安全性有相当大的助益!只有 root 能设置此属性
        a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性

        A :当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,
        可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
        S :一般文件是非同步写入磁盘的(原理请参考[前一章sync](../Text/index.html#sync)的说明),如果加上 S 这个属性时,
        当你进行任何文件的修改,该更动会“同步”写入磁盘中。
        
        c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,
        但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
        d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份
        
        s :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,
        所以如果误删了,完全无法救回来了喔!
        u :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,
        可以使用来救援该文件喔!
        注意1:属性设置常见的是 a 与 i 的设置值,而且很多设置值必须要身为 root 才能设置
    

    lsattr (显示文件隐藏属性)  lsattr [-adR] 文件或目录
        -a :将隐藏文件的属性也秀出来;
        -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
        -R :连同子目录的数据也一并列出来!

文件特殊权限: (SUID, SGID, )SBIT
(rws   此处的s即为特殊权限  ) rwt
SUID    这个SUID只能运行在二进制的程序上(系统中的一些命令),不能用在脚本上(script),因为脚本还           是把很多的程序集合到一起来执行,而不是脚本自身在执行。同样,这个SUID也不能放到目录上,放上          也是无效的。
SGID     用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同

SBIT    任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与       
        root能够删除自己的目录或文件。

4 为 SUID   u+s    
2 为 SGID  g+s 
1 为 SBIT   o+t 
chmod 4755 filename
chmod g+s,o+t test

观察文件类型 file ~/.bashrc


指令文件名的搜寻
which [-a] command  
    -a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称
    
    which ifconfig  搜寻 ifconfig 这个指令的完整文件名

文件文件名的搜寻   主要是针对 /bin /sbin 下面的可执行文件
 whereis [-bmsu] 文件或目录名
    -l :可以列出 whereis 会去查询的几个主要目录而已
    -b :只找 binary 格式的文件
    -m :只找在说明文档 manual 路径下的文件
    -s :只找 source 来源文件
    -u :搜寻不在上述三个项目当中的其他特殊文件

    whereis ifconfig   请找出 ifconfig 这个文件名  


 locate [-ir] keyword   数据库来搜寻,每天执行一次,当天修改的当天搜索不到
    -i :忽略大小写的差异;
    -c :不输出文件名,仅计算找到的文件数量
    -l :仅输出几行的意思,例如输出五行则是 -l 5
    -S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
    -r :后面可接正则表达式的显示方式

locate -l 5 passwd    找出系统中所有与 passwd 相关的文件名,且只列出 5 个


updatedb   更新数据库    /etc/updatedb.conf 设置去搜寻系统硬盘内的文件名并
                        更新/var/lib/mlocate 内的数据库文件
locate  依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字文件名


find [PATH] [option] [action]
     /
    -mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;
    -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
    -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
    -newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名

find / -mtime 0     24 小时内有更动过内容 (mtime) 的文件列出
find /etc -newer /etc/passwd       /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出

    -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在
        /etc/passwd 里面与帐号名称对应的数字。这方面我们会在第四篇介绍。
    -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在
            /etc/group,相关的介绍我们会第四篇说明~
    -user name :name 为使用者帐号名称喔!例如 dmtsai
    -group name:name 为群组名称喔,例如 users ;
    -nouser :寻找文件的拥有者不存在 /etc/passwd 的人!
    -nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!
    当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,
    这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。

find /home -user dmtsai     搜寻 /home 下面属于 dmtsai 的文件
find / -nouser              搜寻系统中不属于任何人的文件
 
    -name filename:搜寻文件名称为 filename 的文件;
    -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:
                    c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB
                    还要大的文件,就是“ -size +50k ”
    -type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 设备文件 (b, c),
                目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
    -perm mode  :权限正好一样
    -perm -mode :权限为当前权限的文件或者比当前输入的要高的文件
    -perm /mode :搜寻文件权限“包含任一 mode 的权限”的文件,举例来说,我们搜寻
                  -rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------
                  也会被列出来,因为他有 -rw.... 的属性存在!

find / -name passwd         找出文件名为 passwd 这个文件
find / -name "*passwd*"     文件名包含了 passwd 这个关键字的文件
find /run -type s           找出 /run 目录下,文件类型为 Socket 的文件名有哪些
find / -perm /7000          搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
find /etc -size +50k -a -size -60k -exec ls -l {} \;  大小介于 50K 到 60K 之间的文件
                    -a 是 and             
                                        可去掉
find /etc -size +50k -a ! -user root  (-type f ) -exec ls -ld {} \; 
                        文件大小大于 50K 且文件所属人不是 root 的文件名
                         !代表不是后面的项目
find /etc -size +1500k -o -size 0     /etc下容量大于 1500K 以及容量等于 0 的文件
                        -o是或的意思

    -exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
find /usr/bin /usr/sbin -perm /7000 -exec ls -l  {} \  将上个范例找到的文件使用 ls -l 列出来~

{} 代表的是“由 find 找到的内容”,如上图所示,find 的结果会被放置到 {} 位置中;


   记录文件属性
EXT2(inode)文件系统  多区块群组(一个BOOTSECTOR+多个Block Group)
    Block Group = superBlock+文件系统描述+区块对应表+inode对应表+iNodeTable+DataBlock

    superBlock:记录此 filesystem 的整体信息inode/block的大小,总量、使用量、剩余量,以及文件
                系统的格式与相关信息等,一个 valid bit 数值  0已被挂载  1没有挂载。
    inode:记录文件的属性,容量  ,一个文件占用一个inode,数据所在的 block号码
            系统能够创建的文件数量与 inode 的数量有关。
    block:实际记录文件的内容,若文件太大时,会占用多个 block 

     block bitmap:记录block使用情况,哪些为空,非空
     inode bitmap 记录iNode使用情况,哪些为空,非空

    将 inode table 与 data block 称为数据存放区域
    其他例如 superblock、block bitmap 与 inode bitmap 等区段就被称为 metadata (中介数据)

dumpe2fs  查询 Ext 家族 superblock 信息的指令

数据的不一致Inconsistent状态  更新后metadata 不对应 实际数据存放区 (停电中断等)

日志式文件系统 (Journaling filesystem):为了避免上述提到的文件系统不一致的情况发生

非同步处理(asynchronously):修改内存数据以后将数据标记为Dirty,每隔一段时间将Dirty的数据写入硬盘
    PS:使用 sync 来强迫内存中设置为 Dirty 的文件回写到磁盘中


Linux VFS (Virtual Filesystem Switch):自动选择读取文件系统类型等方式进行读取

舍弃对 Linux 支持度最完整的 EXT 家族而改用 XFS 呢?   文件格式化慢

xfs文件系统=(data section)+一个文件系统活动登录区 (log section)以及一个实时运行区 (realtime section)
    数据区:包括inode/data block/superblock等     多个储存区群组 
          xfs 的 block 与 inode 有多种不同的容量可供设置,block 容量可由 512Bytes ~ 64K 调配
              由于内存控制的关系 (分页档pagesize 的容量之故) 最高可以使用block 大小为 4K,多了不给挂载
                inode 容量可由 256Bytes 到 2M   默认够用

     文件系统活动登录区:纪录文件系统的变化    可以指定外部的磁盘来作为日志区

     实时运行区:文件要被创建时找一个到数个的 extent 区块 等到分配完毕后再写入到 data section 
                 的 inode 与 block 去    磁盘阵列 extent 设置为与 stripe 一样大

     xfs_info  /路径      sunit 与 swidth 与磁盘阵列的 stripe    
                          查询 superblock 信息

    df [-ahikHTm] [目录或文件名]                     列出文件系统的整体磁盘使用量
        -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
        -k :以 KBytes 的容量显示各文件系统;
        -m :以 MBytes 的容量显示各文件系统;
        -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
        -H :以 M=1000K 取代 M=1024K 的进位方式;
        -T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
        -i :不用磁盘容量,而以 inode 的数量来显示
        df                                         显示全部
        df -Th   将容量结果以易读的容量格式显示出来         

        proc 文件系统挂载在内存(实体内存一半)

    du [-ahskm] 文件或目录名称            评估文件系统的磁盘使用量(文件大小)
        -a :列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。
        -h :以人们较易读的容量格式 (G/M) 显示;
        -s :列出总量而已,而不列出每个各别的目录占用容量;
        -S :不包括子目录下的总计,与 -s 有点差别。
        -k :以 KBytes 列出容量显示;
        -m :以 MBytes 列出容量显示;

符号链接   Symbolic link   捷径功能  源文件被删除之后,symbolic link 的文件会“开不了”
                        指向文件目录的数据文件的这一项,而不是数据对inode
                        Symbolic link 所创建的文件为一个独立的新的文件

实体链接 (hard link)  通过文件系统的 inode 链接来产生新文件名,删除其中之一对数据没影响修改会修改数据
                    hard link 只是在某个目录下新增一笔文件名链接到某 inode 号码的关连记录而已
                    不能跨 Filesystem 不能 link 目录
    ln [-sf] 来源文件 目标文件
        -s :如果不加任何参数就进行链接,那就是hard link,至于 -s 就是symbolic link
        -f :如果 目标文件 存在时,就主动的将目标文件直接移除后再创建!

lsblk [-dfimpt] [device]       list block device  列出系统上的所有磁盘列表
    -d :仅列出磁盘本身,并不会列出该磁盘的分区数据
    -f :同时列出该磁盘内的文件系统名称
    -i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
    -m :同时输出该设备在 /dev 下面的权限数据 (rwx 的数据)
    -p :列出该设备的完整文件名!而不是仅列出最后的名字而已。
    -t :列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等

blkid      列出设备的 UUID 等参数 
xfs_admin     列出设备的 UUID 等参数

parted 列出磁盘的分区表类型与分区信息
    parted device_name print     列出/dev/sda3磁盘的相关数据
    parted /dev/sda3 print

     gdisk/fdisk    GPT/MBR    gdisk 设备名称
     partprobe -s      更新 Linux 核心的分区表信息

mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \ [-r parms] 设备名称
    -b :后面接的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k 喔!
    -d :后面接的是重要的 data section 的相关参数值,主要的值有:
        agcount=数值 :设置需要几个储存群组的意思(AG),通常与 CPU 有关
        agsize=数值 :每个 AG 设置为多少容量的意思,通常 agcount/agsize 只选一个设置即可
        file :指的是“格式化的设备是个文件而不是个设备”的意思!(例如虚拟磁盘)
        size=数值 :data section 的容量,亦即你可以不将全部的设备容量用完的意思
        su=数值 :当有 RAID 时,那个 stripe 数值的意思,与下面的 sw 搭配使用
        sw=数值 :当有 RAID 时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)
        sunit=数值 :与 su 相当,不过单位使用的是“几个 sector(512Bytes大小)”的意思
        swidth=数值 :就是 su*sw 的数值,但是以“几个 sector(512Bytes大小)”来设置
        -f :如果设备内已经有文件系统,则需要使用这个 -f 来强制格式化才行!
    -i :与 inode 有较相关的设置,主要的设置值有:
        size=数值 :最小是 256Bytes 最大是 2k,一般保留 256 就足够使用了!
        internal=[0|1]:log 设备是否为内置?默认为 1 内置,如果要用外部设备,使用下面设置
        logdev=device :log 设备为后面接的那个设备上头的意思,需设置 internal=0 才可!
        size=数值 :指定这块登录区的容量,通常最小得要有 512 个 block,大约 2M 以上才行!
    -L :后面接这个文件系统的标头名称 Label name 的意思!
    -r :指定 realtime section 的相关设置值,常见的有:
        extsize=数值 :就是那个重要的 extent 数值,一般不须设置,但有 RAID 时,
        最好设置与 swidth 的数值相同较佳!最小为 4K 最大为 1G 。

mkfs.xfs -f -d agcount=2,sunit=512,swidth=3584 -r extsize=1792k /dev/vda4

mkfs.ext4 [-b size] [-L label] 设备名称
    -b :设置 block 的大小,有 1K, 2K, 4K 的容量,
    -L :后面接这个设备的标头名称。

 
文件系统检验                被检查的 partition 务必不可挂载到系统上
xfs_repair [-fnd] 设备名称
    -f :后面的设备其实是个文件而不是实体设备
    -n :单纯检查并不修改文件系统的任何数据 (检查而已)
    -d :通常用在单人维护模式下面,针对根目录 (/) 进行检查与修复的动作!很危险!
    不要随便使用

fsck.ext4 [-pf] [-b superblock] 设备名称
    -p :当文件系统在修复时,若有需要回复 y 的动作时,自动回复 y 来继续进行修复动作。
    -f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入
    细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标啰!
    -D :针对文件系统下的目录进行最优化配置。
    -b :后面接 superblock 的位置!一般来说这个选项用不到。但是如果你的 superblock 
    因故损毁时,通过这个参数即可利用文件系统内备份的 superblock 来尝试救援。一般来说
    ,superblock 备份在:1K block 放在 8193, 2K block 放在 16384, 4K block 放在 32768

fsck.ext4 -b 32768 /dev/vda5  找出刚刚创建的 /dev/vda5 的另一块 superblock,并据以检测系统
 

文件系统挂载与卸载
    单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
    单一目录不应该重复挂载多个文件系统;
    要作为挂载点的目录,理论上应该都是空目录才是

mount [-l]   显示目前挂载的信息
mount [-t 文件系统] LABEL='' 挂载点
mount [-t 文件系统] UUID='' 挂载点
mount [-t 文件系统] 设备文件名 挂载点

    -a :依照配置文件 [/etc/fstab](../Text/index.html#fstab) 的数据将所有未挂载的磁盘都挂载上来
    -l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!
    -t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,
    reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
    -n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运行。
    但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。
    -o :后面可以接一些挂载时额外加上的参数!比方说帐号、密码、读写权限等:
    async, sync: 此文件系统是否使用同步写入 (sync) 或非同步 (async) 的
    内存机制,请参考[文件系统运行方式](../Text/index.html#harddisk-filerun)。默认为 async。
    atime,noatime: 是否修订文件的读取时间(atime)。为了性能,某些时刻可使用 noatime
    ro, rw: 挂载文件系统成为只读(ro) 或可读写(rw)
    auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)
    dev, nodev: 是否允许此 filesystem 上,可创建设备文件? dev 为可允许
    suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?
    exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?
    user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说,
    mount 仅有 root 可以进行,但下达 user 参数,则可让
    一般 user 也能够对此 partition 进行 mount 。
    defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
    remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!

umount [-fn] 设备文件名或挂载点
    -f :强制卸载!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
    -l :立刻卸载文件系统,比 -f 还强!
    -n :不更新 /etc/mtab 情况下卸载

mknod 设备文件名 [bcp] [Major] [Minor]
    b :设置设备名称成为一个周边储存设备文件,例如磁盘等;
    c :设置设备名称成为一个周边输入设备文件,例如鼠标/键盘等;
    p :设置设备名称成为一个 FIFO 文件;
    Major :主要设备代码;
    Minor :次要设备代码;

修改 ext4 的 label name 与 UUID
tune2fs [-l] [-L Label] [-U uuid] 设备文件名
    -l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~
    -L :修改 LABEL name
    -U :修改 UUID 啰!
    dumpe2fs -h /dev/vda5
    tune2fs -L vbird_ext4 /dev/vda5


dd if=/dev/zero of=/srv/loopdev bs=1M count=512  创建文件
mkfs.xfs -f /srv/loopdev                        格式化


parted [设备] [指令 [参数]]
    新增分区:mkpart
    显示分区:print
    删除分区:rm [partition]

    parted /dev/vda print  以 parted 列出目前本机的分区表数据
    //   parted /dev/vda unit mb print  固定显示列表大小的单位
    parted /dev/sda mklabel gpt    MBR 分区表变成 GPT 分区表
 parted /dev/vda mkpart primary fat32 36.0GB 36.5GB  创建一个 512MB 的分区来格式化为 vfat
                                      起始位置  结束位置

*.zip zip 程序压缩的文件;
*.gz gzip 程序压缩的文件;
*.bz2 bzip2 程序压缩的文件;
*.xz xz 程序压缩的文件;


gzip [-cdtv#] 文件名             zcat/zmore/zless读取压缩文件的文本内容
    -c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
    -d :解压缩的参数;
    -t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
    -v :可以显示出原文件/压缩文件的压缩比等信息;
    -# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6

更好的压缩比
bzip2 [-cdkzv#] 文件名            bzcat 文件名.bz2  读取压缩文件的文本内容
    -c :将压缩的过程产生的数据输出到屏幕上!
    -d :解压缩的参数
    -k :保留原始文件,而不会删除原始的文件喔!
    -z :压缩的参数 (默认值,可以不加)
    -v :可以显示出原文件/压缩文件的压缩比等信息;
    -# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!

    bzip2 -v /tmp/services      /tmp/services 以 bzip2 压缩
    bzip2 -d services.bz2      解压

xz [-dtlkc#] 文件名             xcat 文件名.xz
    -d :就是解压缩啊!
    -t :测试压缩文件的完整性,看有没有错误
    -l :列出压缩文件的相关信息
    -k :保留原本的文件不删除~
    -c :同样的,就是将数据由屏幕上输出的意思!
    -# :同样的,也有较佳的压缩比的意思!


打包指令: tar


XFS 文件系统备份 
xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份文件] 待备份数据
    -L :xfsdump 会纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明
    -M :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明
    -l :是 L 的小写,就是指定等级~有 0~9 共 10 个等级喔! (默认为 0,即完整备份)
    -f :有点类似 tar 啦!后面接产生的文件,亦可接例如 /dev/st0 设备文件名或其他一般文件文件名等
    -I :从 /var/lib/xfsdump/inventory 列出目前备份的信息状态
用 xfsdump 进行累积备份 (Incremental backups)  
    一定得要进行过完整备份后 (-l 0) 才能够继续有其他累积备份
 

xfsrestore -I <==用来察看备份文件数据
xfsrestore [-f 备份文件] [-L S_label] [-s] 待复原目录 <==单一文件全系统复原
xfsrestore [-f 备份文件] -r 待复原目录 <==通过累积备份文件来复原系统
xfsrestore [-f 备份文件] -i 待复原目录 <==进入互动模式
    -I :跟 xfsdump 相同的输出!可查询备份数据,包括 Label 名称与备份时间等
    -f :后面接的就是备份文件!企业界很有可能会接 /dev/st0 等磁带机!我们这里接文件名!
    -L :就是 Session 的 Label name 喔!可用 -I 查询到的数据,在这个选项后输入!
    -s :需要接某特定目录,亦即仅复原某一个文件或目录之意!
    -r :如果是用文件来储存备份数据,那这个就不需要使用。如果是一个磁带内有多个文件,
    需要这东西来达成累积复原
    -i :进入互动模式,进阶管理员使用的!一般我们不太需要操作它!
            S_label     session label 是“boot_all”啰
xfsrestore -f /srv/boot.dump -L boot_all /boot   


mkisofs  创建镜像文件


vi 
    一般指令模式 (command mode) 默认的模式
        5↑  向上5行  ctrl+f/b翻页    ctrl+d/u翻半页  Hmoe/End 本行第一/最后
        G 移动到这个文件的最后一列(常用)
        x 为向后删除一个字符  X 为向前删除一个字符  nx后删除 n 个字符
        dd 删除光标所在的那一整列(常用)  ndd
        d1G 删除光标所在到第一列的所有数据   dG删除光标所在到最后一列的所有数据
        d$ 删除光标所在处,到该列的最后一个字符  d0   到最前
        yy 复制光标所在的那一列(常用)  nyy
        y1G                            yG 
        y0  y$   复制光标所在的那个字符到该列行首 尾
        p, P  光标下一列贴上  光标上一列  粘贴
        u 复原前一个动作。(常用)
        [Ctrl]+r 重做上一个动作。(常用)
        .   重复前一个动作
    编辑模式 (insert mode)  “i, I, o, O, a, A,  r, R”等任何一个进入编辑模式
    命令行命令模式 (command-line mode)  “ : / ? ”三个中的任何一个
        100,200s/vbird/VBIRD/g  100 到 200 列之间搜寻vbird,用VBIRD替换
        1,$s/word1/word2/g   从第一列到最后一列寻找 word1 字串 word2替换
                         gc   给个确认提示
        :w [filename]   储存成另一个文件   n1,n2 w [filename] 将 n1 到 n2 储存成 filename 这个文件。
        :r [filename]   读入另一个文件的数据
        ! command 暂时离开 vi 到命令行界面下执行 command 的显示结果
        set nu显示行号,设置之后,会在每一列的字首显示该列的行号  set nonu
        :wq  退出编译器
        :wq! 强制写入

vim 会主动的创建 /tmp/vitest/.man_db.conf.swp 的暂存盘


多文件编辑
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的打开的所有文件
 
:sp[filename]   窗口分区   [ctrl]+w+↑”及“[ctrl]+w+↓”  两个窗口之间移动


自动补齐
[ctrl]+x -> [ctrl]+n 通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐
[ctrl]+x -> [ctrl]+f 以当前目录内的“文件名”作为关键字,予以补齐
[ctrl]+x -> [ctrl]+o 以扩展名作为语法补充,以 vim 内置的关键字,予以补齐


type [-tpa] name
    :不加任何选项与参数时,type 会显示出 name 是外部指令还是 bash 内置指令
    -t :当加入 -t 参数时,type 会将 name 以下面这些字眼显示出他的意义:
    file :表示为外部指令;
    alias :表示该指令为命令别名所设置的名称;
    builtin :表示该指令为 bash 内置的指令功能;
    -p :如果后面接的 name 为外部指令时,才会显示完整文件名;
    -a :会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含 alias


定义 name=“string”    变量类型默认为“字串”

变量的取用:echo $variable  
    双引号内的特殊字符如 $     eg:var="lang is$LANG"   lang is zh_TW.UTF-8
                                var='lang is $LANG'    lang is $LANG
    ${name} 取值
                    取得版本信息
    cd /lib/modules/$(uname -r)/kernel
取消变量的方法为使用 unset :“unset 变量名称”   

export   自订变量转成环境变量   env 与 set 现在知道有所谓的环境变量与自订变量

export 变量名称 子程序获取不到bash自定义的变量,需要用这个设置成全局变量


locale -a   语系

变量键盘读取
read [-pt] variable
    -p :后面可以接提示字符!
    -t :后面可以接等待的“秒数!”这个比较有趣~不会一直等待使用者啦!
    
    read atest    然后输入This is a test  取值  echo ${atest}
    提示使用者 30 秒内输入自己的大名,将该输入字串作为名为 named 的变量内容
    read -p "Please keyin your name: " -t 30 named


declare [-aixr] variable    宣告变量的类型
    -a :将后面名为 variable 的变量定义成为阵列 (array) 类型
    -i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
    -x :用法与 export 一样,就是将后面的 variable 变成环境变量;
    -r :将变量设置成为 readonly 类型,该变量不可被更改内容,也不能 unset

设置上面提到的 var[1] ~ var[3] 的变量   
    var[1]="small min"  ,var[2]="big min" ,  var[3]="nice min"
    echo "${var[1]}, ${var[2]}, ${var[3]}"

限制用户使用资源
ulimit [-SHacdfltu] [配额]
    -H :hard limit ,严格的设置,必定不能超过这个设置的数值;
    -S :soft limit ,警告的设置,可以超过这个设置值,但是若超过则有警告讯息。
    在设置上,通常 soft 会比 hard 小,举例来说,soft 可设置为 80 而 hard
    设置为 100,那么你可以使用到 90 (因为没有超过 100),但介于 80~100 之间时,
    系统会有警告讯息通知你!
    -a :后面不接任何选项与参数,可列出所有的限制额度;
    -c :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),
    这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。
    -f :此 shell 可以创建的最大文件大小(一般可能设置为 2GB)单位为 KBytes
    -d :程序可使用的最大断裂内存(segment)容量;
    -l :可用于锁定 (lock) 的内存量
    -t :可使用的最大 CPU 时间 (单位为秒)
    -u :单一使用者可以使用的最大程序(process)数量。


命令别名与历史命令
alias lm='ls -al'  取别名
unalias lm

history [- ]
    n :数字,意思是“要列出最近的 n 笔命令列表”的意思!
    -c :将目前的 shell 中的所有 history 内容全部消除
    -a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,
    则默认写入 ~/.bash_history
    -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
    -w :将目前的 history 记忆内容写入 histfiles 中!


万用字符:::
    * 代表“ 0 个到无穷多个”任意字符
    ? 代表“一定有一个”任意字符
    [ ]同样代表“一定有一个在括号内”的字符(非任意字符)。例如 [abcd] 代表“一定有一
        个字符, 可能是 a, b, c, d 这四个任何一个”
    [ -]若有减号在中括号内时,代表“在编码顺序内的所有字符”。例如 [0-9] 代表 0 到 9 之
        间的所有数字,因为数字的语系编码是连续的!
    [^]若中括号内的第一个字符为指数符号 (^) ,那表示“反向选择”,例如 [^abc] 代表
        一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
    # 注解符号:这个最常被使用在 script 当中,视为说明!在后的数据均不执行
    \ 跳脱符号:将“特殊字符或万用字符”还原成一般字符
    | 管线 (pipe):分隔两个管线命令的界定(后两节介绍);
    ; 连续指令下达分隔符号:连续性命令的界定 (注意!与管线命令并不相同)
    ~ 使用者的主文件夹
    $ 取用变量前置字符:亦即是变量之前需要加的变量取代值
    & 工作控制 (job control):将指令变成背景下工作
    ! 逻辑运算意义上的“非” not 的意思!
    / 目录符号:路径分隔的符号
    >, >> 数据流重导向:输出导向,分别是“取代”与“累加”
    <, << 数据流重导向:输入导向 (这两个留待下节介绍)
    ' ' 单引号,不具有变量置换的功能 ($ 变为纯文本)
    " " 具有变量置换的功能! ($ 可保留相关功能)

    $(命令)  命令为可以先执行的指令,亦可使用

    () 在中间为子 shell 的起始与结束
    { } 在中间为命令区块的组合!

1> :以覆盖的方法将“正确的数据”输出到指定的文件或设备上;
1>>:以累加的方法将“正确的数据”输出到指定的文件或设备上;
2> :以覆盖的方法将“错误的数据”输出到指定的文件或设备上;
2>>:以累加的方法将“错误的数据”输出到指定的文件或设备上;

cmd1 && cmd2   若 cmd1 执行完毕且正确执行则开始执行 cmd2
cmd1 || cmd2    若 cmd1 执行完毕且正确执行,则 cmd2 不执行 cmd1完毕且为错误执行 cmd2

撷取命令       一段数据经过分析后,取出我们所想要的
  cut, grep

cut -d'分隔字符' -f fields      cut -d ':' -f 5   cut -d ':' -f 3,5   第 3 与第 5 列
cut -c 字符区间 
    -d :后面接分隔字符。与 -f 一起使用;
    -f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
    -c :以字符 (characters) 的单位取出固定字符区间;


grep [-acinv] [--color=auto] '搜寻字串' filename
    -a :将 binary 文件以 text 文件的方式搜寻数据
    -c :计算找到 '搜寻字串' 的次数
    -i :忽略大小写的不同,所以大小写视为相同
    -n :顺便输出行号
    -v :反向选择,亦即显示出没有 '搜寻字串' 内容的那一行!
    --color=auto :可以将找到的关键字部分加上颜色的显示喔!
  grep 'root' 有出现 root 的那一行就取出来
   last ;grep 'root' ;cut -d ' ' -f 1 在 last 的输出讯息中,只要有 root 就取出,并且仅取第一栏


排序命令
sort [-fbMnrtuk] [file or stdin]
    -f :忽略大小写的差异,例如 A 与 a 视为编码相同;
    -b :忽略最前面的空白字符部分;
    -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
    -n :使用“纯数字”进行排序(默认是以文字体态来排序的);
    -r :反向排序;
    -u :就是 uniq ,相同的数据中,仅出现一行代表;
    -t :分隔符号,默认是用 [tab] 键来分隔;
    -k :以那个区间 (field) 来进行排序的意思

uniq [-ic]
    -i :忽略大小写字符的不同;
    -c :进行计数

 wc [-lwm]
    -l :仅列出行;
    -w :仅列出多少字(英文单字);
    -m :多少字符;

双向重导向     同时将数据流分送到文件去与屏幕
tee [-a] file
    -a :以累加 (append) 的方式,将数据加入 file 当中!

 

su -username  切换用户   切换root可以 su即可,但是环境变量不会改变,因此需要用 su -

//切换身份来进行某项任务

sudo 配置/etc/sudoers   配置用 visudo    !表示禁止执行的命令  用 ,  分隔多个命令

sudo [-b] [-u 新使用者帐号]

    -b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
    -u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root

你想要以 sshd 的身份在 /tmp 下面创建一个名为 mysshd 的文件

sudo -u sshd touch /tmp/mysshd

[root@study ~]# visudo
User_Alias ADMINS = pro1, pro2, pro3, myuser1
ADMINS ALL=(root) /bin/su -

上述的 pro1, pro2, pro3, myuser1 这四个人,只要输入“ sudo su - ”并且输入“自己的密码”后 变成 root 

 

特殊的 shell, /sbin/nologin     shell 的用户即使有了密码也无法登陆  指的仅是无法使用 bash 或其他 shell登陆系统

利用 /etc/nologin.txt 自定义提示语

 

 w 或 who    目前已登陆在系统使用者

 lastlog     每个帐号的最近登陆的时间  会去读取 /var/log/lastlog 文件

 

使用者对谈: write, mesg, wall

 write 使用者帐号 [使用者所在终端接口]

who
vbird1 tty3 2015-07-22 01:55 <==有看到 vbird1 在线上
root tty4 2015-07-22 01:56

write vbird1 pts/2

内容 //[crtl]-d 来结束输入

mesg n    拒绝消息   mesg y

wall "I will shutdown my linux server..."    (广播)

 

RAID-0 (等量模式, stripe):性能最佳    先切出等量的区块,平均等量放到每个磁盘

                           只要有任何一颗磁盘损毁,所有数据都会遗失而无法读取

RAID-1 (映射模式, mirror):完整备份  总容量会是全部磁盘容量的一半,读性能高,写入差

RAID 1+0,RAID 0+1组合使用   不需要经过计算的striping(写入)  读写性能也比其他的 RAID 等级好太多了

 

RAID-5 至少需要三颗以上的磁盘才能够组成这种类型的磁盘阵列  写入类似 RAID-0 

写入(striping)过程 加入一个同位检查数据 (Parity)  这个数据会记录其他磁盘的备份数据

原本的 3 颗磁盘只会剩下 (3-1)=2 颗磁,损毁的磁盘数量大于等于两颗数据就损毁   读性能高,写较低

RAID 6 使用两颗磁盘的容量作为 parity 的储存  允许出错的磁盘数量就可以达到两颗

项目             RAID0 RAID1 RAID1-0 RAID5 RAID6
最少磁盘数         2     2     4       3     4
最大容错磁盘数     无    n-1    n/2      1     2
数据安全性      完全没有 最佳    最佳    好   比RAID5好
理论写入性能       n      1      n/2    

at,一种是突发性的,就是这次做完以后就没有的那一种   要有 atd 这个服务支持

crontab,一种是例行性的,就是每隔一定的周期要来办的事项    crond服务支持

[root@study ~]# systemctl restart atd # 重新启动 atd 这个服务
[root@study ~]# systemctl enable atd # 让这个服务开机就自动启动
[root@study ~]# systemctl status atd # 查阅一下 atd 目前的状态
/etc/at.allow    在这个文件中的使用者才能使用 at 
/etc/at.deny 


at [-mldv] TIME                最好使用绝对路径
-m :当 at 的工作完成后,即使没有输出讯息,亦以 email 通知使用者该工作已完成。
-l :at -l 相当于 atq,列出目前系统上面的所有该使用者的 at 调度;
-d :at -d 相当于 atrm ,可以取消一个在 at 调度中的工作;
-v :可以使用较明显的时间格式列出 at 调度中的工作列表;
-c :可以列出后面接的该项工作的实际指令内容

TIME:时间格式,这里可以定义出“什么时候要进行 at 这项工作”的时间,格式有:

再过五分钟后,将 /root/.bashrc 寄给 root 自己
at now + 5 minutes; /bin/mail -s "testing at job" root ;  /root/.bashrc;
job 2 at Thu Jul 30 19:35:00 2015
# 上面这行信息在说明,第 2 个 at 工作将在 2015/07/30 的 19:35 进行!
# 而执行 at 会进入所谓的 at shell 环境,让你下达多重指令等待运行!

将上述的第 2 项工作内容列出来查阅
at -c 2
#!/bin/sh <==就是通过 bash shell 的啦!
# atrun uid=0 gid=0
# mail root 0
umask 22
....

查询目前主机上面有多少的 at 工作调度
atq
将上述的第 3 个工作移除
atrm  3



/etc/cron.allow        /etc/cron.allow 比 /etc/cron.deny 要优先
/etc/cron.deny
创建工作调度之后,该项工作就会被纪录到/var/spool/cron/ 

fork and exec:程序调用的流程

程序都会借由父程序以复制 (fork)的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec
 的方式来执行实际要进行的程序,最终就成为一个子程序的存在

 Linux 下以文字界面登陆,在屏幕当中显示错误讯息后就挂了
 [Alt]+[F1].....[F7] 来切换到其他的终端机界面
 ps -aux 找出刚刚的错误程序,然后kill

工作管理 (job control)
 直接将指令丢到背景中“执行”的 &
tar -zpcf /tmp/etc.tar.gz /etc &
tar -zpcf /tmp/etc.tar.gz /etc; /tmp/log.txt  输出信息重定向到/tmp/log.txt 

观察目前的背景工作状态:
jobs [-lrs]
-l :除了列出 job number 与指令串之外,同时列出 PID 的号码;
-r :仅列出正在背景 run 的工作;
-s :仅列出正在背景当中暂停 (stop) 的工作

将背景工作拿到前景来处理
fg %jobnumber
%jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!  


[root@study ~]# find / -perm /7000 > /tmp/text.txt
# 此时,请立刻按下 [ctrl]-z 暂停!
[3]+ Stopped find / -perm /7000 > /tmp/text.txt
jobs ; bg %3 ; jobs  
[3] Running find / -perm /7000 > /tmp/text.txt &


kill -signal %jobnumber
kill -l
-l :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?
signal :代表给予后面接的那个工作什么样的指示啰!用 man 7 signal 可知:
-1 :重新读取一次参数的配置文件 (类似 reload);
-9 :立刻强制删除一个工作;
-15:以正常的程序方式终止一项工作。与 -9 是不一样的。

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


 ps aux ;==观察系统所有的程序数据
 ps -lA ;==也是能够观察所有系统的数据
 ps axjf ;==连同部分程序树状态
-A :所有的 process 均显示出来,与 -e 具有同样的效用;
-a :不与 terminal 有关的所有 process ;
-u :有效使用者 (effective user) 相关的 process ;
x :通常与 a 这个参数一起使用,可列出较完整信息。
输出格式规划:
l :较长、较详细的将该 PID 的的信息列出;
j :工作的格式 (jobs format)
-f :做一个更为完整的输出。

ps -l  只能查阅自己 bash 程序   有'-'这个符号

F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:
若为 4 表示此程序的权限为 root ;
若为 1 则表示此子程序仅进行复制(fork)而没有实际执行(exec)。

S:代表这个程序的状态 (STAT),主要的状态有:
R (Running):该程序正在运行中;
S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)
T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
Z (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。

C:代表 CPU 使用率,单位为百分比;

PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所执行的优先顺序,数值越小代表该
程序越快被 CPU 执行。详细的 PRI 与 NI 将在下一小节说明

ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪
个部分,如果是个 running 的程序,一般就会显示“ - ” / SZ 代表此程序用掉多少内存 /
WCHAN 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。

TTY:登陆者的终端机位置,若为远端登陆则使用动态终端接口 (pts/n);
TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时
间;
CMD:就是 command 的缩写,造成此程序的触发程序之指令为何。


top [-d 数字] | top [-bnp]
选项与参数:
-d :后面可以接秒数,就是整个程序画面更新的秒数。默认是 5 秒;
-b :以批次的方式执行 top ,还有更多的参数可以使用喔!
通常会搭配数据流重导向来将批次的结果输出成为文件。
-n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p :指定某些个 PID 来进行观察监测而已。
在 top 执行过程当中可以使用的按键指令:
? :显示在 top 当中可以输入的按键指令;
P :以 CPU 的使用资源排序显示;
M :以 Memory 的使用资源排序显示;
N :以 PID 来排序喔!
T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
k :给予某个 PID 一个讯号 (signal)
r :给予某个 PID 重新制订一个 nice 值。
q :离开 top 软件的按键。


pstree [-A|U] [-up]
选项与参数:
-A :各程序树之间的连接以 ASCII 字符来连接;
-U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
-p :并同时列出每个 process 的 PID;
-u :并同时列出每个 process 的所属帐号名称。

软件安装

distribution代表 软件管理机制     使用指令         线上升级机制(指令)
Red Hat/Fedora      RPM         rpm,rpmbuild         YUM (yum)         CentOS
Debian/Ubuntu      DPKG            dpkg             APT (apt-get)

rpm -ivh package_name
选项与参数:
-i :install 的意思
-v :察看更细部的安装信息画面
-h :以安装信息列显示安装进度
 rpm -i /mnt/Packages/rp-pppoe-3.11-5.el7.x86_64.rpm

upgrade/freshen
-Uvh 后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装
    过旧版,则系统自动更新至新版;
-Fvh
如果后面接的软件并未安装到你的 Linux 系统上,则该软件不会被安装;亦即只
有已安装至你 Linux 系统内的软件会被“升级”!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux)