文章转自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_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
说明:
1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
5)~/.bash_profile 是交互式、login 方式进入 bash 运行的,~/.bashrc 是交互式 non-login 方式进入 bash 运行的,二者设置大致相同,所以通常前者会调用后者。
6)~/.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)
# echo $test
1
# echo ${test[3]}
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 默认包含-m(创建家目录)和-n(创建同名组)
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
zypperopenSUSE
查看
#yum list installed| less查看已安装列表
#rpm -qa | less 通用查看已安装,(urpm 不能显示已安装列表)
#zypperserch -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 软件库和包自动更新
#zypperupadte更新。
卸载
#yum remove package_name 保留数据和配置
#yum erase package_name删除的很干净
#urpmepackage_name删除的很干净
#zypperremovepackage_name 删除的很干净
解决依赖关系出问题的故障
#yum clean all 通常配合yum update解决依赖关系出问题的故障
#yum deplist package_name显示软件的库依赖关系以及什么软件可以提供这些库
#yum update –skip-broken忽略依赖关系损坏的包而更新其他
#urpmi -clean若是忽略则将包名称加入/etc/urpmi/skip.list中
#zypperverify修复损坏的依赖关系
查看仓库
#yum repolist 配置文件在/etc/yum.repo.d/
#urpmq –list-media
#zypper repos
源码安装一般的流程(水平有限…):tar 解压源码包 –> ./configure –> make –> make install
本文由 橙叶博客 作者:ChengYe 发表,转载请注明来源!