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 : 向下查询string ?string :向上查询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 : 文件容量用易读方式(GB,KB)表示; -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 表示设置SUID,2 表示设置SGID, 1 表示设置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后面的22和0-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为'#'其他'$')
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字符 ? 0或1个前一个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: 使用M,G为单位显示结果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:00和6: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: 登录系统者的帐号信息
- linux系统命令笔记
- mysql (on suse linux) 系统命令笔记
- mysql (on suse linux) 系统命令笔记
- mysql (on suse linux) 系统命令笔记
- python 调用Linux系统命令笔记
- Linux笔记三 之 系统命令
- linux 系统命令的学习笔记总结
- LINUX学习笔记1——LINUX系统命令
- 【linux 命令】系统命令
- 【Linux系统】Linux命令
- Linux学习笔记之系统路径和命令
- linux基础学习笔记之查看系统硬件信息命令
- Linux系统命令及Shell脚本实践指南笔记
- Linux学习笔记--top命令(监控linux系统状况的命令)
- 【linux学习笔记之一】linux系统目录结构以及常用系统命令
- linux系统命令--find命令
- Linux 命令-系统信息命令
- Linux系统命令(系统设置)
- 开源项目Chart
- linux性能监控和优化命令iostat
- CocoaPods安装和使用
- linux中fork()函数详解(原创!!实例讲解)
- C++中delete和delete[]的区别
- linux系统命令笔记
- 【Spring】——AOP实现原理(基于JDK和CGLIB)
- Android_读取Excel_更改Excel内容,数据库保存数据
- CSS—Tooltip
- 最大流问题
- 黑客编程——制作AutoRun.inf免疫程序
- sysbench的安装
- 二分法查找(递归和非递归)
- 有章法的学习c++(5)类型转换(一)