linux系统命令笔记

来源:互联网 发布:linux tomcat日志乱码 编辑:程序博客网 时间:2024/06/06 15:04

查看主机内部的信息

cat /proc/cpuinfoless /proc/cpuinfolspcilscpu

长按super键可以查看有哪些快捷键

一 基础命令操作

man : 用来查询指令;

man [man] : 可以用来查看man的使用方法;

man -f [man] : 显示那些跟man有关的说明文件

   可用于查找文件的说明(很方便哦)   man page的使用:(以man date为例)   最顶部的一行为: DATE(1)   User Commands       Date(1)        其中Date(1) 的数字1表示:用户在shell环境中可以操作的命令或可执行文件        另有:            3 —— 一些常用的function与library,大部分为C的函数库(library)            4 —— 设备文件说明,通常在/dev下的文件            5 —— 配置文件或者是某些文件的格式            8 —— 系统管理员可用的管理命令            9 —— 跟kernel有关的文件   关键字的查找:       /string :   向下查询stringstring :向上查询string        n, N: 上一页或下一页(相对而言)        q : 退出man page

man -k [man] : 把含有man的关键字的说明文件都列出来

/usr/share/doc 目录:许多说明文件文档的储存库

nano [filename] : 创建或打开filename文件,并使用nano文本编辑器进行编辑;

date : 时间显示;

date +%H:%M : 显示小时:分钟;

date +%Y/%m/%d : 显示年月日(2010/09/21格式);

cal [年份] : 显示所选年份的日历表;

cal [月份] [年份] : 显示所选年份的所选月份的月历;

cal : 显示当前的时间,用月历的方式;

info : 类似于man的操作;

who : 显示当前在线用户;

bc : 进入计算器界面,可进加减乘除取余(%),指(^)数等运算

whatis [命令或者是数据] : 等价于 man -f [命令或者数据];

apropos [命令或者数据] : 相当于 man -k [命令或者数据];

ps -aux: 查看后台执行的程序;

netstat -a: 查看网络的联机状态;

sync : 将数据同步写入硬盘中;

shutdown : 关机命令

$ shutdown -h now   # 立即关机;$ shutdown -h 20:25     # 今天20:25关机或者明天20:25关机(今天已过20:25);$ shutdown -h +10   # 十分钟后关机;$ shutdown -r now   # 系统立即重启;$ shutdown -r +30 'The system will reboot'  # 30分钟后重启并通知所有用户后面的消息;$ shutdown -k now 'This system will reboot'     # 仅发出警告并不关机;

reboot, halt, poweroff : 重启,关机

init : 切换系统运作模式;(0-关机, 3-纯命令行模式, 5-含图形界面,6-重启);

su - 账户名 : 切换账户;(su - shuhuang)

二 文件属性与权限有关

chgrp : 改变文件所属用户组

   chgrp [-R] dirname/filename ...(e.g: chgrp shuhuang file1);

chown : 改变文件所有者

    chown [-R] 帐号名称 文件或目录    chown [-R] 帐号名称:组名 文件或目录    另外,chown还可以改变文件或目录的用户组:    $ chown user:group filename 或者 chown user.group filename    仅改变用户组:    $ chown .group filename

chmod : 改变文件的权限

    chmod [-R] xyz 文件或者目录    参数:        xyz : 数字类型的权限(rwx属性数值的相加);        -R :进行递归的持续更改(同目录下的所有子目录)    字符型:(u-user, g-group, o-others, a-all)    chmod u=rwx,go=rx .bashrc (符号类型改变权限)    chmod a+r .bashrc (所有人属性加r)

1) 权限对文件的重要性:

*************************************************** r | 可读取此文件的实际内容*************************************************** w | 可编辑,新增或修改该文件的内容*************************************************** x | 该文件具有被执行的权限**************************************************

2) 权限对目录的重要性:

******************************************************************************* r | 具有读取目录树结构链表的权限,如查询文件名数据******************************************************************************* w | 更改该目录结构链表的权限,如新建,删除,重命名,转移文件或目录******************************************************************************* x | 代表用户是否可以进入该目录,没有此权限就进入不了该目录,就什么的都没法做~******************************************************************************

dos2unix: 把windows的文件转换成unix文件

$ dos2unix < dosFilename > unixFilename

unix2dos: 把unix的文件转换成windows的文件

$ unix2dos < unixFilename > dosFilename

三 文件与目录管理

cd :

cd [相对路径或绝对路径]cd ~ : 回到主目录;cd .. : 回到上层;cd - : 回到刚才目录;

pwd :

pwd [-P]参数:    -P : 当前路径,而非连接路径

mkdir :

mkdir [-mp] 目录名称参数:   -m : 配置文件权限;   -p : help递归创建;

rmdir:

rmdir [-p] 目录名称参数:   -p : 连上层的空目录也删除;

echo $PATH : 显示目前路径;

ls :

参数:    -a : 全部文件,包含隐藏;    -d : 进列出目录本身,不列出目录内的文件数据;    -h : 文件容量用易读方式(GBKB)表示;    -i : 列出文件所占用的inode号码    -l : 列出长数据串,包含文件属性与权限等数据;

cp :

参数:    -a : 相当与pdr;    -i : 若目标文件存在时询问;    -r : 递归复制(用于目录);    -v : 显示出正在copy的文件

rm :

参数:    -f : force;    -r : 递归删除,最常用的目录删除;

mv : 移动目录/文件/更名

rename : 更改大量文件的文件名,还支持正则表达式

cat : 显示文件内容

-n : 列出行号(cat -n filename)

tac : 反向显示

tac /filename

nl : 显示文件内容(顺便标出行号)

参数:(-b, -n, -w)

more : 查看文件内容

操作:space : 向下翻一页;Enter : 向下滚一行;/string : 向下搜索"string";q : quit;b/ ^b : 往回翻页

less : 查看文件内容

操作:space : 向下翻一页PageDown :PageUp :/string : search "string"n : 向前一个查询N : 向后一个查询q : quit

head :

head [-n number] filename参数:    -n : 后面接数字,代表显示几行的意思

tail :

tail [-n number] filename参数:-n : 后面接数字,代表显示几行

od : 显示二进制文件

od [-t TYPE] filename参数:t : 后面可接类型:    a : 默认字符输出    c : 使用ASCII字符输出    d[size] : 10进制输出    f[size] : flaoting输出    o[size] : octal输出    x[size] : 十六进制输出

touch :

touch [-acdmt] filename参数:-a : 仅修改访问时间-c : 修改文件时间,若文件不在则新建文件-d : --date="时间或日期"; (touch -d "2 days ago" filename)-m : 仅修改mtime;-t : 后面可接欲修改的时间,而不用目前时间,格式[YYMMDDhhmm]

umask : 查看文件默认权限(用户在新建文件活目录时的权限默认值),显示的权限要取反

umask -S : 文件权限的字符类型输出

chattr : change file attributes

    chattr [+-=][ASacdistu] 文件或目录    + : 增加某一个特殊参数    - : 删除某一个特殊参数    = : 仅有后面的参数        a : 文件只能增加数据,不能删除和修改数据(root)        i : 不能被改名/删除/设置连接/写入/添加数据等等(root)        c : 自动将文件压缩,在读取时自动解压缩        d : 当dump程序执行时设置d属性的文件不会被dump备份        s : 文件被删除时,它将会完全从这个硬盘空间被删除

lsattr : list file attributes

    lsattr [-adR] 文件或目录    -a : 隐藏文件的属性也秀出来    -d : 仅列出目录本身属性    -R : 连同子目录数据也一并列出

SUID, SGID, SBIT:

    说明:    SUID的限制和功能:(出现在文件所有者的x权限位置)        1.SUID仅对二进制程序有效(shell script也没有)        2.执行者对该程序有X(可执行)的权限        3.本权限仅在执行该程序的过程中有效        4.执行者将具有该程序所有者的权限        e.g.            shuhuang@shuhuang:~$ ls -ld /tmp; ls -l /usr/bin/passwd            # 此时passwd这个程序就具有s的属性    SGID的功能:(出现在文件用户组的x权限位置)        1.SGID对二进制程序有用        2.执行者对于该程序来说,需要具备x的权限        3.执行者在执行的过程将会获得该程序的用户组的支持        若SGID使用在目录上,即该目录设置了SGID权限:            1.用户若具有r和x的权限时,该用户能够进入此目录            2.用户在此目录下的有效用户组将会变成该目录的用户组            3.若用户在该目录下具有w(新建文件)的权限,则用户所创建的新文件的用户组与此目录相同        e.g.            shuhuang@shuhuang:~$ ll /usr/bin/locate /var/lib/mlocate/mlocate.db # /usr/bin/locate 具有s属性在用户组的x位置    SBIT(Sticky Bit)仅对目录有效:        当用户对于此目录具有w,x权限时,即具有写入的权限时:        若用户在该目录下新建文件或目录,仅有自己和root才有权利删除该文件    设置操作:    SUID/SGID/SBIT 的设置:使用chmod命令在"三个数字"的组合的前面在加一个数子设置即可    其中: 4 表示设置SUID2 表示设置SGID1 表示设置SBIT    e.g.        shuhuang@shuhuang:~$ chmod 4755 filename

file : 查看文件基本数据
which : (脚本文件名的查询)

    which [-a] command    -a : 将所有由PATH目录中可以找到的命令均列出

whereis : (文件名的查找)

    whereis [-bmsu] filename/directory    -b : 只找二进制文件    -m : 只找说明文件manual路径下的文件    -s : 只找source源文件    -u : 查找非上述文件的其他特殊文件

locate : (有时需更新数据库)

    locate [-ir] keyword    -i : 忽略大小的差异    -r : 后面可接正则表达式

updatedb : 更新数据库

