Linux

【分享】Linux常用命令

文章转自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

(0)

本文由 橙叶博客 作者:ChengYe 发表,转载请注明来源!

热评文章

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.