文章转自tshare365,作者wood-man#本文档仅罗列了一些常用命令及其使用频率较高的参数. #您对本文档的建议和意见,可加入“Linux运维技术交流 347163978”并“@木头人”,谢谢! #version 2.7 一、关于文件和目录的基本命令 #ls -F 区分文件类型,通常目录加"/" 可执行加"*" -i 显示inode -l 长列表 -r 反序 -S 按大小排序 -X 按文件扩展名排序 -t 按修改时间排序 -lg 不显示UID -lG 不显示GID -lu 输出最后的访问时间 -lh 进率为1000,根据文件大小显示K、M、G -ln 以数字替换UID和GID -d 显示目录即"." #stat 查看文件的所有信息(inode size 时间戳),但没有文件类型。 stat filename #touch 改变文件的时间戳,但经常被用来创建空白文件 -c 什么也没有发生 -d 修改访问时间和修改时间, 格式 touch -d "yyyy-mm-dd hh:mm:ss" filename -md 仅变更修改时间 -ad 仅变更访问时间 touch -t mdyHM filename 修改amc时间 touch -d "3 days ago" filename #支持昨天yesterday、tomorrow等 #file 查看文件类型,分成三类:文本、可执行、数据 file filename #type 用于查看命令类型 type commond #cat cat filename 查看文件内容 cat -n 每行加上序号,等效“nl filename” cat -s 连续多个空行压缩为一个空行 cat -T 用"^I"替换制表符 #nl 默认nl=“nl -b t” -b t 空行不计入行号 -n (ln,rn,rz)左对齐、右对齐、补零 -w 行号的位数 1
2
3
4
5
6
7
[root@smb scripts]# nl -b a -n rz -w 3 qq
001 sb.360.cn
002 ss.360.cn
003 aioo
004 qo
005
006 xx.360.com.cn
#more: 显示到最后一行自动退出,“q"退出 “d"后滚半屏,“spacebar"下一屏,“b"前一屏,“enter"下一行,"=“显示当前最后一行行号; “v” 启动vi编辑器,"/expression"查找匹配表达式的内容,“n"下一处,"!cmd"执行shell命令 #less: 显示到最后一行不退出,more的加强版。读取大文件时不读取整个文件,优于"cat"和"more”。 支持more的命令且增加"u"前滚半屏 #tail 显示文件尾部,默认是后10行 -n x 显示后x行 -f 维持tail处于活动状态,有新内容加入则显示。 -fs x 间隔x秒输出,用于循环输出 -c 100 输出最后100字节 1
tail -n +5 /etc/passwd #从第5行开始显示
#head 显示文件头部,默认是前10行 head -n x 显示前x行 1
tail /etc/passwd | head -1
1
head -n -20 /etc/passwd #后20行不显示
#cd cd 默认回家,等效"cd ~” cd – 切换到上一个路径 cd .. 切换到上层目录 #cp 默认 alias “cp”=“cp -i” cp sou des -a 归档,保留现有属性,常用于备份 -p 保留文件属性(UID GID 时间戳) -f 强制覆盖不提示 ,"-i"正好相反 -l 创建链接而非复制,等效"ln”。"-s"为创建符号链接,二者的区别:前者是条真实的路而后者只是个路标。 -r 递归复制文件,R是复制目录,(在ls chmod chown rm等中的意义相同) -u 仅在原文件比目标文件新的情况下复制。即,更新。 #mv 移动文件或变更名称。 mv sou des #rm 删除文件,默认 “rm”=“rm -i” -f 强制删除 -i 提示 -r 递归删除,常用于删除目录,经典命令 “rm -rf /*” #mktemp 建立文件,不带参数时Centos6默认是/tmp/tmp.XXXXXXXXXX mktemp test.XXX 最少3个,./test.XXX的"XXX"自动被替换成随即数 mktemp -t test.XXX 强制将文件创建在/tmp目录下,默认输出绝对路径 mktemp -d test.XXX 创建目录 #mkdir & rmdir mkdir -p /path/filename 创建目录,若无则创建,有也不报错。 rmdir /path/filename 删除空目录 #sort 排序 -n 按数字大小排序,将数字识别为数字而不是字符 -r 反序 -M 按月排序,可识别3字符的月份,如:May -b 忽略起始的空白 -C 不排序不报告,“c"不排序但是检查数据是否排序,未排序则报告 -f 默认将大小字母排前,忽略大小写 -g 按通用数值来排序 -i 排序时忽略不可打印的字符 -m 将两个已排序数据合并 -o 将结果出入指定文件,等效”–output=file” -R 按随即生成的哈希表的健值排序 -k 从POS1开始,–key=POS1 s-t 指定一个用来区分健位置的字符 1
cat /etc/passwd | sort -t “:” -k 3
#uniq -c 显示重复的次数 -d 仅显示重复的行 -u 仅显示不重复的行 #grep 查找 -q 不显示结果,返回状态信息,匹配返回“0” 。 -v 排除匹配到的行,即显示没匹配到的行。 -n 结果前加上所在行行号 -c 显示多少行匹配 -l 搜索哪些文件包含 关键字 -i 忽略大小写 -A n 显示匹配行以及其后N行,B为之前,C为前后。 -e 多匹配模式 1
grep -e s -e b filename
#find 查找 -a: 与条件 -o: 或条件 -not: 非条件 -name 匹配文件名,支持”*“和”?” -atime n 搜索在n天前读取过的文件 -ctime n 搜索在n天前修改过 -group UID 搜索属组为UID的文件 -nogroup 搜索属组为无效组(通常用"ll"显示为数字)的文件 -size +nk 搜索大于nk的文件 -type 搜索类型[f|d|c|b]等 1
2
3
4
find ./ -type f ( -nouser -o -nogroup )
#查找无效属主或者属组的文件
find ./ -type f -exec grep -l key {} ; >> /mnt/find
#遍历当前路径下的所有文件查找内容中含"key"的行添加到/mnt/find中
#locate 通过系统数据库查找文件,约等于"find -name” -i 忽略大小写 -r 可接正则 updatedb 更新系统数据库(/var/lib/localedb) #whereis -b 只找binary格式的文件 -m 只找说明文件manual路径下的档案,/var/share/man #awk 一般默认是GNU的awk(gawk),“rpm -qi gawk"查看软件信息 -F | FS 输入字段分割符,默认为空格 RS 输入数据行分割符 OFS 输出字段分隔符,默认为换行符 ORS 输出数据行分割符 NR 已处理输入数据的行目, FNR 当前前文件中已处理输入数据的行数,每个文件都从1开始计数。 NF 字段总数 BEGIN 开始 END 结束 1
2
3
4
5
[root@smb share]# awk ‘BEGIN {FS=”.";OFS="->"}{print $1,$2,$3} END{print $4,$5}’ base01
one->two->tree
six->seven->eight
eleven->twelve->thirteen
fourteen->fifteen
FIELDWIDTHS 根据字段宽度大小取值 ENVIRON 使用关联数组从shell环境变量中取值 1
2
[root@smb share]# awk ‘BEGIN {print ENVIRON[“PATH”]}’
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
-f 从文件都取参数 -v 允许在BEGIN代码前声明变量 1
2
3
4
5
6
7
8
[root@smb share]# cat srpts1
BEGIN{print “The starting value is”,n;}
{print $n}
[root@smb share]# awk -v n=3 -f srpts1 base04
The starting value is 3
13
23
33
–re-interval 支持区间{},sed -r 支持区间{n,m} 1
2
3
4
[root@smb test]# awk –re-interval ‘/^[0-9]{5}$/ {print $0}’ date4
11111
22222
34521
匹配符 ~ 1
2
[root@smb share]# awk ‘BEGIN {FS=":"}$1~/^r/{print $1,$NF}’ /etc/passwd
root /bin/bash
#sed “-n"仅显示匹配;“p"打印sed输出的一行;"-i” 修改源文件;“g"全局处理; 1
2
sed -n ’s/old/new/gp’ file #替换所有匹配的行并显示
sed -n ‘2s/old/new/p’ file #在第2行中匹配且显示替换后的结果
“!“排除命令,下列相当于 grep -v ;跳转命令"b"基于地址、地址区间排除 1
2
3
4
5
6
[root@smb test]# sed -n ‘/first/!p’ date
This is the header line.
This is the second line.
The End.
[root@smb test]# sed -n ‘1,2b;s/This is//p’ date
the second line.
1
2
sed ’s@/bin/bash@/bin/csh@g’ /etc/passwd
#用特殊符号替代”/“作为分割符,则不需要用”"来转义
“d"删除行;“i"前插一行;“a"后增一行; 1
2
3
sed ‘2,3d’ file #删除文件的第2行和第3行
sed ‘2,$/key/d’ file #从第二行开始匹配,若成功则删除
sed ‘/1/,/3/d’ file #匹配到含"1"的行开启删除模式,匹配到含"3"的行则删除该行且关闭删除功能.(慎用)
“r”:将指定文件的内容追加到文件 1
2
3
4
5
6
7
[root@smb share]# sed ‘/xxx/{
r /etc/issue
d
}’ hello
Hello world!
CentOS release 6.6 (Final)
Kernel \r on an \m
“c”:替换行 1
2
3
4
[root@smb share]# sed ‘2,3c this is line 2 and 3’ date1
line 1
this is line 2 and 3
line 4
“y”:替换字符,默认是全局替换 1
2
3
4
5
6
[root@smb share]# sed ‘y/123/789/’ date1
line 7
line 8
line 9
line 4
this is line 7 again.
“=“打印行号;“l"可显示不可打印的特殊字符,如行尾的”$”; 1
2
3
[root@smb test]# sed -n ‘/first line/{=;l}’ date
2
This is the first line.$
and符号”&” 1
2
[root@smb test]# echo “My cat sleeps in his hat” | sed ’s/.at/"&"/g’
My “cat” sleeps in his “hat”
圆括号的妙用 1
2
[root@smb test]# echo “Help you” | sed ’s#(H)el(p)#\1\2#’
Hp you #重庆话翻译就是“哈皮”
“n”:移动到数据流的下一行; 1
2
[root@smb test]# sed -n ‘/first line/{n;p}’ date
This is the second line.
“N”:将下一行并入当作同一行处理 1
2
3
4
5
6
[root@smb test]# sed -n ‘N;s/System.Administrator/Desktop User/p’ date2
The first meeting of the linux Desktop User’s group will be held on Tuesday.
#若文件总行数为奇数且匹配项在最后一行命中,因没有下一行,“N"会向sed编辑器发出停止指令
[root@smb test]# sed -n ‘$!N;s/System.Administrator/Desktop User/p’ date2
The first meeting of the linux Desktop User’s group will be held on Tuesday.
Desktop User’s in the end
“D"删除到换行符后停止;“P"打印多行模式空间中的第一行。通常"D"和"P"配合"N"适用。 sed有两个缓存区域:模式空间和保持空间;运行时的数据都在模式空间。 “h"模式空间复制到保持空间;“H"附加;“g"保持空间复制到模式空间;“G"附加;“x"交换两个缓存区域的内容。 1
2
3
4
5
6
[root@smb test]# sed ‘/^$/d;$!G’ date #插入空白行,确保空行和尾行不增加。
[root@smb test]# sed -n ‘{1!G;h;$p}’ date #简单点"tac date"实现文件反序输出行
The End.
This is the second line.
This is the first line.
This is the header line.
执行详解 1:读取第一行时保持空间为空,所以不附加否则最后会显示空行。将第一行复制到保持空间。 2:读取第二行到模式空间,将保持空间中的第一行附加到第二行后,然后覆盖保持空间。 3:重复2的步骤,直到最后一行,然后触发”$p"打印最后一行。 二、系统监控 #ps 查看进程 ps -e 显示所有进程 ps -f 显示完整格式的输出,通常和-e连用。 [UID PID PPID C(生命周期) STIME(启动时间) TTY TIME CMD] 1
2
3
4
[root@sb ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun02 ? 00:00:01 /sbin/init
root 2 0 0 Jun02 ? 00:00:00 [kthreadd]
ps -a 显示除控制进程和无终端进程外的其他进程 ps -l 显示的参数比较多 1
2
3
4
[root@sb~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 26422 26412 0 80 0 - 1314 - pts/0 00:00:00 bash
4 R 0 26573 26422 0 80 0 - 1219 - pts/0 00:00:00 ps
1
2
#[F系统标记 S进程状态(0运行s休眠R运行z僵化t停止) PRI(优先级) NI(nice值)
ADDR(内存地址) SZ(换出需要的空间) WCHAN(休眠的内核函数地址)]
ps -H 命令层级,(CMD)处 ps –forest 显示层级信息并用ACSII字符绘出 找“僵尸” 1
2
ps -la |awk ‘{print $2,$3}’ |grep -i z #根据情况修改显示的字段
ps -A -o stat,ppid,pid,cmd | grep -i z
#top top:当前时间,up:运行时间,x users:登录用户,load average:1分钟 5分钟 15分钟 l 开关平均负载信息行 t 开关CPU信息行 m 开关SWAP行 k 干掉指定的PID进程,必须是属主或者root d/s 更新时间间隔,默认为3秒 z 切换至彩色或者单色 i 切换是否显示空进程 1 切换单CPU状态模式和对称处理器模式 B 开关重要数字加粗显示 c 切换显示COMMAND信息,在名称和完整路径间切换 #kill & killall kill -1(-s HUP) PID 挂起 kill -2(INT) PID 中断 kill -3(QUIT) PID 结束运行 kill -9(KILL) PID 强制终止 kill -15(TERM) PID 尽可能终止 kill -17(STOP) PID 强制停止运行,但不终止 1
killall http* #干掉匹配进程名的进程,非紧急不建议使用
#jobs 查看后台工作队列,"-l” 可以显示PID bg n 后台模式重启动,“n"为jobs队列的编号 fg n 前台模式 kill -9 %n 强制停止 #nice 调整优先级,默认为"0” nice -n n command 取值:-20 ≤ n ≤20 #renice 改变已运行命令的优先级 renice n -p PID #date 显示 星期 月 日 xx:xx:xx 时区 年 date +%u 显示星期几 date +%U 显示本周是今年的第几周(从今年第一个以周日开始的周算起) date +%F 显示年-月-日,等价“date +%Y-%m-%d”. date +%D 显示日/月/年 1
2
3
4
5
[root@SB test]# date
Sat Jun 13 22:27:35 CST 2015
[root@SB test]# date 0613223015.30
Sat Jun 13 22:30:30 CST 2015
[root@SB test]# hwclock -w
#cal 显示本月日历,默认以周日为起点 cal -j 显示今天是今年的第几天(从元旦算起) cal xxx 显示xxx年的日历 cal -3 显示本季度 cal -m 显示当月(显示周一为起点) 计划任务 #at 一次性的计划任务 at [ -f file ] time at -f test 12:30 (MM/DD/YY | +25 min | teatime下午4点) #atd at守护进程,每60s检查一次/var/spool/at #atrm 删除队列 atrm n n为atd的序号 #cron 定期任务 每个cron目录都有个时间戳文件存于/var/spool/anacron crontab -e 编辑 crontab -l 查看 1
2
3
min hour day month week command
00 /2 * * wc -l /etc/passwd #每两小时运行一次
00 23 * * * if [ date +%d -d tomorrow
= 01 ];then;command #每月最后一天
#anacron 检查因关机导致为运行的cron。 通过/etc/anacrontab查表,只执行/etc/cron目录内的程序 #last 显示近期登录用户的信息 -n 指定显示条数 last tty 显示虚拟控制台登录情况 -x 显示系统关闭、用户登录和退出的历史 #free 显示内存适用情况 -m 单位为MB -s n 每n秒显示一次 -t 显示Total -o 不显示缓冲区 计算内存,以下是使用比 1
2
free | sed -n ‘2p’ | awk ‘x = ($3/$2){print x}’
free | sed -n ‘2p’ | awk ‘x = int(($3/$2)*100){print x}’|sed ’s/$/%/’
#ip iproute2 -V 显示版本 -0 -family link 简写 -4 -family inet 简写 -6 -family inet6简写 #ping -c 设置回应次数 -t 设置ttl大小 #netstat 检查网络状态 -t TCP -u UDP -c 持续输出 -l 显示服务器上的socket -n 以数字替换服务名称 三、磁盘和数据管理 #mount 挂载 mount 显示系统当前的挂载情况 mount -t 指定文件系统类型,vfat(win) iso9660(cd) 1
2
mount -t vfat /dev/sdb1 /media/udisk
mount -t iso9660 -o loop Centos6.iso /mnt
mount -f 模拟挂载 mount -n 挂载设备但是不将信息记录到/etc/mtab中 mount -r 只读挂载,默认为”-w"可读写 mount -L label 指定的label挂载 mount -U uuid 指定的uuid挂载 #umount umount [directory | device] 选择目录或者设备都可以,卸载时如报设备忙则可用"lsof”, lsof /path/to/device/node lsof /path/to/mount/point #dd ,用指定大小的块拷贝文件。 cbs=50 一次转换50个Bytes ibs=50 一次读入50字节到缓存区 obs=50 一次写入50字节到缓存区 seek=50 跳过50字节输出 skip=50 跳过50字节输入 count=50 只拷贝输入的50字节 (1) MBR备份和恢复,446字节的引导代码,64字节的分区表,2字节的标示符。 1
2
dd if=/dev/sda of=/root/mbr bs=512 count=1
dd if=/root/mbr of=/dev/sda bs=512 count=1
(2) 分区表的备份和恢复 1
dd if=/root/mbr of=/dev/sda bs=1 skip=446 count=66
fdisk -l > /boot/disk 如果只是逻辑上分区没了,就用fdisk /dev/sda照着改。 (3) 销毁数据 1
dd if=/dev/urandom of=/dev/sda
(4)磁盘管理 比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小 1
2
3
4
dd if=/dev/zero of=/root/1GB bs=1024 count=1000000
dd if=/dev/zero of=/root/1GB bs=2048 count=500000
dd if=/dev/zero of=/root/1GB bs=4096 count=250000
dd if=/dev/zero of=/root/1GB bs=8192 count=125000
(5) 测试硬盘读写速度 1
dd if=/root/1GB of=/dev/null bs=64k
(6) 用于修复长时间未使用的硬盘,安全且高效(未测试) 1
dd if=/dev/sda of=/dev/sda
#df df -h 转换单位 #du 常用 “du -sh”查看当前目录所用的磁盘空间 du -h 转换单位 du -c 显示已列出文件的大小 du -s 显示每个输出参数的总计 #fdisk 磁盘分区 “n” 创建分区; “p” 主分区; “e” 扩展分区; "+5G” 设置分区大小;“l” 在扩展分区中创建逻辑分区; “p” 显示分区; “m” 分区格式编号; “t” 转换分区格式; “w”保存;“q”退出 1
2
mkfs.ext4 /dev/sda1
#创建ext4文件系统(排序模式),支持区段特性和块预分配(先用0填满且不分配给其他文件)
mkreiserfs ReiserFS文件系统(回写模式),支持在线改变大小和将数据写入其他已用物理块的空闲空间。
jfs_mkfs JFS文件系统(排序模式),支持区段特性(ext4),按块存储且索引节点只保存起始块的位置。
#fsck 修复文件系统
使用/etc/fstab文件,只能在未挂在的文件系统上运行,修复根文件系统则需要liveCD
fsck -a 检查到错误则自动修复文件系统
fsck -t 指定要检查的文件系统类型
fsck -y 检查到错误则自动修复文件系统
LVM (热增冷减):分区 -> 物理卷(PV) -> 卷组(VG) -> 逻辑卷(LV) -> 创建文件系统 -> 挂载
LVM:http://tshare365.com/archives/1382.html
压缩和解压
(1)压缩文件 ,默认不保留原文件,-d解压
gzip (.gz) gunzip 解压
bzip2 (.bz2) bunzip2 解压
xz (.xz) unxz 解压
(2)目录 默认保留原目录
zip 压缩文件或目录,zip file.zip file
zip -r 压缩目录
#tar ,cf创建,xf解压
tar -cvf test.tar test1/ test2 将两目录压缩到test.tar中。
tar -tf test.tat 查看tar压缩中的列表
tar -j 打包后使用bzip2命令压缩,常”-jcf” or “-jxf”
tar -z 打包后使用gzip命令压缩
tar -J 打包后使用xz命令压缩
tar -r 追加文件到已有tar归档文件的末尾,"-u"则对文件进行比较
tar -p 保留文件权限
四、环境变量
对整个系统而言:/etc/enviroment –> /etc/profile –> $HOME/.profile –> $HOME/.env(如果存在)
对用户而言,如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/enviroment)有不同的值那么应该以用户环境为准。
执行顺序为:/etc/profile -> (/.bash_profile | /.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。
#printenv 查看全局变量
#set 查看局部变量
局部变量仅在当前shell有效。
test=‘test is test!’ 给变量赋值时如果有空格必须用单引号(其实双引号也可以),默认(变量、=、值)之间没有空格。
#export 使变量在子shell中有效。
export test –> bash –> echo $test
#unset 删除export变量
shell 环境变量
$PATH 冒号隔开的shell查找命令的目录列表
$BASH 默认/bin/bash
$LANG shell的语言环境,我更喜欢使用locale查看。可用export LANG=“en_US.UTF-8"变更
$BASHPID 当前shell的PID,可以用"ps -u | grep bash"查看
$HISTSIZE 最多存多少条历史命令
$MACHTYPE “cpu-公司-系统”
$PPID bash shell 父进程的PID
$BASH_ENV shell脚本运行时会尝试访问这个变量
登录系统时启动shell时/etc/profile会执行放在/etc/profile.d目录下的脚本(通常以.sh或者.csh结尾)。
非登录系统时启动的如在命令行下输入bash,你启动的就是交互式shell.不会访问/etc/profile而是直接检查~/.bashrc是否存在。
非交互式shell,即系统执行shell脚本时运行的shell。检查环境变量BASH_ENV,默认未设置。
可变数组,索引值从0开始。
#test=(1 2 3 4)/.bash_login | /.bashrc 是交互式 non-login 方式进入 bash 运行的,二者设置大致相同,所以通常前者会调用后者。
6)/.profile) -> /.bash_profile 是交互式、login 方式进入 bash 运行的,/.bashrc -> /etc/bashrc -> /.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
5)/.bash_logout
说明:
1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
3)/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
4)
1
4 #unset test[3] #echo ${test[*]} 1 2 3 #alias 别名 跟定义的局部变量一样仅在当前shell有效。保存在~/.bashrc则长期有效。 五、用户管理 /etc/passwd(644),分7个字段[name pw uid gid 描述 home 默认shell],pw为占为。 /etc/shadow(0),分9个字段[name pw 最后修改(1970.1.1)到当天的天数 N天后可改密码 N天后必须改密码 提前N天提醒修改密码 过期N天禁用 被禁的日期(同3) 预留]
useradd -D 查看默认 {GROUP=100 HOME=/home INACTIVE=-1 (过期不禁用) EXPIRE= (未设置过期日期) SHELL=/bin/bash SKEL=/etc/skel (复制到家目录下) CREATE_MAIL_SPOOL=yes (创建接受邮件的目录)} -De 变更默认过期日期 “Df” 过期N天禁用 -c 添加备注 -d 指定主目录 -e 帐号过期日1111-11-11 -f 过期后N天禁用;0立即禁用,-1不禁用 -g 指定GID或组名,"-G"附加组 -M 不创建家目录 -r 创建系统用户(uid=[1-499]) -u 为用户指定uid #userdel 删除用户 userdel -r 连同家目录一起删除 #usermod 参数可参照"useradd” -l 修改登录名 -L 锁定帐号(实用) -p 修改密码 -U 解锁 #passwd & chpasswd passwd -e username 密码直接过期,下次登录强制修改密码。 chpasswd < users.txt 批量修改密码,支持从标准输入自动读取用户名和密码对(sb:pw)列表, #chsh -s /bin/csh sb 修改sb的默认shell,注意跟绝对路径名 #chfn sb 修改登录名. #chage sb 管理用户的过期日期等 #finger username 查询用户信息 #groupadd sb 增加名称为"sb"的组, *当一个用户在/etc/passwd中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中(这个问题让我纠结了很久)。 #usermod -G sb root 将组sb作为根的附加组,"-g"会替换默认组。 #groupmod -n sb2 sb 变更sb组名称为sb2,加”-g xxx"可以变更GID。 #chmod 改变文件属性 chmod 666 filename 可加 [u g o a] [-+=] [rwxXstugo] chmod -R 666 /var/share 递归改变文件及其子目录 chmod g+s filename 文件已属组权限运行 2666,变更SUID和SGID(000-111) #chown -R sb:sb /var/share 递归变更目录下的所有文件的属主属组。 #chgrp root filename 变更文件的属组 六、软件安装和管理 (以下大部分内容来至于书本和网络) PMS工具及其关联的命令在不同的Linux发行版中不尽相同。 #主流:dpkg(Debian)和rpm(RedHat) 基于Debian:Ubuntu、Linux Mint等 基于RedHat: Fedora、openSUSE、Mandriva、Centos等 基于Debian的dpkg工具有: apt-get (软件包管理的命令平台) apt-cache (提供搜索功能) aptitude(处理依赖关系是优于apt-get) #用aptitude管理软件包,库文件:/etc/apt/sources.list #aptitude 进入全屏交互界面 Installed Packages 已安装 Enter 确认以及显示软件信息 q 退出 #aptitude show package_name 显示特定包的详细信息,但不会显示所有关联的文件列表 #dpkg -L package_name 显示关联的文件列表(类似 rpm -ql package_name) #dpkg –serch 绝对路径 查找文件属于哪个安装包 #aptitude serch package_name 查找软件包,默认通配符会隐性添加。(p表示在仓库 i已安装) #aptitude safe-upgrade 检查包与包的依赖关系并更新,将所有已安装的包更新到软件库中的最新版本 #aptitude [full|dist]-upgrade 更新但不检查依赖关系 #aptitude install package_name 安装软件,软件会自动将需要的库和软件安装上。 #aptitude purge package_name 卸载的很干净,“remove"则保留软件数据和配置文件(库中包名称前标c)。 基于RedHat的rpm工具有: yum RedHat、Fedora urpm Mandriva zypper openSUSE 查看 #yum list installed | less 查看已安装列表 #rpm -qa | less 通用查看已安装,(urpm 不能显示已安装列表) #zypper serch -I > ./installed 查看已安装 #yum list vim 查看软件是否安装,等价"yum list installed vim” #urpm -q vim 查看是否安装,"-i"可查看包信息 #zypper serch vim 查看是否安装,"-s"看包信息 #yum provides /etc/my.cnf 查看配置文件属于哪个软件 安装 #yum install vim 安装软件 #yum localinstall package_name.rpm 本地安装 #urpmi package_name 安装软件 #zypper instal package_name 安装软件 更新 #yum list updates 列出已安装包的可用更新 #yum update 更新列表中的所有包,后加上软件包名称以更新特定的包 #urpmi –auto-update –update 软件库和包自动更新 #zypper upadte 更新。 卸载 #yum remove package_name 保留数据和配置 #yum erase package_name 删除的很干净 #urpme package_name 删除的很干净 #zypper remove package_name 删除的很干净 解决依赖关系出问题的故障 #yum clean all 通常配合yum update解决依赖关系出问题的故障 #yum deplist package_name 显示软件的库依赖关系以及什么软件可以提供这些库 #yum update –skip-broken 忽略依赖关系损坏的包而更新其他 #urpmi -clean 若是忽略则将包名称加入/etc/urpmi/skip.list中 #zypper verify 修复损坏的依赖关系 查看仓库 #yum repolist 配置文件在/etc/yum.repo.d/ #urpmq –list-media #zypper repos 源码安装一般的流程(水平有限…):tar 解压源码包 –> ./configure –> make –> make install