首页 > 自动化运维 > Shell > linux shell 命令整理
2015
06-08

linux shell 命令整理

#本文档仅罗列了一些常用命令及其使用频率较高的参数.

#您对本文档的建议和意见,可加入“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  行号的位数

[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字节

tail -n +5 /etc/passwd  #从第5行开始显示

#head 显示文件头部,默认是前10行

head -n x  显示前x行

tail /etc/passwd | head -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  指定一个用来区分健位置的字符

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    多匹配模式

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]等

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         结束

[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环境变量中取值

[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代码前声明变量

[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}

[root@smb test]# awk --re-interval '/^[0-9]{5}$/ {print $0}' date4
11111
22222
34521

匹配符 ~

[root@smb share]# awk 'BEGIN {FS=":"}$1~/^r/{print $1,$NF}' /etc/passwd
root /bin/bash

#sed 

"-n"仅显示匹配;"p"打印sed输出的一行;"-i" 修改源文件;"g"全局处理;

sed -n 's/old/new/gp' file #替换所有匹配的行并显示
sed -n '2s/old/new/p' file #在第2行中匹配且显示替换后的结果

"!"排除命令,下列相当于 grep -v  ;跳转命令"b"基于地址、地址区间排除

[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.
sed 's@/bin/bash@/bin/csh@g' /etc/passwd  
#用特殊符号替代"/"作为分割符,则不需要用"\"来转义

"d"删除行;"i"前插一行;"a"后增一行;

sed '2,3d' file  #删除文件的第2行和第3行
sed '2,$/key/d' file #从第二行开始匹配,若成功则删除
sed '/1/,/3/d' file  #匹配到含"1"的行开启删除模式,匹配到含"3"的行则删除该行且关闭删除功能.(慎用)

"r":将指定文件的内容追加到文件

[root@smb share]# sed '/xxx/{                     
r /etc/issue
d
}' hello
Hello world!
CentOS release 6.6 (Final)
Kernel \r on an \m

"c":替换行

[root@smb share]# sed '2,3c this is line 2 and 3' date1 
line 1
this is line 2 and 3
line 4

"y":替换字符,默认是全局替换

[root@smb share]# sed 'y/123/789/' date1 
line 7
line 8
line 9
line 4
this is line 7 again.

"="打印行号;"l"可显示不可打印的特殊字符,如行尾的"$";

[root@smb test]# sed -n '/first line/{=;l}' date 
2
This is the first line.$

and符号"&"

[root@smb test]# echo "My cat sleeps in his hat" | sed 's/.at/"&"/g'
My "cat" sleeps in his "hat"

圆括号的妙用

[root@smb test]# echo "Help you" | sed 's#\(H\)el\(p\)#\1\2#'
Hp you  #重庆话翻译就是“哈皮”

"n":移动到数据流的下一行;

[root@smb test]# sed -n '/first line/{n;p}' date 
This is the second line.

"N":将下一行并入当作同一行处理

[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"交换两个缓存区域的内容。

[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]

[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  显示的参数比较多

[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
#[F系统标记 S进程状态(0运行s休眠R运行z僵化t停止) PRI(优先级) NI(nice值)
ADDR(内存地址) SZ(换出需要的空间) WCHAN(休眠的内核函数地址)]

ps -H 命令层级,(CMD)处

ps –forest 显示层级信息并用ACSII字符绘出

找“僵尸”

  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  强制停止运行,但不终止

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 显示日/月/年

[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 查看 

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 不显示缓冲区

计算内存,以下是使用比

 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)

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字节的标示符。

dd if=/dev/sda of=/root/mbr bs=512 count=1
dd if=/root/mbr of=/dev/sda bs=512 count=1

(2) 分区表的备份和恢复

dd if=/root/mbr of=/dev/sda bs=1 skip=446 count=66

  fdisk -l > /boot/disk 如果只是逻辑上分区没了,就用fdisk /dev/sda照着改。

(3) 销毁数据

dd if=/dev/urandom of=/dev/sda

(4)磁盘管理

  比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

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) 测试硬盘读写速度

dd if=/root/1GB of=/dev/null bs=64k

(6) 用于修复长时间未使用的硬盘,安全且高效(未测试)

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”退出

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




最后编辑:
作者:wood-man
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复