【分享】Linux常用命令

Posted by 橙叶 on Wed, Nov 30, 2016
文章转自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 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



comments powered by Disqus