find :

    find [PATH] [option] [action]    1 与时间有关参数:        -atime, -ctime, -mtime        -mtime n : n为数字,查找n天之前一天内被更改过的文件            例如:-mtime 4 寻找的就是从4-5天内的文件名        -mtime +n : 列出n天之前(不含n)被更改过的文件        -mtime -n : 列出n天之内(含n)被更改过的文件        -newer file : file为存在文件,列出比file还要新的文件    2 与用户组有关的参数:        -uid n : n为数字(用户帐号的ID,即UID,记录在/etc/passwd的与帐号名称相对应的数字)        -gid n : n为数字(用户组的ID,即GID        -user name : name为帐号名称        -group name : name为用户组名        -nouser : 寻找文件所有者不存在/etc/passwd的人        -nogroup : 寻找用户组不存在/etc/group中的文件    3 与文件权限有关的参数:        -name filename : 查找文件名为filename的文件        -size [+-]SIZE : 查找比SIZE还要大(+)或小(-)的文件。            c : 代表byte, k : 代表1024bytes        -type TYPE : 查找文件的类型为TYPE        -perm mode : 查找文件属性等于"mode"的文件,mode为类似chmod的属性值(e.g 4755)        perm -mode : 查找文件权限"必须全部包括mode的权限"的文件        perm +mode : 查找文件权限"包含任一mode的权限"的文件        e.g.            shuhuang@shuhuang:~$ find /home/shuhuang/* -perm 644            # 查找文件权限值为 644 的文件            shuhuang@shuhuang:~# find / -perm 4000             # 查找具有 SUID 限制的文件            shuhuang@shuhuang:~# find / -perm 2000             # 查找具有SGID 限制的目录或程序    4 其他可进行的操作:        -exec command : command为其他命令(不能是链接命令),-exec后面可再接其他命令来处理查找到的结果            e.g.             shuhuang@shuhuang~$ find / -perm +7000 -exec ls -l {} \;            从 -exec 到 \; 是关键字,{}表示由find找到的内容,find的结果会被放置到{}中。        -print : 将结果打印到屏幕上(默认操作)        此外,find还可以使用通配符,如:*

四 磁盘与文件系统管理

dumpe2fs : 查看文件系统

    dumpe2fs [-bh] 设备文件名    -h : 仅列出superblock的数据,不列出其他的区段

df : 列出文件系统的整体磁盘使用量,可将系统内的所有文件系统列出来

    df [-ahikHTm] [目录或文件名]    -h : 以人们较易阅读的(GB, MB, KB)等格式列出    -i : 不用硬盘容量,而以inode的数量显示

du : 评估文件系统使用量

    du [-ahskm] 文件或目录的名称    -s : 列出总量    -k :KB的容量显示    -m :MB的容量显示

ln : 设置链接文件

    ln sourcefilename objectfilename (硬连接)    ln -s 源文件 目标文件 (软连接)

fdisk : 处理disk partition table

    fdisk [-l] 设备名称    -l:列出设备后面的所有分区内容    m : print this menu    d : delete a partition    n : add a new partition    q : quit without saving changes    w : write table to disk and exit(一般write之后用partprobe更新分区表)    p : print the partition table

fdisk -l : 查阅系统目前所有的分区

partprobe : 更新分区表

mkfs: 磁盘格式化

    mkfs [-t 文件系统格式] 设备文件名    -t : 可以接受的文件系统格式

mke2fs: 磁盘格式化

    mke2fs [-b block_size] [-i block_size] [-L 卷标] [-cj] 设备    -b : 每个block的大小    -i : 每个inode的容量    -L : 接卷标名称    -j : 主动加入journal成为ext3格式

fsck: 磁盘检验

    fsck [-t 文件系统] [-ACay] 设备名称

mount: 文件挂载

    mount -a    mount [-l]    mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 设备文件名 挂载点        -a : 依照/etc/fstab 的数据将所有未挂载的磁盘都挂载上来        -l : 单纯出入mount会显示目前挂载的信息,加上-l可增加列Lable名称        -L : 系统除了利用设备名称之外,还可以利用文件系统的卷标名称来挂载        -o : 后面接一些需要挂载时额外的参数(如帐号/密码/读写权限等)        ro, rw :  挂载的文件系统成为只读/读写        async, sync: 此文件系统是否使用同步(sync)或异步(async)写入内存机制        auto, noauto: 允许此分区被mount -a 自动挂载        dev, nodev: 是否允许此分区可创建设备文件        exec, noexec: 是否允许此分区上拥有可执行binary文件        defaults : 默认值rw, suid, dev, exec, auto, nouser, and async        remount : 重新挂载    如果想要挂在U盘时,可以先使用命令fdisk -l查看U盘设备文件名来挂在

/etc/fstab 文件:

    该文件是开机挂载的文件,可将外部设备的信息写在里面,以后每次开机都可以自动挂载

umount: 文件卸载

    umount [-fn] 设备文件名或挂载点    -f : 强制卸载    -n : 不更新/etc/mtab的情况下卸载

blkid: 查看设备文件的UUID和TYPE

    blkid 设备文件名    e.g:        使用root账号直接在命令行下面直接输入: blkid

mknod:

    mknod 设备文件名 [bcp] [Major] [Minor]    b : 设备名称成为一个外部存储设备,如硬盘    c : 设备名称成为一个外部输入设备,如鼠标,键盘等    p : 设备名称成为一个FIFO文件    Major : 主设备代码(可用 ll /dev/sda*查看或者ll /dev/hdc*)    Minor : 次设备代码(可用 ll /dev/sda*查看或者ll /dev/hdc*)        e.g.        shuhuang@shuhuang:~$ ll /dev/sda*        brwxr----- 1 root disk 22, 0 Oct 24 15:33 /dev/sda1        brwxr----- 1 root disk 22, 1 Oct 20 13:10 /dev/sda2        ...        brwxr----- 1 root disk 22, 6 Oct 20 13:20 /dev/sda7        上面的disk后面的220-6就是主代码和此代码

e2label: 修改卷标

    e2label 设备名称 新的label名称

tune2fs:

    tune2fs [-jlL] 设备代号    -l: 类似dumpe2fs -h 的功能(读取super block内的数据)    -j: ext2转成ext3    -L: 类似e2label的功能,修改文件系统的Label

hdparm:

    -T : 测试暂存区(cache)的访问性能    -t : 测试硬盘的实际访问性能    i.e. ~$ hdparm /dev/sda

dd if=/dev/zero of=filename bs=1M count=512

    if: input file, /dev/zero是会一直输出0的设备    of: output file, 将一堆0写入到后面接的文件中    bs: 每个block的大小,就像文件系统那样的block    count: bs的数量

mkswap: 创建swap文件

    mkswap filename

swapon: 启动swap文件

    swapon filename

swapoff: 关掉swap file

    swapoff filename

du -sb filename: 列出文件的大小(bytes为单位, 更接近所占用的实际大小)

du -sm filename: 列出文件的大小(MB为单位, 更接近实际分配的内存大小)

parted: 分区命令

    parted [设备] [命令 [参数]]    命令功能:        新增分区:   mkpart [primary | logical | extended ] [ext3 | vfat] 开始 结束        分区表:    print        删除分区:   rm [partition]        example:        # parted /dev/hdc print        # parted /dev/hdc mkpart logical ext3 19.2GB 19.7GB        # parted /dev/hdc rm 8(删除/dev/hdc8)

五 文件与文件系统的压缩与打包

compress:

    压缩: compress [-rcv] filename/directory    解压缩: uncompress filename.Z        -r: 同目录下的文件也同时给予压缩        -c: 将压缩数据输出成为standard output(输出到屏幕)        -v: 显示压缩后的一些信息以及压缩过程中的一些文件名的变化

gzip:

    gzip [-cdtv#] filename        -c: 压缩内容输出到屏幕上              (gzip -c filename)        -d: 解压缩                            (gzip -d filename.gz)        -t: 检验一个压缩文件的一致性,看文件有无错误        -v: 显示原文件/压缩文件比等信息       (gzip -v filename)        -#: '#'为数字1~9,速度逐减,压缩比逐增  (gzip -9 -c filename)    zcat: 查看压缩文件的内容        zcat filename.gz

bzip2:

    bzip2 [-cdkzv#] filename        -c: 输出到屏幕        (bzip2 -c filename)        -d: 解压缩            (bzip2 -d filename.bz2)        -k: 保留原文件不删除原始文件        -z: 压缩的参数        (bzip2 -z filename)        -v: 显示原文件/压缩文件的压缩比等信息        -#: 与gzip同样的      (bzip2 -9 -c filename > filename.bz2)    bzcat: 查看压缩文件的内容        bzcat filename.bz2

tar:

    打包与压缩: tar [-j|-z] [cv] [-f newfilename] filename    查看文件名: tar [-j|-z] [tv] [-f newfilename]    解压缩:    tar [-j|-z] [xv] [-f newfilename] [-C 目录]    -c: 新建打包文件,可搭配-v查看过程中被打包的文件名    -t: 查看打包文件的内容含有哪些文件名,重点查看文件名    -x: 解打包/压缩的功能,可搭配-C在特定的目录中解开    -j: 通过bzip2的支持进行压缩/解压缩,文件名最好为*.tar.bz2    -z: 通过gzip的支持进行压缩/解压缩,此时文件名最好为*.tar.gz    -v: 显示正在处理的文件    -C 目录: 用在解压缩时,若要在特定的目录解压缩,可以使用这个参数    -p: 保留备份数据的原本权限和属性,常用于备份-c重要的配置文件    -P(大写): 保留绝对路径    --exclude=FILE: 压缩过程中不要将FILE打包        example:        # tar -jcv -f filename.tar.bz2 filename        # tar -jtv -f filename.tar.bz2        # tar -xjv -f filename.tar.bz2 -C directory

dump: 完整备份整个文件系统

    dump [-Suvj] [-level] [-f 备份文件] 待备份数据    dump -W    -S: 仅列出后面的待备份数据需要多少空间才能够备份完毕    -u: 这次的dump时间记录到/etc/dumpdates文件中    -v: 将dump的文件过程显示出来    -j: 加入bzip2的支持,将数据进行压缩,默认bzip2的压缩等级为2    -level: -0 ~ -9的等级    -f: 类似tar后面接的产生文件    -W: 列出/etc/fstab里面的具有dump设置的分区是否有备份过

restore: 恢复备份文件

    restore -t [-f dumpfile] [-h]    restore -C [-f dumpfile] [-D 挂载点]    restore -i [-f dumpfile]    restore -r [-f dumpfile]    -t: 查看dump起来的备份文件含有什么重要数据,类似tar -t功能    -C: 比较dump与实际文件    -i: 进入互动模式,可以仅还原部分文件,用于dump还原时(进入模式后可用help查询帮助)    -r: 将整个文件系统还原    -h: 查看完整备份数据中的inode与文件系统label等信息    -D: 与-C进行搭配,可以查出后面接的挂载点与dump的不同的文件    -f: 后面接需要处理的dump文件

dd: 备份整块分区或磁盘

    dd if="input file" of="output file" bs="block size" count="number"    if : 就是inputfile,也可是设备    of : output file, 也可以是设备    bs : 规划一个block的大小,默认是512bytes    count : 多少个block    e.g.        shuhuang@shuhuang:~$ dd if=/dev/zero of=/home/shuhuang/test bs=4k count=3

cpio:

    cpio -ovcB > [file | device]    cpio -ivcdu < [file | device]    cpio -ivct < [file | device]    备份时的参数:    -o : 将数据copy输出到文件或设备上    -B : 改变默认的block,(大文件的储存速度加快)    还原时的参数:    -i : 将数据自文件或设备复制到系统当中    -d : 自动新建目录    -u : 自动将比较新的文件覆盖较旧的文件    -t : 需配合-i参数,可用在查看cpio新建的文件或设备的内容    -v : 显示存储过程中的文件名    -c : 一种较新的portable format放式存储

dos2UNIX: windows和linux文件转换

    dos2UNIX [-kn] file [newfile]    -k : 把dos文件转成linux下的文件

六 认识与学习bash

type: 查看外部命令与内置命令

    type [-tpa] name    -t : 显示字眼(file, alias, builtin)    -p : 外部命令显示完整名    -a : PATH变量定义中,显示所有含有name的命令

(反斜杠): 表示转义

echo: 变量的显示(显示变量前需要有’$’符号)

    echo $variable    echo ${variable}

变量的设置规则:

    1 变量与变量内容用等号链接("name=shuhuang")    2 等号两边不能直接接空格("name = shuhuang"错误)    3 变量名只能是英文字母和数字(数字不能开头)    4 变量内容若有空格,则使用单引号或双引号(单引号内的特殊字符被转化成ASCII,双引号则保留原本字符属性)    5 转义字符可将特殊字符转成一般字符(纯文本)    6 命令里面包含其他命令,可用反单与引号(`命令`)或“$(命令)”    7 若想增加变量内容,使用"$变量名称""${变量名称}"    8 若变量需要在其他子程序执行,需要用export使变量变成环境变量    9 系统默认变量为大写,自行设置变量可以使用小写    10 取消变量的方法是"unset 变量名称"("unset name")

env: 查看环境变量与常见环境变量说明

    HOME : 用户主文件夹    SHELL : 目前使用的shell是那个程序,默认/bin/bash    HISTSIZE : 与历史命令有关,曾经执行过的命令的最大条数    MAIL : 使用mail命令在收信时系统会读取的邮件信箱文件    PATH : 文件查找路径(:分隔)    LANG : 语系数据,    RANDOM : 随机数值

set: 查看所有变量(环境变量和自定义变量)

    PS1 : 提示符设置        \d : 显示星期月日 ("Mon Feb 2")        \H : 完整主机名        \h : 取主机名第一个小数点之前的名字("www.shuhuang.tsai""www")        \t : 显示时间(24h, "HH:MM:SS")        \T : 显示时间(12h, "HH:MM:SS")        \A : 显示时间(24h, "HH:MM")        \@ : 显示时间(12h, "HH:MM")        \U : 目前用户帐号名称        \w : 完整工作目录名称(主文件夹用'~'代替)        \W : 仅列出工作目录最后一个名称        \# : 执行第几个命令        \$ : 提示符(root为'#'其他'$')

:shell线PID(PID)(echo)?:(0)(echo?)

export: 自定义变量转成环境变量

    子程序仅会继承父程序的环境变量,不会继承父程序的自定义变量    export variable

read:

    read [-pt] variable        -p : 后面可以接提示符        -t : 后面可以接等待的秒数

declare/typeset:

    declare [-aixr] variable        -a : 把variable定义为数组类型        -i : integer        -x : variable变成环境变量(declare +x variable 取消variable是环境变量)        -r : variable设置为readonly,不能更改内容        -p : 可以单独列出变量类型        说明:            变量的默认类型是"字符串"("1+2"为字符串,不是数值3)                $sum=1+2               (sum 是字符串 1+2)                $declare -i sum=1+2    (sum 是数字 3)            bash的数值运算默认最多为整数类型(1/3=0)

ulimit: 限制参数

    ulimit [-SHacdflut] [配额]        -H : hard limit,必不能够超过的数值        -S : soft limit,警告设置,可以超过,但有警告信息        -a : 后不接参数,列出所有的限制额度        -c : 限制每个内核文件的最大容量        -f : 此shell可以创建的最大容量,单位为KB        -d : 进程可以使用的最大断裂内存(segment)容量        -l : 可用于锁定(lock)的最大容量

变量相关:

${variable#关键字}              删除从头开始符合"关键字"的最短数据${variable##关键字}             删除从头开始符合"关键字"的最长数据${variable%关键字}              删除从尾向前符合"关键字"的最短数据${variable%%关键字}             删除从尾开始符合"关键字"的最长数据${variable/旧字符串/新字符串}   第一个符合旧字符串被新字符串替换${variable//旧字符串/新字符串}  全部符合旧字符串的内容被新字符串替换变量存在的判断:##################################################################   ~$ echo $username#        <<没有任何输出,可能为空变量,可能不存在#   ~$ username=${username-root}#   ~$ echo $username# root    <<被赋值为root#   ~$ username="shu huang"#   ~$ username=${username-value}#   ~$ echo $variable# shu huang   <<没有被改变值,因为username现在是存在的变量#   ~$ username=""#   ~$ username=${username-root}#   ~$ echo $username#        <<空变量也不会被改变值#   ~$##################################################################    说明:'-'符号,若variable不存在,则新声明variable,并赋值为value(value可以自己设置)若username未设置或者为空字符串,则将username内容设置为root########################################################################  shuhuang@shuhuang:~$ username=""#  shuhuang@shuhuang:~$ username=${username-root}#  shuhuang@shuhuang:~$ echo $username#        <<username被设置为空字符串所以保留空字符串#  shuhuang@shuhuang:~$ username=${username:-root}#  shuhuang@shuhuang:~$ echo $username#  root  <<加上":"后,若变量内容为空或者未设置,都能够以后面的内容替换########################################################################

history: 历史命令查看

    history [n]    history [-c]    history [-raw] histfiles参数:n   : 数字,是要列出最近n条命令的意思-c  : 将目前shell中的所有history内容全部消除-a  : 将目前新增的history命令新增入histfiles中,若没有加histfiles,则默认写入 ~/.bash_history-r  : 将目前histfiles的内容读到目前这个shell的history记忆中-w  : 将目前的history记忆内容写入到histfiles中!number:    执行第几条命令的意思!command:   由最近的命令开头向前搜寻命令串开头为command的那个命令,并执行;!!:         就是执行上一个命令(相当于按 向上箭头,再按Enter)

bash登录与显示信息的编辑: /etc/issue,/etc/motd

编辑/etc/issue的内容即可修改登录bash的界面,相关参数如下:################################################ \d    本地端的时间和日期# \l    显示第几个终端机接口# \m    显示硬件的等级# \n    显示主机网络名称# \o    显示domain name# \r    操作系统的版本(相当于uname -r)# \t    显示本地端时间的时间# \s    操作系统的名称# \v    操作系统的版本###############################################

bash的环境配置文件:

- login shell:取得bash时需要完整的登录流程,e.g. tty1~tty6登录,需要帐号和密码,此时取得的bash称login shell- non-login shell:取得bash接口的方法不需要重复登录的举动,如以X Window登录后,再以X的图形界面启动终端机,此时- 那个终端接口并没有需要再次输入帐号与密码,那个bash则称为non-login shell。在bash环境下再次使用bash这个命令,- 同样没有输入密码和帐号,所以也是属于non-login shell。

source 配置文件名: 将配置文件的设置读入目前的bash环境中。(或者小数点”. 配置文件”)

stty,set:

    stty -a:    列出所有按键与按键内容    说明:        eof:    End of file        erase:  向后删除字符        intr:   送出一个interrupt的信号给当前正在运行的程序        kill:   删除在目前命令行上的所有文字        quit:   送出一个quit信号给目前正在有运行的程序        start:  在某个进程停止后,重新启动它的输出        stop:   停止目前屏幕的输出        susp:   送出一个terminal stop的信号给正在运行的进程    e.g.想要设置[ctrl]+h来进行字符的删除:        shuhuang@shuhuang:~$ stty erase ^h    set [-uvCHhmBx]    说明:        -u  默认不启用,若启用后,当使用未设置变量时会显示错误信息        -v  默认不启用,若启用后,在讯息被输出前会显示信息的原始内容        -x  默认不启用,若启用后,命令被执行前会显示命令内容(前面有++)            -h  默认启用,与历史命令有关        -H  默认启用,与历史命令有关        -m  默认启用,与工作管理有关        -B  默认启用,与括号[]的作用有关        -C  默认不启用,使用 > 等时,若文件存在,该文件不会被覆盖

bash默认热键组合:

    Ctrl+C:     终止目前的命令    Ctrl+D:     输入EOF    Ctrl+M:     就是Enter    Ctrl+S:     暂停屏幕的输出    Ctrl+Q:     回复屏幕的输出    Ctrl+U:     在提示符下,将整行命令删除    Ctrl+Z:     暂停目前的命令

通配符与特殊符号:

    *       代表0~无穷多个任意字符    ?      代表一定有一个任意字符    []      代表一定有一个括号内的字符,如[abcd]表示一定有一个字符是a/b/c/d    [-]     代表在编码顺序内的所有字符,如[0-9]表示0-9之间的所有数字    [^]     代表一定有一个非括号内的字符,如[^abc]表示![abc]

数据流重定向:

    file  ---standard input--->  command  ---standard output---> file/device                                    |                                standard error                                    |                                file/device    stdin: 代码为0,使用< 或 <<    stdout: 代码为1,使用 > 或 >>    stderr: 代码为2,使用 2> 或 2>>    e.g    ************************************************    * shuhuang@shuhuang:~$ ll / > ~/rootfile    * **********************************************    步骤:        1.该文件(~/rootfile)若不存在,系统会自动将他创建起来        2.当该文件存在时,系统会将这个文件内容清空,然后再将数据写入        3.也就是若以 > 输出到一个已存在的文件,那么这个文件就会被覆盖掉        4.如果不想覆盖掉文件,可以使用 >>, 此时数据会被附加到文件末尾    e.g:     1. ***************************************        * shuhuang@shuhuang:~$ cat > catfile        ***************************************            此时键盘的输入就会被输出到catfile文件,(按ctrl+d结束)     2. **************************************************        * shuhuang@shuhuang:~$ cat > catfile < ~/.bashrc        **************************************************            此时catfile文件的输入就是~/.bashrc文件,相当于copy     3. **************************************************        * shuhuang@shuhuang:~$ cat > catfile << "eof"        **************************************************        此时键盘的输入的内容就是catfile的内容,直到输入字符串"eof"时才结束输入。(此时不需要ctrl+d)

特殊符号说明(;,&&,||):

    ';':    cmd; cmd;...    '&&':   cmd1 && cmd2 ...    '||':   cmd1 || cmd2 ...

管道命令(pipe):

    ***********************************************    * shuhuang@shuhuang:~$ ls -al /etc | less    ***********************************************    执行了ls -al /etc 命令后把输出到屏幕的数据流重新输入到less命令中,这样就可以使用less方便地查看输出

选取命令:cut, grep

    cut -d '分隔字符' -f fields    cut -c 字符范围    e.g:        shuhuang@shuhuang:~$ echo $PATH | cut -d ':' -f 3        # 以':'为分隔符,取第3段内容        shuhuang@shuhuang:~$ echo $PATH | cut -d ':' -f 3,5        # 以':'为分隔符,取第3,5段内容        shuhuang@shuhuang:~$ export | cut -c 12-        # 取第12列(包括12)之后的所有内容    grep [-acinv] [--color=auto] '查找字符串' filename        -a:     将binary文件以text文件的方式查找数据        -c:     计算找到'查找字符串'的次数        -i:     忽略大小写的不同        -n:     顺便输出行号        -v:     反向选择,显示没有包含查找字符串的行        --color:可以把查找到的关键字部分加上颜色显示    e.g:        shuhuang@shuhuang:~$ last | grep 'root'        shuhuang@shuhuang:~$ last | grep -v 'root'        shuhuang@shuhuang:~$ grep --color=auto 'MANPATH' /etc/man.config

sort:

    sort [-fbMmrtuk] [file or stdin]    -f:     忽略大小写差异    -b:     忽略最前面空格部分    -M:     以月份的名字来排序    -n:     纯数字排序    -r:     反向排序    -u:     相同的数据中只显示一行(uniq)    -t:     分隔符,默认是tab    -k:     以那个区间来排序    e.g:        shuhuang@shuhuang:~$ cat /etc/passwd | sort        shuhuang@shuhuang:~$ cat /etc/passwd | sort -t ':' -k 3        shuhuang@shuhuang:~$ cat /etc/passwd | sort -t ':' -k 3 -n        shuhuang@shuhuang:~$ last | cut -d ' ' -f 1 | sort

uniq:

    uniq [-ic]    -i:     忽略大小写字符的不同    -c:     进行计数    e.g:        shuhuang@shuhuang:~$ last | cut -d ' ' -f 1 | sort | uniq        shuhuang@shuhuang:~$ last | cut -d ' ' -f 1 | sort | uniq -c

wc:

    wc [-lwm]    -l:     仅列出行    -w:     仅列出多少字    -m:     多少个字符    e.g:        shuhuang@shuhuang:~$ cat /etc/man.config | wc        shuhuang@shuhuang:~$ last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l

tee: 双向重定向

    standard input  --->  tee  --->  Screen                           |                         file    tee [-a] file    -a:     累加的方式将数据加入file中    e.g:        shuhuang@shuhuang:~$ last | tee last.list | cut -d " " -f 1        shuhuang@shuhuang:~$ ls -l /home | tee ~/homefile | more        shuhuang@shuhuang:~$ ls -l / | tee -a ~/homefile | more
文件内容处理:

tr [-ds] SET1 …

    -d:     删除信息当中的SET1这个字符串    -s:     替换掉重复的字符        shuhuang@shuhuang:~$ last | tr '[a-z]' '[A-Z]'        shuhuang@shuhuang:~$ cat /etc/passwd | tr -d ':'        shuhuang@shuhuang:~$ cp /etc/passwd /home/passwd && UNIX2dos /home/passwd        shuhuang@shuhuang:~$ cat /home/passwd | tr -d '\r' > /home/passwd.linux

col [-xb]

    -x:     将tab键转换成对等的空格    -b:     在文字内有反斜杠时,仅保留反斜杠最后接的那个字符

join [-ti12] file1 file2

    -t:     join默认以空格分隔数据,并且对比“第一个字段”的数据,        如果两个文件相同,则将两条数据连成一行,且第一个字段放在第一个    -i:     忽略大小写差异    -1:     后面接数字,代表第一个文件要用哪个字段来分析    -2:     后面接数字,代表第二个文件要用哪个字段来分析        shuhuang@shuhuang:~$ head -n 3 /etc/passwd /etc/shadow        shuhuang@shuhuang:~$ join -t ':' /etc/passwd /etc/shadow        shuhuang@shuhuang:~$ join -t ':' -1 4 /etc/passwd -2 3 /etc/group

paste [-d] file1 file2

    -d:     后面可以接分隔字符,默认以tab分隔    -:      如果file部分写成-,表示来自standard input的数据        shuhuang@shuhuang:~$ paste /etc/passwd /etc/shadow

expand [-t] file

    -t:     后面接数字,一般一个tab用8个空格替换,我们可以自定义一个tab按键代表多少个字符        shuhuang@shuhuang:~$ grep '^MANPATH' /etc/man.config | head -n 3 | expand -t 6 - | cat -A

split: 文件分割

    split [-bl] file PREFIX    -b:     后面接欲切割成文件的大小,可加单位,例如b,k,m等    -l:     以行数来进行切割    PREFIX: 代表前导符,可作为切割文件的前导文字

正则表达式:

    [:alnum:]       代表英文大小写字符及数字(0-9,a-z,A-Z)    [:alpha:]       代表任何英文大小写字符(a-z,A-Z)    [:blank:]       代表空格键或tab键    [:cntrl:]       代表键盘上的控制键(CR, LF, Tab, Del)    [:digit:]       代表数字(0-9)    [:graph:]       代表除了空格符之外的所有字符    [:lower:]       代表小写字符    [:upper:]       代表大写字符    [:print:]       任何可以被打印出来的字符    [:punct:]       任何标点符号(punctuation symbol),即(",'?!:;#$)    [:space:]       任何产生空白的字符(含Tab, CR)    [:xdigit:]      十六进制数字(0-9,A-F,a-f)    ^word           待查找字符串word在行首                              grep -n '^#' regular_express.txt    word$           待查找字符串在行尾                                  grep -n '!$' regular_express.txt    .(point)        代表一定有一个任意字符                              grep -n 'e.e' regular_express.txt    \               转义字符,去除特殊符号的特殊意义                    grep -n \' regular_express.txt    *               重复0-无穷多个的前一个字符                          grep -n 'ess*' regular_express.txt    [list]          从字符集合的RE字符里面找出想要选取的字符            grep -n 'g[ld]' regular_express.txt    [n1-n2]         从字符集合里选取想要的字符范围                      grep -n '[0-9]' regular_express.txt    [^list]         从字符集合的RE字符里找出不要的字符串或范围          grep -n 'oo[^t]' regular_express.txt    \{n,m\}         连续n到m个前一个RE字符,若为\{n\}则是连续前n个的前一个RE字符,若为\{n,\}则表示前n个以上的前一个RE字符

扩展正则表达式:

    +       重复一个或以上的前一个RE字符    ?      01个前一个RE字符    |       用或(or)的方式找出数个字符串    ()      找出“组”字符串(里面字符串用|分开)    ()+     多个重复组的判别

grep高级:

    grep [-A] [-B] [-n] [--color=auto] '搜寻字符' filename    -A:     后面可加数字,为after,除了该行以外,后续n(n为数字)行也列出来    -B:     后面可加数字,为before,列出该行及之前n行    -n:     显示行号    --color:    可将正确的那个选取数据列出颜色

sed: stream editor

    sed [-nefr] [action]    -n:     使用silent模式,一般会输出到屏幕上,加上-n不会有输出到screen    -e:     直接在命令行模式上进行sed的动作编辑(默认)    -f:     直接将sed的动作写在一个文件内, -f filename 则可执行filename内的sed动作    -r:     支持扩展正则表达式    -i:     直接修改读取的文件内容,而不是由屏幕输出(注意是直接修改源文件)    action:        [n1[,n2]]function        n1,n2:      代表选择进行动作的行数,如:"10,20[动作行为]"        function参数:            a:  新增,a后面可接字符串            c:  替换,c后面可接字符串,这些字符串会替换n1,n2之间的行            d:  删除,            i:  插入            p:  打印(通常和sed -n一起)            s:  替换(可搭配正则表达式)    e.g:        shuhuang@shuhuang:~$ nl /etc/passwd | sed '2,5d'        shuhuang@shuhuang:~$ nl /etc/passwd | sed '2d'        shuhuang@shuhuang:~$ nl /etc/passwd | sed '3,$d'        shuhuang@shuhuang:~$ nl /etc/passwd | sed '2a drink tea'        shuhuang@shuhuang:~$ nl /etc/passwd | sed '2a drink tea ...... \        > drink beer ?'        shuhuang@shuhuang:~$ nl /etc/passwd | sed '2,5c No 2-5 number'        shuhuang@shuhuang:~$ nl /etc/passwd | sed -n '5,7p'        shuhuang@shuhuang:~$ ifconfig   (先查看一下)        shuhuang@shuhuang:~$ ifconfig | grep 'inet addr' | sed 's/^.*addr//g' | cut -d ' ' -f 1 (获取ip地址)        shuhuang@shuhaung:~$ cat /etc/manpath.config | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'

printf: 类似C语言的printf

awk: 数据处理工具

    awk '条件类型1 {action1} 条件类型2 {action2} ...' filename    每一行的每一个字段都有变量名称,分别为: $1, $2, $3, ......以此类推,$0代表一整行的数据    NF  表示每一行($0)拥有的字段总数    NR  目前awk所处理的是第几行的数据,e.g: shuhuang@shuhuang:~$ last -n 5 | awk '{print $1 "\tlines: " NR "\tcolumes: " NF}'    FS  目前分隔字符,默认是空格键,如: shuhuang@shuhuang:~$ cat /etc/passwd | awk '{FS=':'} $3 < 10 {print $1}'    BEGIN   开始条件, 如:  shuhuang@shuhuang:~$ cat /etc/passwd | awk 'BEGIN {FS=':'} $3 < 10 {print $1}'    END     结束条件    变量可以直接使用,如: total = $1 + $2 + $3

diff: 按行文件比较

    diff [-bBi] from-file to-file    from-file:      作为欲比较文件的文件名    to-file:        作为目的比较文件的文件名    frome-file and to-file can be replaced by '-' which stands for "standard input"    -b:     忽略一行中仅有多个空白的区别    -B:     忽略空白行的区别    -i:     忽略大小写的不同

cmp: 按字节文件比较

    cmp [-s] file1 file2    -s:     将所有的不同点的字节处都列出来(默认仅列出第一个发现的不同)

test: 真值表达式测试

    文件类型相关:  test -e filename    -e filename:    该文件名是否存在    -f filename:    该文件名是否存在且为文件(file)    -d filename:    该文件名是否存在且为目录(directory)    -b filename:    改文件名是否存在且为一个block device    -c filename:    该文件名是否存在且为一个character device    -S filename:    该文件名是否存在且为一个Socket文件    -p filename:    该文件名是否存在且为一个FIFO(pipe)文件    -L filename:    该文件名是否存在且为一个链接文件    文件权限相关:  test -r filename    -r filename:    检测该文件名存在且具有可读的权限    -w filename:    检测该文件名存在且具有可写的权限    -x filename:    检测该文件名存在且具有可执行的权限    -u filename:    检测该文件名存在且具有"SUID"的属性    -g filename:    检测改文件名存在且具有"SGID"的属性    -k filename:    检测该文件名存在且具有"Sticky bit"的属性    -s filename:    检测该文件名存在且为非空文件    文件比较: test file1 -nt file2    -nt(newer than)     判断file1是否比file2新    -ot(older than)     判断file1是否比file2旧    -ef(equal file)     判断file1和file2是否为同一文件    两个整数之间的判断: test n1 -eq n2    -eq     两个整数n1和n2是否相等    -nq     两个整数不相等    -gt     大于    -lt     小于    -ge     大于等于    -le     小于等于    判定字符串数据:    test -z string      判断字符串是否为0,即空字符串    test -n string      判断字符串是否为非0    test str1 = str2    判断str1 是否等于 str2    test str1 != str2   判断不相等    多重判断: -a  -o  !    test -r filename -a -x filename     同时判断是否具有可读和可写的权限    test -r file -o -x file    test ! -x file                      当file不具有x权限时,回传true

七 Linux 帐号管理与 ACL权限设置

/etc/passwd:

    1.每一行代表一个帐号    2.用':'作为分隔符,共7段,分别为:        帐号名称,        密码: 0表示管理员,1-499是系统管理帐号,之后的是可登录帐号        UID,        GID,        用户信息说明,        主文件夹,        Shell

/etc/shadow:

    1.与/etc/passwd的行相对应    2.每段如下:        帐号名称,        密码,        最近更动密码的日期: 就是最近修改密码的日期(数字为天数,1970.1.1为数字1开始累加)        密码不可被修改的日期(相对于最近更动的日期): 距离上次修改几天后才能重新修改密码,0表示任何时候都可以        密码需要修改的天数(相对于最近更动的日期): 距离上次几天之内需要再次重新修改密码,否则密码过期        密码需要修改期限前的警告天数(相对于第五字段相比): 密码过期前多少天发出提醒        密码过期后的帐号宽限时间(密码失效日): 密码过期了之后的宽限天数还可以修改密码(此时用户还可以登录)        帐号失效日期:   此时用户的密码将不能登录也不能重新修改,必须找管理员帮忙~~

修改密码的命令: passwd

/etc/group:(‘:’分隔,共四列)

    1.用户组名称    2.用户组密码    3.GID    4.此用户组支持的帐号名称    有效用户组(effective group)与初始用户组(initial group)        /etc/passwd第四段的GID就是初始用户组

/etc/gshadow:

    1.用户组名    2.密码列,开头为!表示无合法密码,所以无用户组管理员    3.用户组管理员帐号    4.该用户组的所属帐号

groups: 显示当前有效与支持的用户组(第一个显示的为有效用户组)

newgp:

    newgp 用户组    有效用户组的切换(此时shell也会变成新用户组的shell,可以使用exit返回原来的shell)

useradd:

    useradd [-u UID] [-g initial group name] [-G 次要用户组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户帐号名    -u:     后接UID,直接指定一个特定的UID帐号给这个帐号    -g:     后接用户组名,设置为初始用户组    -G:     后面接的组名是这个帐号还可以加入的用户组    -M:     强制,不要创建用户主文件夹(系统帐号默认)    -m:     强制,要创建用户主文件夹(一般帐号默认)    -c:     /etc/passwd第五列说明内容    -d:     指定某个目录成为主文件夹    -r:     创建一个系统帐号(UID会有限制,参考/etc/login.defs)    -s:     后接一个shell,默认/bin/bash    -e:     后面接一个日期"YYYY-MM-DD",帐号失效日的设置    -f:     后面接shadow第七字段,指定密码是否会失效,0为立刻失效,-1为永远不失效    e.g.        shuhuang@shuhuang:~# useradd zhuzhu        shuhuang@shuhuang:~# passwd zhuzhu  (设置密码)        shuhuang@shuhuang:~# useradd -u 1010 -g shuhuang zhuzhu        shuhuang@shuhuang:~# ll -d /home/zhuzhu        shuhuang@shuhuang:~# useradd -r test    (创建系统帐号)        shuhuang@shuhuang:~# grep test /etc/passwd /etc/shadow /etc/group    useradd 参考文件:        shuhuang@shuhuang:~# useradd -D        # 说明:        GROUP=100           <== 默认的用户组        HOME=/home          <== 默认主文件夹所在目录        INACTIVE=-1         <== 密码失效日,在shadow内的第七列        EXPIRE=             <== 帐号失效日,在shadow内的第8列        SHELL=/bin/bash     <== 默认的shell        SKEL=/etc/skel      <== 用户主文件夹的内容参考目录        CREATE_MAIL_SPOOL=yes       <== 是否主动帮用户创建邮箱(mailbox)

passwd:

    passwd [--stdin]        <== 所有用户均可使用    passwd [-l] [-u] [--stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 帐号    <== root功能    --stdin:    通过前一个管道的数据作为密码输入,对shell script有帮助    -l:         是lock的意思,会将/etc/shadow第二列前面加上'!'使密码失效    -u:         与-l相对,unlock    -S:         列出密码相关    -n:         后接天数,shadow的第四段,多久不可能修改密码天数    -x:         后接天数,shadow的第五段,多久内必须改动密码    -w:         后接天数,shadow的第六段,密码过期前的警告天数    -i:         后接日期,shadow的第七段,密码失效日期

chage:

    chage [-ldEImMW] 帐号名    -l:     列出该帐号的详细密码参数    -d:     后接日期,修改shadow的第三字段(最近一次更改日期),格式YYYY-MM-DD    -E:     后接日期,修改shadow的第八字段(帐号失效日期),格式YYYY-MM-DD    -I:     后接天数,修改shadow的第七字段(密码失效日期),    -m:     后接天数,修改shadow的第四字段(密码最短保留天数)    -M:     后接天数,修改shadow的第五字段(密码多久需要进行修改)    -W:     后接天数,修改shadow的第六字段(密码过期前警告日期)    e.g.        shuhuang@shuhuang:~$ useradd test        shuhuang@shuhuang:~$ echo "test" | passwd --stdin test        shuhuang@shuhuang:~$ chage -d 0 test        # test这个帐号在第一次登录后必须修改密码,然后以新密码重新登录

usermod:

    usermod [-cdegGlsuLU] username    -c:     后接帐号的说明,即/etc/passwd的第五列    -d:     后接帐号主文件夹,即修改/etc/passwd第六字段    -e:     后接日期,格式YYYY-MM-DD,即/etc/shadow的第八字段    -f:     后接天数,为shadow第七字段    -g:     后接初始用户组,修改/etc/passwd第四字段(GID)    -G:     后接次要用户组,修改这个用户能够支持的用户组    -a:     与-G合用,可增加次要用户组的支持而非设置    -l:     后接帐号名称,/etc/passwd的第一列    -s:     后接Shell 的实际文件,    -u:     后接UID,    -L:     暂时冻结用户密码,无法登录    -U:     解冻    e.g.        shuhuang@shuhuang:~# useradd username        shuhuang@shuhuang:~# echo "123456" | passwd --stdin username        shuhuang@shuhuang:~# usermod -c "Shuhuang's test'" username        shuhaung@shuhuang:~# usermod -e "2015-12-13" username        shuhuang@shuhuang:~# grep username /etc/shadow        shuhuang@shuhuang:~# ll -d ~username        shuhuang@shuhuang:~# cp -a /etc/skel /home/username        shuhuang@shuhuang:~# chown -R username:username /home/username      (-R 递归修改)        shuhuang@shuhuang:~# chmod 700 /home/username        shuhuang@shuhuang:~# ll -a ~username

userdel:

    userdel [-r] username    -r:     连通用户的主文件夹也一起删除

finger: user information lookup program

    finger [-s] username    -s:     仅列出用户的帐号,全名,终端机代号和登录时间等

chfn: change real user name and infomation

    chfn [-foph] [帐号名]    -f:     后面接完整的大名    -o:     你办公室的房间号码    -p:     办公室的电话号码    -h:     家里的电话号码

chsh: change loin shell

    chsh [-ls]    -l:     列出系统上目前可以使用的shell    -s:     设置自己的shell    e.g.        shuhuang@shuhuang:~$ chsh -l        shuhuang@shuhuang:~$ chsh -s /bin/csh

id: print real user effective user and group IDs

    id [username]    e.g.    shuhuang@shuhuang:~$ id

groupadd:

    groupadd [-g gid] [-r] 用户组名    -g:     设置gid号码    -r:     新建系统用户组    shuhuang@shuhuang:~# groupadd group1; grep group1 /etc/group /etc/gshadow

groupmod:

    groupmod [-g gid] [-n group_name] 用户组名    e.g.        shuhuang@shuhuang:~$ groupmod -g 201 -n mygroup group1; grep mygroup /etc/group /etc/gshadow

groupdel:

    groupdel [groupname]    e.g.        shuhuang@shuhuang:~$ groupdel mygroup    注意:   只能删除/etc/passwd文件内不存在的group,否则就要连那个用户帐号也一起删除,或者修改那个帐号的GID

gpasswd:

    gpasswd groupname    gpasswd [-A user1, user2, ...] [-M user3, ...] groupname    gpasswd [-rR] groupname    -A:     后面的账户将成为用户组管理员    -M:     将后面的帐号加入该用户组    -r:     将groupname的密码删除    -R:     让groupname的密码失效    用户组管理员的操作    gpasswd [-ad] user groupname    -a:     将user加入到group中    -d:     将user从用户组中删除    e.g:        shuhuang@shuhuang:~# groupadd testgroup        shuhuang@shuhuang:~# gpasswd testgroup        shuhuang@shuhuang:~# gpasswd -A shuhuang testgroup; grep testgroup /etc/group /etc/gshadow

ACL(Access control list)的使用:

setfacl: 设置某个文件/目录的ACL规定

    setfacl [-bkRd] [{-m | -x} acl paramater] dest_filename    -m:     设置后续的acl参数给文件使用,不可与-x合用    -x:     删除后续的acl参数,不可与-m合用    -b:     删除所有的acl设置参数    -k:     删除默认的acl参数    -R:     递归设置acl,亦即包括子目录都会被设置起来    -d:     设置默认acl参数,只对目录有效,在该目录新建的数据会引用此默认值    e.g.        shuhuang@shuhuang:~$ touch acl_test        shuhuang@shuhuang:~$ ll acl_test        shuhuang@shuhuang:~$ setfacl -m u:zhuzhu:rwx acl_test        shuhuang@shuhuang:~$ ll acl_test        # 利用 "u:用户名:权限" 来设置        # 权限部分多了一个'+',且与原本的权限会有区别        shuhuang@shuhuang:~$ setfacl -m u::rwx acl_test        # 上面是设置该文件所有者        shuhuang@shuhuang:~$ setfacl -m g:zhuzhu:rwx acl_test        # 设置组 "g:用户组:权限"        shuhuang@shuhuang:~$ setfacl -m m:rx acl_test        # 设置mask "m:权限"        # 设置有效权限mask,用户或组所设定的权限必须要存在于mask的权限设置范围内才有效        # 比如acl_test 具有rwx权限范围,那么设置给zhuzhu的rx就都会有效        # 但是如果acl_test 仅只有r权限范围,那么设置给zhuzhu的rx就只有r有效,x权限木有效果        shuhuang@shuhuang:~$ setfacl -m d:u:zhuzhu:rx /srv/project        # 设置默认权限 "d:[ug]:用户列表:[rwx]"        # 加上d之后,在目录下新建的文件/目录又具有acl权限规定,否则没有        shuhuang@shuhuang:~$ setfacl -b /srv/project        # 删除所有acl设置

getfacl: 取得某个文件/目录的ACL设置项目

    getfacl filename
用户身份切换:

su:

    su [-ml] [-c command] [username]    '-':    "su -"使用login-shell的变量方式来登录系统,没有在后面加上username则是切换为root    -l:'-'类似,但后面需要加用户名    -m:     表示使用目前的环境设置,不读取新用户的配置文件    -c:     仅执行一次命令    e.g.        shuhuang@shuhuang:~$ su -        shuhuang@shuhuang:~$ exit        shuhuang@shuhuang:~$ su - -c "head -n 3 /etc/shadow"

sudo: /etc/sudoers

    sudo [-b] [-u new_username]    -b:     将后面的命令让系统自行执行,而不与当前的shell产生影响    -u:     后面接欲切换的用户,若没有username则表示切换为root    e.g.        shuhuang@shuhuang:~$ sudo -u zhuzhu touch /tmp/myzhuzhu        shuhuang@shuhuang:~$ ll /tmp/myzhuzhu        # 特别留意myzhuzhu这个文件是由zhuzhu所创建的    sudo执行过程:        1.系统于/etc/sudoers文件中查找该用户是否具有执行sudo的权限        2.若用户具有可执行sudo的权限,便让用户输入密码来确认        3.若密码正确则开始执行后续接的命令(root 执行sudo不需要密码)        4.若欲切换的身份与执行者的身份相同,也不许要输入密码

visudo 与 /etc/sudoers

    1.单一用户可进行root所有命令与sudoers的语法        /etc/sudoers 有如下一行            root    ALL=(ALL)   ALL        或者            root    ALL=(ALL:ALL)   ALL        那么,若新加入:            shuhuang    ALL=(ALL)   ALL        就是说明shuhuang这个帐号可以使用sudo执行任何系统管理命令        字段说明:            1.账户名称            2.登录者的来源主机名            3.可切换的身份            4.可执行的命令(命令使用绝对路径)            ALL 表示任何身份    2.利用用户组名及免密码的功能处理visudo        /etc/sudoers 有如下一行            %admin  ALL=(ALL)   ALL            # 在最左边加上 %,后面接 groupname, 这样任何加入admin用户组的用户都可以执行root命令        若是下面这样:            %admin ALL=(ALL)    NOPASSWD:   ALL            # 比上面多加了 NOPASSWD:,有了该关键字,就可以不需要输入密码    3.有限制的操作命令        shuhuang    ALL=(root)  !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root        # '!'表示不允许执行,'/usr/bin/passwd [A-Za-z]*'表示可以修改任意帐号的密码,但是最后限制了修改root密码        # 此时shuhuang这个帐号就可以帮root管理帐号密码的修改~~    4.通过别名设置visudo        visudo的别名有:            用户别名:   User_Alias            命令别名:   Cmnd_Alias            主机别名:   Host_Alias        e.g.            shuhuang@shuhuang:~# visudo            User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2            Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root            ADMPW   ALL=(root)  ADMPWCOM            # 如此设置之后,pro1,pro2,pro3,myuser1,myuser2就可以使用root的passwd管理其他人的密码

Linux 主机信息传递

w,who,last,lastlog: 查看当前登录者和最近登录者

    shuhuang@shuhuang:~$ w    shuhuang@shuhuang:~$ who    shuhuang@shuhuang:~$ last    shuhuang@shuhuang:~$ lastlog

write, mesg, wall: 发送信息

    write username [terminal]    # 前提是username 这个用户有开启接受mesg,开启命令是: shuhuang@shuhuang:~$ mesg y    e.g.        shuhuang@shuhuang:~$ who        shuhuang@shuhuang:~$ write zhuzhu        # 以ctrl+d结束    mesg [y/n]    e.g.        shuhuang@shuhuang:~$ mesg y        shuhuang@shuhuang:~$ mesg n    wall    e.g.        shuhuang@shuhuang:~# wall "I will shutdown my linux server..."

mail: 邮件

    mail username

pwck: 检查/etc/passwd 帐号配置

grpck: 检查/etc/group 组帐号配置

pwconv: convert to and from shadow passwords and groups

    1.比较/etc/passwd 及/etc/shadow,若/etc/passwd的帐号并没有/etc/shadow密码对应时,        pwconv会去/etc/login.defs取用相关的密码数据,并新建该帐号的/etc/shadow数据    2.若/etc/passwd内存在加密后的密码数据时,则pwconv会将改密码列移动到/etc/shadow内,        并将原本的/etc/passwd内相应的密码列变成x

pwuconv:

    1.将/etc/shadow内的密码数据列写回/etc/passwd并删除/etc/shadow文件

chpasswd: update passwords in batch mode

    chpasswd -m username:password    shuhuang@shuhuang:~$ echo "zhuzhu:12345" | chpasswd -m

特殊帐号的手工创建

    1.先新建所需要的用户组              (vi /etc/group)    2.将/etc/group与/etc/gshadow同步    (grpconv)    3.新建帐号的各个属性                (vi /etc/passwd)    4.将/etc/passwd与/etc/shadow同步    (pwconv)    5.新建该帐号的密码                  (passwd accountname)    6.新建用户主文件夹                  (cp -a /etc/skel /home/accountname)    7.更改用户主文件夹的属性            (chown -R accountname:group /home/accountname)

八 磁盘配额(quota)与高级文件系统管理

Quota:

    用途:        1.针对WWW Server,限制每个人的网页的容量限制        2.针对mail Server,每个人的邮件空间限制        3.针对file Server,每个人最大的可用网络硬盘空间        4.限制某一用户组所能使用的最大磁盘配额        5.限制某一用户的最大磁盘配额        6.以link方式使邮件可以作为限制的配额    使用限制:        1.仅能针对整个文件系统        2.内核必须支持quota        3.只对一般用户身份有效    规范设置选项        1.容量限制和文件数量限制(inode/blocks)        2.soft/hard            可以超过soft,但是有警告信息和处理磁盘的宽限时间,超过宽限时间则soft变成hard            hard限制,超过后用户不能新建任何文件,因为已经没有磁盘空间可以使用

quotacheck: 扫描文件系统并新建quota配置文件

    quotacheck [-avgufM] [/mount_point]    -a:     扫描所有在/etc/mtab内,含有quota支持的文件系统,此时mount_point可省略    -u:     针对用户扫描文件与目录的使用情况,会建aquota.user    -g:     针对用户组扫描文件与目录的使用情况,会建aquota.group    -v:     显示扫描过程的信息    -f:     强制扫描文件系统,并写入quota配置文件    -M:     强制以读写的方式扫描文件系统,只有在特殊情况下才使用    e.g.        shuhuang@shuhuang:~$ quotacheck -augv        # 若出现"quotacheck: Can't find filesystem to check or filesystem not mounted with quota"        # 则说明此时没有任何文件系统启动quota支持

quota启动,关闭与限制设置:

    quotaon [-avgu]    quotaon [-vug] [/mount_point]    -u:     针对用户启动quota    -g:     针对用户组启动quota    -v:     显示启动过程相关信息    -a:     根据/etc/mtab内的文件系统设置启动相关的quota,若没有加上-a则后面需要加特定的那个文件系统    e.g.        shuhuang@shuhuang:~$ quotaon -auvg        # /dev/hda3 [/home]: group quotas turned on        # /dev/hda3 [/home]: user quotas turned on        shuhuang@shuhuang:~$ quotaon -uv /var        # 启动/var 的user quota    quotaoff [-a]    quotaoff [-ug] [/mount_point]    -a:     全部文件系统的quota都关闭    -u:     仅针对mount_point 关闭user quota    -g:     仅针对mount_point 关闭group quota    edquota [-u username] [-g groupname]    edquota -t          # 修改宽限时间    edquota -p 范本帐号 -u 新帐号    -u:     进入quota编辑界面设置username的限制值    -g:     进入quota编辑界面取设置groupname的限制值    -t:     可以修改限制时间    -p:     复制范本,范本帐号是已存在并且已设置好的quota用户    e.g.        shuhuang@shuhuang:~$ edquota -u myquota1        shuhuang@shuhuang:~$ edquota -p myquota1 -u myquota2        shuhuang@shuhuang:~$ edquota -g myquotagrp        shuhuang@shuhuang:~$ edquota -t

quota限制值的报表

    quota [-uvs] [username]    quota [-gvs] [groupname]    -u:     后面可以接username,表示显示该用户的quota限制值,若没有username,则显示执行者的quota限制值    -g:     后可接groupname,表示显示该用户组的quota限制值    -v:     显示每个用户在文件系统的quota值    -s:     使用1024为倍数来指定单位    e.g.        shuhuang@shuhuang:~$ quota -uvs myquota1 myquota2        shuhuang@shuhuang:~$ quota -gvs myquotagrp

repquota -a [-vugs]

-a:     直接到/etc/mtab查询具有quota标志的文件系统,并报告quota的结果-v:     输出的数据将含有文件系统相关的详细说明-u:     显示出用户的quota限值-g:     显示出个别用户组的quota限值-s:     使用MG为单位显示结果e.g.    shuhuang@shuhuang:~$ repquota -auvs

warnquota: 超过限额者发出警告信息

setquota [-u | -g] 名称 block(soft) block(hard) inode(soft) inode(hard) filesystem

    shuhuang@shuhuang:~# quota -uv myquota1    shuhuang@shuhuang:~# setquota -u myquota1 100000 200000 0 0 /home    shuhuang@shuhuang:~# quota -uv myquota1
软件磁盘阵列:

mdadm:

    mdadm --detail /dev/md0    mdadm --create --auto=yes /dev/md[0-9] --raid-devices=N --level=[015] --spare-devices=N /dev/sdx /dev/hdx...    --create:           为新建RAID的参数    --auto=yes:         决定新建后面接的软件磁盘阵列设备,即/dev/md0,/dev/md1等    --raid-devices=N:   使用几个磁盘作为磁盘阵列的设备,N为数字    --spare-devices=N:  使用几个磁盘作为备用(spare)设备,N为数字    --level=[015]:      设置这组磁盘阵列的等级    --detail:           后面接的磁盘阵列的详细信息

九 例行性工作(crontab)

仅执行一次的工作调度

atd启动与at运行方式:

    shuhuang@shuhuang:~# /etc/init.d/atd restart    # 重新启动atd

at:

at的运行方式:    1.先寻找/etc/at.allow这个文件,写在这个文件中的用户才能使用at,没有在这个文件内的用户不能使用at(即使没在at.deny中)    2.如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,若写在at.deny的用户则不能使用at,没有即可以使用at    3.如果两个文件都存在,仅有root可以使用atat [-mldv] TIMEat -c work_id    -m:     当at工作完成后,以email通知用户工作完成    -l:     at -l 相当于 atq,列出系统上面的所有该用户的at调度    -d:     at -d 相当于 atrm,可以取消一个在at调度中的工作    -v:     可以使用较明显的时间格式列出at调度中的任务列表    -c:     可以列出后面接的该项工作的实际命令内容    TIME:   时间格式,可以定义什么时候要进行at这项工作的时间,格式有:        HH:MM               ex> 04:00            HH:MM时刻进行,若以超过,则明天的HH:MM时刻进行此项工作        HH:MM YYYY-MM-DD    ex> 04:00 2015-03-17            强制规定在某年某月某日的某时刻进行该工作        HH:MM[am | pm] [Month] [Date]   ex> 04pm March 17            也是一样,强制某月某日进行        HH:MM[am | pm] + number [minutes | hours | days | weeks]        ex> now + 5 minutes            ex> 04pm + 3 days    e.g.        shuhuang@shuhuang:~$ at now + 5 minutes        at> /bin/mail root -s "testing at job" < /root/.bashrc        at> <EOF>        shuhuang@shuhuang:~$ at now + 10 minutes        at> /usr/bin/mail root -s "test at job" < /root/.bashrc        at> <EOF>        shuhuang@shuhuang:~$ at -c 4        # 查看第4项工作内容        shuhuang@shuhuang:~$ at 23:00 2015-03-17        at> /bin/sync        at> /bin/sync        at> /sbin/shutdown -h now        at> <EOF>        # 设置在2015-03-17日23:00自动关机

atq: 用来查看at工作

atrm [jobnumber]: at工作删除

        shuhuang@shuhuang:~$ atq        5   2015-03-17 23:00 a shuhuang        # jobnumber = 5, start_time = 2015-03-17 23:00, excutor = shuhuang        shuhuang@shuhuang:~$ atrm 5        # rm the job whose jobnumber is 5

batch: 系统有空时才执行后台程序(cpu工作负载小于0.8的时候才进行你所执行的工作任务)

        shuhuang@shuhuang:~$ batch 23:00 2015-03-17        at> /bin/sync        at> /bin/sync        at> /sbin/shutdown -h now        at> <EOF>       # ctrl + d
循环执行的例行性工作调度(由cron这个系统服务控制)

crontab: 新建循环型工作调度

/etc/cron.allow:    将可以使用crontab的帐号写入其中,若不在这个文件内的用户则不可以使用crontab/etc/cron.deny:    将不可以使用crontab的帐号写入其中,若未记录到这个文件当中的用户,就可以使用crontab    /etc/cron.allow比/etc/cron.deny的优先级高(与at类似)当使用crontab这个命令新建工作调度之后,该项工作会被记录到/var/spool/cron里面,而且是以帐号来作为判别crontab [-u username] [-l|-e|-r]    -u:     只有root才能进行这个任务,即帮其他用户新建/删除crontab工作调度    -e:     编辑crontab的工作内容    -l:     查阅crontab的工作内容    -r:     删除所有的crontab的工作内容,若仅删除一项,请用-e编辑    e.g.        shuhuang@shuhuang:~$ crontab -e        # minute hour  day   month  weeks command        #  0~59  0~23  1~31  1~12   0~7        # weeks的0和7都表示星期天        # 特殊字符:            '*':    for 'any'            ',':    代表分隔时段,比如执行工作是3:006:00,就是:    0  3,6  * * * commmand            '-':    表示一段时间范围,如8点到12点的每20分都进行一项工作: 20  8-12 * * * command            '/n':   n是数字,每隔n单位间隔的意思,如每五分钟进行一次:   */5  * * * * command    # '*'与'/5'搭配,等价于0-59/5        shuhuang@shuhuang:~$ crontab -e        编辑:            */5 * * * * /home/shuhuang/test.sh        # 每五分钟会执行/home/shuhuang/test.sh

/etc/crontab: 系统的配置文件

    如果是系统的例行性工作,那么只需编辑/etc/crontab这个文件就OK    'crontab -e' 是/usr/bin/crontab 这个执行文件,但是 /etc/crontab是个纯文本文件,可用root身份编辑一下    若相让系统每小时帮你执行某个命令,将该命令写成script,并将该文件放置到/etc/cron.hourly/目录下即可

cron进行例行性的工作的注意事项:

    1.资源分配不均匀问题,当有多个crontab在同一时间点执行时,系统变得非常繁忙        解决:   用','分隔时段进行那些工作,降低系统资源分配不均匀问题    2.取消不要的输出选项,如果执行结果有输出数据,则会mail给MAILTO设置的帐号,那当有调度出错时,会一直法信息(如DNS的检测系统,        若DNS上层主机挂掉,那么就是一直发送错误信息),        解决:   使用数据流重定向,将输出结果输出到 /dev/null    3.安全的检验,检查/var/log/cron的内容来查看是否有非你设置的cron被执行    4.周与日,月不可同时并存,就是设置了周,那么日和月就不要设置,反之,设置了日和月份,那么周就不要设置
可唤醒停机期间的工作任务

anacron:

    anacron会去分析现在的时间与时间记录文件所记载的上次执行anacron的时间,    若有发现某些时刻没有进行crotab,此时就会进行未那些没有被执行的crontab任务    anacron运行时间:    1.系统开机期间运行  2.写入crontab的调度中    anacron [-sfn] [job]..    anacron -u [job]..    -s:     开始连续执行各项工作,会依据时间记录文件的数据判断是否进行    -f:     强制进行,而不去判断时间记录文件的时间戳    -n:     立刻进行未进行的任务,而不延迟(delay)等待时间    -u:     仅更新时间记录文件的时间戳,不进行任何工作    job:    由/etc/anacrontab定义的各项工作名称

/etc/anacron:

    SHELL=/bin/sh    PATH=/sbin:/bin:/usr/sbin:/usr/bin    MAILTO=root    1   65  cron.daily      run-parts /etc/cron.daily    7   70  cron.weekly     run-parts /etc/cron.daily    30  75  cron.monthly    run-parts /etc/cron.monthly    # day   delay_time  workname    command    # workname can be defined by yourself, command is same to the crontab's command    "anacron -s cron.daily":        1.由/etc/anacrontab分析cron.daily这项工作名称的天数为1        2.由/var/spool/anacron/cron.daily取出最近一次执行anacron的时间戳        3.由上个步骤与目前的时间相比较,若差异天数为1天以上(含一天),就准备进行命令        4.若准备执行命令,根据/etc/anacrontab的设置将延迟65分钟        5.延迟时间过后,开始执行后续命令,即"run-parts /etc/cron.daily"        6.执行完毕后,anacron程序结束

十 程序管理与SELinux初探

程序: 通常为二进制程序放置在存储媒介,以物理文件的形式存在

进程:

被加载到内存当中运行的程序,那么在内存内的那个数据就被称为进程(process)程序被触发后,执行者的权限与属性,程序的代码与所需的数据都会被加载到内存中,操作系统并给予这个内存的单元一个标识符(PID),进程就是一个正在运行的程序

前台: 你可以控制与执行命令的这个环境称为前台(foreground)

后台: 可以自行运行的工作,你无法使用[ctrl]+c终止,可以使用bg/fg调用该工作(background)

子进程/父进程

‘&’:将工作丢到后台(终端模式)中

    e.g.    shuhuang@shuhuang:~$ tar -zjc -f /tmp/etc.tar.gz /etc &            shuhuang@shuhuang:~$ tar -zjcv -f /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &

jobs:

    jobs [-lrs]    -l:     列出job number与命令串,同时列出PID号码    -r:     仅列出正在后台(终端模式)run的工作    -s:     仅列出正在后台(终端模式)当中暂停(stop)的工作    e.g.        shuhuang@shuhuang:~$ jobs -l        [1]- 10314 Stopped          vim ~/.bashrc        [2]+ 10833 Stopped          find / -print        # [1]: job number,     '-'/'+': 最近/最近最后第2个被放置到bg的工作码,  10314: PID,  Stopped: states

fg: 取出后台(终端模式)程序到前台

    fg %jobnumber    jobnumber:  工作号码,'%'可有可无    e.g.        shuhuang@shuhuang:~$ fg        # 默认取最近一个被放置到后台(终端模式)的工作        shuhuang@shuhuang:~$ jobs        shuhuang@shuhuang:~$ fg %1

bg: 让程序在后台(终端模式)运行

    bg %jobnumber    e.g.        shuhuang@shuhuang:~$ jobs ; bg %3; jobs

kill: 管理后台(终端模式)工作

    kill -signal %jobnumber    kill -l    -l:         列出目前kill能够使用的信号(signal)    -signal:    工作指示(可用man 7 signal查看相关)        -1:     重新读取一次参数的配置文件        -2:     代表与由键盘输入 [ctrl]+c 同样操作        -9:     立刻强制删除一个工作(多用在删除不正常的工作)        -15:    以正常的程序方式终止一项工作(与-9 不一样,多用在删除正常的工作,以正常步骤结束)    若直接使用kill + number命令令结束工作,那么那个number默认是表示PID,    e.g.        shuhuang@shuhuang:~$ kill 10833     # 删除掉PID为10833的程序        shuhuang@shuhuang:~$ jobs        # 先查看有哪些jobs可以kill        shuhuang@shuhuang:~$ kill -15 %1        shuhuang@shuhuang:~$ jobs        shuhuang@shuhuang:~$ kill -SIGTERM %1

nohup: 脱机管理命令

    nohup [命令与参数]    nohup [命令与参数] &

进程的查看:

ps:

ps aux      <== 查看系统所有的进程数据ps -lA      <== 也是能够查看系统的数据ps axjf     <== 连同部分进程树状态-A:     显示所有进程-a:     不与terminal有关的进程-u:     有效用户(effective user)相关的进程x:      与-a一起使用,列出比较完整信息l:      较长,较详细地将信息列出j:      工作的格式(jobs format)-f:     更完整的输出e.g.    shuhuang@shuhuang:~$ ps -l    说明:        F:  进程标志(process flags),说明这个进程权限,常见码:            4   -   此进程的权限为root            1   -   此进程仅可复制(fork),无法实际执行(exec)        S:  进程的状态(STAT),主要状态有:            R(Running): 该进程处于运行中            S(Sleep):   该进程属于睡眠(idle),但可以被唤醒(signal)            D:          不可被唤醒的睡眠状态            T:          停止状态,可能是工作控制或除错(traced)状态            Z:          "僵尸"状态,进程已终止,但是无法被删除至内存外        UID:    该进程被UID所拥有        PID:    该进程PID        PPID:   该进程父进程PId        C:      CPU使用率(单位%)        PRI/NI:     priority/Nice 缩写,CPU所执行的优先级,数值越小表示越快被CPU所执行          ADDR:       kernel function,表示该进程在内存的哪个部分,如果是running,一般会显示'-'        SZ:         表示用掉多少内存        WCHAN:      表示内存是否正在运行中,'-'表示正在运行        TTY:        终端机位置        TIME:       使用掉的CPU时间,此进程实际花费CPU运行的时间        CMD:        command    shuhuang@shuhuang:~$ ps aux    说明:        USER:   该进程属于哪个用户帐号        PID:    该进程的进程标识符        %CPU:   该进程使用掉的CPU资源百分比        %MEM:   该进程所占用的物理内存        VSZ:    该进程使用掉的虚拟内存量(KB)        RSS:    该进程占用的固定的内存量(KB)        TTY:    该进程在哪个终端机运行,与终端机无关则显示?,若是pst/0等,则表示为由网络链接进主机的进程        STAT:   该进程目前的状态        START:  该进程被触发启动的时间        TIME:   该进程实际CPU运行时间        COMMAND:    该进程实际命令

top: 动态查看进程状态

    top [-d number] | top [-bnp]    -d:     后接数字,就是整个进程界面更新的秒数,默认5s    -b:     以批次的方式执行top,通常搭配数据重定向    -n:     后接数字,与-b搭配,需要进行几次top的输出结果    -p:     指定PID来进行查看监测    在top执行过程中,可使用下面按键命令:        ?:  显示top中可以输入的按键命令        P:  以CPU的使用资源排序        M:  以内存使用资源排序        N:  以PID来排序        T:  由该进程使用CPU的时间积累来排序(TIME+)        k:  给与某个PID一个signal        r:  给与某个PID重新制定一个nice值        q:  离开top软件的按键    e.g.        shuhuang@shuhuang:~$ top -d 2        说明:            第一行(top...):     这一行显示的信息分别为                目前的时间                开机到现在所经过的时间                已登录系统的用户人数                系统在1,5,15分钟的平均工作负载: batch 工作方式为负载小于0.8就是这个负载            第二行(Tasks...):   显示目前进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie)                                zombie指僵尸进程,如果不是0,那就存在进程已变成僵尸            第三行(Cpus...):    显示CPU的整体负载,每个选项可用?查阅,需要注意的是%wa,是指I/Owait,                                通常系统会变慢都是I/O产生的问题比较大。可以按"1"来切换成不同CPU的负载            第四与第五行:       目前物理内存与虚拟内存(Mem/Swap)的使用情况,            第六行:             top中输入命令显示状态的地方

pstree:

    pstree [-A|U] [-up]    -A:     各进程树之间的链接以ASCII字符来链接    -U:     各进程树之间的链接以utf-8码的字符来链接,某些终端口可能有error    -p:     同时列出每个进程的PID    -u:     同时列出每个进程的username    e.g.        shuhuang@shuhuang:~$ pstree -A        shuhuang@shuhuang:~$ petree -Aup

signal:

    1   SIGHUP      启动被终止的进程,可让PID重读自己的配置文件,类似重启    2   SIGINT      相当于用键盘输入[ctrl]+c来中断一个进程的进行    9   SIGKILL     代表强制中断一个进程的进行,类似错误中断程序    15  SIGTERM     以正常的结束进程来终止该进程    17  SIGSTOP     相当于键盘输入[ctrl]+z来暂停一个进程的进行

kill:杀死进程

    kill -signal PID    killall [-iTe] [command name]    -i:     interactive,交互式的,若需删除会出现提示符给用户    -e:     exact,后面接的command name要一致,但整个完整的命令不能超过15个字符    -I:     命令名称忽略大小写    e.g.        shuhuang@shuhuang:~$ killall -1 syslogd         # 给syslogd这个启动命令启动的PID一个SIGHUP的信号        shuhuang@shuhuang:~$ killall -9 httpd           # 强制终止所有以httpd启动的进程        shuhuang@shuhuang:~$ killall -i -9 bash         # 一次询问每个bash进程是否需要被终止

Priority 与 Nice值:

    Priority,即PRI值,越低代表越优先,PRI值是有内核动态调整,用户无法直接调整PRI值,查看命令: "ps -l"    PRI值无法修改,所以要调整进程的优先执行时,可修改Nice值(NI),有: PRI(new) = PRI(old) + nice    nice值有正有负,并且:        1.nice值可调整范围为:   -20~19        2.root可随意调整自己或他人进程的Nice值,且范围是:   -20~19        3.一般用户仅可以调整自己的进程的Nice值,且范围为:   0~19    nice命令:        nice [-n number] command        -n:     后接树值,范围是: -20~19        e.g.            shuhuang@shuhuang:~$ nice -n 5 vi &            # '&'指后台执行    renice命令:        renice [number] PID        e.g.            shuhuang@shuhuang:~$ ps -l            # 用于查看进程的PID            shuhuang@shuhuang:~$ renice 10 PID

系统资源的查看

free: 内存查看

    free [-b|-k|-m|-g] [-t]    -b: free默认单位是KB,使用-b(bytes),-k(KB),-m(MB),-g(GB)    -t: 输出swap和内存总量    e.g.        shuhuang@shuhuang:~$ free -m        shuhuang@shuhuang:~$ free -m -t

uname: 查看系统与内核相关信息

    uname [-asrmpi]    -a: 所有系统相关的信息    -s: 系统内核名称    -r: 系统内核版本    -m: 本系统的名称    -p: CPU类型    -i: 硬件平台

uptime: 查看系统启动时间与工作负载(top命令的第一行信息)

    e.g.    shuhuang@shuhuang:~$ uptime

netstat: 跟踪网络

    netstat -[atunlp]    -a: 将目前系统上所有的链接,监听,socket数据都列出来    -t: 列出tcp网络数据包的数据    -u: 列出udp网络数据包的数据    -n: 不列出进程的服务名称,以端口号(port number)来显示    -l: 列出目前正在网络监听(listen)的服务    -p: 列出该网络服务的进程PID    e.g.        shuhuang@shuhuang:~$ netstat        说明:            Active Internet connections (w/o servers)                Proto:      网络的数据包协议,主要分为TCP/UDP数据包                Recv-Q:     非由用户进程链接到此socket的复制的总字节数                Send-Q:     非由远程主机传送过来的acknowledged总字节数                LocalAddress:   本地IP端口情况                ForeignAddress: 远程主机的IP端口情况                State:      链接状态,主要建立(ESTABLISED)及监听(LISTEN)            Active UNIX domain sockets (w/o servers)                Proto:      一般就是unix                RefCnt:     链接到此socket的进程的数量                Flags:      链接标识                Type:       socket访问类型,主要有确认链接的STREAM与不需要确认的DGRAM                State:      若为CONNECTED表示多个进程之间以建立链接                Path:       链接到此socket的相关程序的路径,或者是相关数据输出的路径        shuhuang@shuhuang:~$ netstat -ntlp        # 找出目前系统上已在监听的网络链接及其PID

dmesg: 查看内核检测的信息

        shuhuang@shuhuang:~$ dmesg | less

vmstat: 检测系统资源变化

    vmstat [-a] [delay [count]]    vmstat [-fs]    vmstat [-S 单位]    vmstat [-d]    vmstat [-p 分区]    -a:     使用inactive/active代替buffer/cache的内存输出信息    -f:     开机到目前为止系统复制的进程    -s:     将一些事件(开机至当前)导致的内存变化情况列表说明    -S:     后面可以接单位,让显示的数据有单位,如K/M代替bytes的容量    -d:     列出磁盘的读写总量统计表    -p:     后面列出分区,可显示该分区的读写总量统计    e.g.        shuhuang@shuhuang:~$ vmstat 1 3     # 每1s更新一次,总共更新3次        说明:            procs选项:                r:  等待运行中的进程数量                b:  不可唤醒的进程数量            memory选项:                swpd:   虚拟内存被使用的容量                free:   未被使用的容量                buff:   用于缓冲存储器                cache:  用于高速缓存            swap选项:                si: 由磁盘中将程序取出的量                so: 由于内存不足而将没用到的程序写入到磁盘的swap的容量            io(磁盘读写):                bi: 由磁盘写入的块数量                bo: 写入到磁盘去的块数量            system(系统):                in: 每秒被中断的进程次数                cs: 每秒钟进行的事件切换次数            CPU选项:                us: 非内核层的CPU使用状态                sy: 内核层所使用的CPU状态                id: 闲置状态                wa: 等待I/O所耗费的CPU状态                st: 被虚拟机所盗用的CPU使用状态        shuhuang@shuhuang:~$ vmstat -d      # 显示系统上面所有的磁盘读写状态

/proc/: 内存当中的数据写入到这个目录下

    /proc/cmdline文件:      加载kernel时执行的相关参数,可以了解系统如何启动    /proc/cpuinfo文件:      本机的CPU的相关信息,包含频率,类型与运算功能    /proc/devices文件:      这个文件记录系统各个主要设备的主要设备代号,与mknod有关    /proc/filesystems:      目前系统已经加载的文件系统    /proc/interrupts:       目前系统上面的IRQ分配状态    /proc/ioports文件:      目前系统上面各个设备所配置的I/O地址    /proc/kcore文件:        这个就是内存的大小    /proc/loadavg:          top/uptime的三个平均数值    /proc/meminfo:          使用free列出的内存信息    /proc/modules文件:      目前我们的linux已经加载的模块列表,也可以想成驱动程序    /proc/mounts文件:       系统已经挂载的数据,就是用mount这个命令调出的数据    /proc/swaps文件:        记录使用的分区    /proc/partitions:       记录fdisk -l会出现的所有分区    /proc/pci文件:          在PCI总线上面每个设备的详细情况,可用lspci查询

fuser: 查看已打开或已执行程序打开的文件

    fuser [-umv] [-k [i] [signal]] file/dir    -u:     除了进程的PID外,同时列出该进程的所有者    -m:     后面接的文件名会主动提到该文件系统的所顶层    -v:     可以列出每个文件与程序还有命令的完整相关性    -k:     找出使用该文件/目录的PID,并试图以SIGKILL这个信号给与该PID    -i:     必须与-k配合,在删除PID之前会现先询问用户意愿    -signal:    如-1 -15等,若不加默认是SIGKILL(-9)    e.g.        shuhuang@shuhuang:~$ fuser -uv .        说明:        ACCESS选项的意义:            'c':    此进程在当前目录下            'e':    可被出发为执行状态            'f':    是一个被打开的文件            'r':    代表顶层目录(root directory)            'F':    该文件被打开,不过在等待回应中            'm':    可能为分享的动态函数库

lsof: 列出被进程打开的文件

    lsof [-aUu] [+d]    -a:     多项数据需要同时成立才显示结果(and)    -U:     仅列出unix like系统的socket文件类型    -u:     后面接username,列出该用户相关进程所打开的文件    +d:     后面接目录,找出目录下面被打开的文件    e.g.        shuhuang@shuhuang:~$ lsof       # 默认列出系统上所有已经打开的文件与设备        shuhuang@shuhuang:~$ lsof -u root -a -U        shuhuang@shuhuang:~$ lsof +d /dev        shuhuang@shuhuang:~$ lsof -u root | grep bash

pidof: 找出某个正在执行的进程的PID

    pidof [-sx] program_name    -s:     仅列出一个PID而不列出所有PID    -x:     同时列出该program name可能的PPID那个进程的PID    e.g.        shuhuang@shuhuang:~$ pidof init bash

十一 认识系统服务(daemons)

十二 认识与分析日志文件

linux常见日志文件名

    /var/log/cron:      例行性工作调度    /var/log/dmesg:     记录系统在开机的时候内核检测过程所产生的各项信息    /var/log/lastlog:   可以记录系统上面所有帐号最近一次登录系统时的相关信息(lastlog命令)    /var/log/mail*:     记录邮件往来信息    /var/log/messages:  几乎系统发生的错误信息都会记录于此(very important)    /var/log/secure:    只要牵涉到需要输入帐号密码,登录时都会被记录在此文件    /var/log/wtmp,/var/log/faillog: 登录系统者的帐号信息
1 0
原创粉丝点击