频道栏目
首页 > 资讯 > Linux > 正文

linux常用命令-part2

16-05-02        来源:[db:作者]  
收藏   我要投稿
Ubuntu,Fedora,Debian,CentOS中文怎么发音
有奔头, 费德勒, 迪扁, 桑托斯。
乌版图 菲朵拉 德槟 森头斯


================================
使用find和wc命令统计代码行数
================================
wc -l `find . -name "*.js" | xargs`


查看当前目录下文件的个数 ls -l | grep "^-" | wc -l
查看当前目录下文件的个数,包括子目录里的。
ls -lR| grep "^-" | wc -l
查看某目录下文件夹(目录)的个数,包括子目录里的。
ls -lR| grep "^d" | wc -l


ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)
grep "^-" 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
wc -l 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数


=======================================
KB与KIB,free命令输出的是KB,不是KIB
=======================================
KB:
kilobyte(千字节),常写作KB或K,是一种资讯计量单位,现今通常在标示内存等具有一般容量的储存媒介之储存容量时使用。
1KB = 1,000Byte
1MB = 1,000KB
1GB = 1,000,000(106)KB
1TB = 1,000,000,000(109)KB
KIB:
Kibibyte是一种资讯计量单位,代表1024字节,即210字节,一般简称为KiB。Kibibyte是自来英文 kilo binary byte 的缩写,意思为“千位二进制字节”。
1KiB = 1,024Byte
1MiB = 1,024KiB
1GiB = 1,024MiB = 1,048,576 (10242)KiB
1TiB = 1,024GiB = 1,073,741,824 (10243)KiB
Byte:
字节,英文名称是Byte。Byte是Binary Term的缩写。一个字节代表八个比特。它是通常被作为计算机信息计量单位,不论被存储数据的类型为何。
Bit:
位(英语:Bit),亦称二进制位,指二进制中的一位,是信息的最小单位。Bit是Binary digit(二进制数位)的缩写
1个字节(Byte)——8个位(bit)
1个字(Word)——16个位(bit)


================================
configure,make,make install
================================
这里也简单介绍一下在Linux/Unix下安装软件的源码三部曲,在后面我们会经常看到它们的身影。
./configure
make
make install


./configure是用来检查环境变量及配置编译选项的,
make是用来将源代码编译成二进制文件的,
make install则会将make编译出来的文件安装到指定位置(或默认位置)。


tail -f SystemOut.log 可以实时观测 最新产生的log,会不停的刷新屏幕。
tar -zvxf v4.tar 解压
ll 并不是linux下一个基本的命令,它实际上是ls -l的一个别名
ll -a 显示隐藏目录。
dmesg|less 查询linux内核启动时的信息
less /var/log/dmesg




在linux递归删除某个文件夹(svn)的命令:
find . -name ".svn" -type d | xargs rm -rf 或者
find . -name ".svn" -type d -print -exec rm -rf {} ;


(1) "."表示从当前目录开始递归查找。
(2) “ -name "svn" "根据名称来查找。
(3) " -type d "查找的类型为目录
(4) "-print" 输出查找的文件目录名
(5) 最主要的是是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录执行该命令。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个/,最后是一个分号。


find . -name "*.o" | xargs rm -f
可以通过管道命令来操作,先find出主目录下想删除的文件,然后通过“xargs”这个构造参数列表并运行命令。
find named/ -name *.bak | xargs rm -f


find . -name ".svn" -type d | xargs rm -rf


==============================================
管道和命令替换的区别是:
==============================================
管道: 管道符号"|"左边命令的输出作为右边命令的输入
命令替换: 将命令替换符"``"中命令的输出作为其他命令相应位置的参数


# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l
这里利用了管道和命令替换,
就是说用``括起来的命令会优先执行,然后以其输出作为其他命令的参数,
上述就是用 ps -e | grep server | awk '{print $1}' 的输出(进程号),作为 pstree -p 的参数


--------------------
nohup 命令
--------------------
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
nohup就是不挂断的意思( no hang up)。
用途 LINUX命令用法,不挂断地运行命令。


nohup Command [ Arg ... ] [ & ]


nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。
要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。


如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,
那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。


如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到myout.file文件中。
使用 jobs 查看任务。
使用 fg %n 关闭。


--------------------
nohup 与&区别
--------------------
1)普通的一些程序,& 结尾,终端关闭,那么程序也被关!
2)单是&, 后台运行,你关掉终端会停止运行
3)nohup command & 后台运行,你关掉终端也会继续运行
4)一个很明显的区别是,&得后台,是终端关闭,自己也会退出,而nohup 则相当于一个独立的后台进程。
5)nohup执行的话,不管终端机怎么操作,后台会一直执行 但是如果单&的话,终端机突然掉电或是拔网线时,后台会被堵死,无法运行


Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:
/usr/local/mysql/bin/mysqld_safe –user=mysql &
但是我们很多程序并不象mysqld一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,
那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:
nohup /root/start.sh &
在shell中回车后提示:
[~]$ appending output to nohup.out
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。
咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。
在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:
他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端; **************重点****
而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。
这个细节有人和我一样没注意到,所以在这儿记录一下了。




AIX, Linux下将脚本放到后台执行——加nohup与不加nohup的区别:

1)对于Linux下来说,当在系统上执行下面的命令,将test.sh脚本放到后台执行
/location/test.sh &
此时,分两种情况考虑问题,
一:继续执行exit命令退出当前session, 则 test.sh这个脚本仍然在Linux系统里面运行,
二:不执行exit命令退出,而直接断开当前连接,则 test.sh脚本会立即退出


如果使用下面命令,将test.sh脚本放到后台执行
nohup /location/test.sh &
则,针对上面的两种情况来说,test.sh脚本都会继续在系统上运行,所以,不管什么时候如果想把脚本放到后台执行,都需要使用nohup 和 & 命令。


2)对于AIX下来说,当在系统上执行下面的命令,将test.sh脚本放到后台执行
/location/test.sh &
此时,按照上面Linux系统下的两种情况来看
一:继续执行exit命令退出当前session, 第一次会提示"You have running jobs", 再次执行exit后,test.sh脚本也将停止运行
二:不执行exit命令退出,而直接断开当前连接,则 test.sh脚本会立即退出


如果使用下面命令,将test.sh脚本放到后台执行
nohup /location/test.sh &
则针对上面的两种情况来说,test.sh脚本都会继续在系统上运行。


------------------------------------------------
查找目录下的所有文件中是否含有某个字符串
------------------------------------------------
find .|xargs grep -ri "IBM"
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
find .|xargs grep -ri "IBM" -l
1.正则表达式
(1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。
(2)基本元字符集及其含义
^ :只匹配行首。 如^a 匹配以a开头的行abc,a2e,a12,aaa,......
$ :只匹配行尾。 如^a 匹配以a结尾的行bca,12a,aaa,.......
* :匹配0个或多个此单字符。 如(a)* 匹配 空,a,aa,aaa,....
[] :只匹配[]内字符。可以是一个单字符,也可以是字符序列,用","将里面要匹配的不同字符串分开。也可以使用-来表示[]内字符序列的范围,如[1-5]表示[12345]
\ :只用来屏蔽一个元字符的特殊含义。 如\*,\',\",\|,\+,\^,\. 等
.:(点)只匹配任意单字符。
pattern\{n\}:只用来匹配前面pattern出现的次数.n为次数。如a\{2\}匹配aa.
pattern\{n,\}:含义同上,但次数最少为n.如a\{2,\}匹配aa,aaa,aaaa,.....
pattern\{n,m\}:含义同上,但次数在n和m之间。如a\{2,4\}匹配aa,aaa,aaaa三个
(3)举例说明:
^$ :匹配空行
^.$ :匹配包含一个字符的行
\*\.pas :匹配以*.pas结尾的所有字符或文件
[0123456789]或[0-9] :假定要匹配任意一个数字
[a-z] :任意小写字母
[A-Za-z] :任意大小写字母
[S,s] :匹配大小写S
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} :匹配IP地址 [0-9]\{3\}三个0-9组成的字符串;\. :匹配点(注意这里点是特殊的字符,所以要用"\"来屏蔽其含义)
2.find介绍 (1)查找具有某些特征文件的命令,可遍历当前目录甚至于整个文件系统来查看某些文件或目录,其遍历大的文件系统时一般放在后台执行。
(2)find命令的一般形式
find pathname -options [-print -exec -ok]
-pathname :find命令所查找的目录路径。如用"."来表示当前的目录,用/来表示系统根目录
-print :find命令将匹配的文件输出到标准输出
-exec: find命令对匹配的文件执行该参数所给出的shell命令,相应的命令形式为
'command'{} \; (注意{}和\之间的空格)
-ok 和 -exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
options有如下几种:
-name :按照文件名查找文件
-perm :按照文件权限来查找文件
-user :按照文件属主来查找文件
-group :按照文件所属的组来查找文件
-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。find命令还有-atime 和-ctime选项,但它们都和-mtime选项相似。
-size n[c]查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
-newer file1 !file2查找更改时间比文件file1新但比文件file2旧的文件
-depth 先查找指定目录有无匹配文件,若无则再在子目录中查找
-type 查找某一类型的文件,如
b :块设备文件
d:目录
e:字符设备文件
p;管道文件
l:符号链接文件
f:普通文件
(3)find命令举例
find -name "*.txt" -print 查找txt结尾的文件并输出到屏幕上
find /cmd ".sh" -print 查找/cmd目录下所有sh文件,并输出
find . -perm 755 -print 查找当前目录下权限为755的文件,并输出
find `pwd` -user root -print 查找当前目录下属主为root的文件,并输出
find ./ -group sunwill -print 查找当前目录下所属主是sunwill的文件
find /var -mtime -5 -print 查找/var目录下更改时间为5天内的所有文件
find /var -mtime +5 -print 查找/var目录下更改时间为5天以前的所有文件
find /var -newer "myfile1" ! -newer "myfile2" -print 查找/var目录下比myfile1新,但是比myfile2旧的所有文件。
find /var -type d -print 查找/var目录下所有目录
find /var -type l -print 查找/var目录下所有的符号链接文件。
find . -size +1000000c -print 查找当前目录下大于1000000字节的文件
find / -name "con.file" -depth -print 查找根目录下有无"con.file",若无则在其子目录中查找
find . -type f -exec ls -l {} \; 查找当前目录下是否有普通文件,若有则执行ls -l
(4)xargs命令
在 使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec。不幸的是,有些系统对能够传递给exec的命 令长度有限制,这样find命令运行几分钟之后就算出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs的用处所在,特别是与 find命令一起使用,exec会发起多个进程,而xargs会多个,只有一个
find ./ -perm -7 -print | xargs chmod o-w 查找权限为7的文件并传递给chmod处理
3.grep介绍 (1)grep 的一般格式为 grep [options] 基本正则表达式 [文件]
字符串参数最好采用是双引号括,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串
-c:只输出匹配行的记数
-i:不区分大小写(只适用于单个字符)
-h:查询多个文件时不显示文件名
-H:只显示文件名
-l:查询多文件时只输出包含匹配字符的文件名
-n:只显示匹配行及其行号
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
(2)举例说明:
grep ^[^210] myfile 匹配myfile中以非2、1、0开头的行
grep "[5-8][6-9][0-3]" myfile 匹配myfile中第一位为5|6|7|8,第二位6|7|8|9,第三位为0|1|2|3的三个字符的行
grep "4\{2,4\}" myfile 匹配myfile中含有44,444或4444的行
grep "\?" myfile匹配myfile中含有任意字符的行
(3)grep命令类名
[[:upper:]] 表示[A-Z]
[[:alnum:]] 表示[0-9a-zA-Z]
[[:lower:]] 表示[a-z]
[[:space:]] 表示空格或者tab键
[[:digit:]] 表示[0-9]
[[:alpha:]] 表示[a-zA-Z]
如:grep "5[[:digit:]][[:digit:]]" myfile 匹配myfile中含有5开头接下去两位都是数字的行。
4.awk介绍
可以从文件或字符串中基于指定规则浏览和抽取信息,是一种自解释的变成语言。
(1)awk命令行方式 awk [-F filed-spearator] 'command' input-files
awk脚本:所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。awk脚本是由各种操作和模式组成。
模式部分决定动作语句何时触发及触发事件。(BEGIN,END)
动作对数据进行处理,放在{}内指明(print)
(2)分隔符、域和记录
awk执行时,其浏览域标记为$1,$2,...$n.这种方法成为域标识。$0为所有域。
(3)举例说明:
awk '{print $0}' test.txt |tee test.out 输出test.txt中所有行$0表示所有域
awk -F : '{print $1} test.txt |tee test.out' 同上。。只是分隔符为":"
awk 'BEGIN {print "IPDate\n"}{print $1 "\t" $4} END{print "end-of-report"}' test.txt
开始时打印“IPDate”结束时打印“end-of-report”中间打印主体信息,比如总共匹配三条信息,则输出如下:
IPDate
1 first
2 second
3 third
end-of-report
(4)匹配操作符 ~ 匹配,!~ 不匹配
cat test.txt |awk '$0~/210.34.0.13/' 匹配test.txt中为210.34.0.13的行
awk '$0!~/210.34.0.13' test.txt 匹配test.txt中不是210.34.0.13的行
awk '{if($1=="210.34.0.13") print $0}' test.txt 匹配 test.txt中第一个域为210.34.0.13的行。
5.sed介绍 sed不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
sed是一种很重要的文本过滤工具,使用一行命令或者使用管道与grep与awk相结合。是一种非交互性文本流编辑。
(1)调用sed的三种方式
使用sed命令行格式为:sed [options] sed命令 输入文件
使用sed脚本文件格式为:sed[options] -f sed脚本文件 输入文件
sed脚本文件[options] 输入文件
--不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。
(2)sed 命令的options如下
-n:不打印
-c:下一命令是编辑命令
-f:如果正在调用sed脚本文件
(3)sed在文件中查询文本的方式
--使用行号,可以是一个简单的数字,或是一个行号的范围
--使用正则表达式
(4)读取文本的方式
x x为一行号
x,y 表示行号范围从x到y
/pattern/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
pattern/,x 在给定的行号上查询包含模式的行
x,/pattern/ 通过行号和模式查询匹配行
x,y! 查询不包含指定行号x和y的行
(5)基本sed编辑命令
p 打印匹配行
d 删除匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文件
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即退出
l 显示与八禁止ASCII代码等价的控制字符
{} 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
(6)举例说明:
sed -n '2p' test.txt 打印第二行的信息(注意:-n是不打印不匹配的信息,若没加-n,则打印文件的所有信息而不是匹配信息)
sed -n '1,4p' test.txt 打印第一行到第四行的信息
sed -n '/los/p' test.txt模式匹配los,并打印出来
sed -n '2,/los/p' test.txt 从第二行开始。。知道匹配第一个los
sed -n '/^$/p' test.txt 匹配空行
sed -n -e '/^$/p' -e '/^$/=' test.txt 打印空行及行号
sed -n '/good/a\morning' test.txt 在匹配到的good后面附加morning
sed -n '/good/i\morning' test.txt 在匹配到的good前面插入morning
sed -n '/good/c\morning' test.txt 将匹配到的good替换成morning
sed '1,2d' test.txt 删除第1和2行
sed 's/good/good morning/g' test.txt 匹配good并替换成goodmorning
send 's/good/& hello /p' test.txt 匹配到good就在其后面加上hello
send 's/good/ hello &/p' test.txt 匹配到good就在其前面加上hello
6.合并与分割(sort,uniq,join,cut,paste,split) (1)sot命令
sort [options] files 许多不同的域按不同的列顺序排序
-c 测试文件是否已经排序
-m 合并两个排序文件
-u 删除所有同样行
-o 存储sort结果的输出文件名
-t 域分隔符,用非空格或tab开始排序
+n :n 为列号,使用此列号开始排序
-n 指定排序是域上的数字分类项
-r 比较求逆
sort -c test.txt 测试文件是否分类过
sort -u test.txt 排序并合并一样的行
sort -r test.txt 以相反的顺序排列
sort -t "/" +2 test.txt 以"/"分隔,第二个域开始分类
(2)uniq命令
uniq [options ] files 从一个文本文件中去除或禁止重复行
-u 只显示不重复行
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数
-f :n为数字,前n个域被忽略
uniq -f 2 test.txt 忽略前2个域
(3)join 命令
join [options] file1 file2 用来将来自两个分类文本文件的行连在一起
-an,n为一数字,用于连接时从文件n中显示不匹配行
-onm ,连接域,n为文件号,m为域号
-jnm,n为文件号,m为域号,使用其他域作连接域
-t ,域分隔符。用来设置非空格或tab键的域分隔符。
(4)split命令
split -output_file_size intput_filename output_filename
用来将大文件分割成小文件。
-b n,每个分割文件的大小n
-C n,每个分割文件一行最多n字节
-l n,每个分割文件的行数
-n,同-l n
split -10 test.txt 将test.txt分割成10行的小文件
(5)cut 命令
cut -c n1-n2 filename 显示每行从开头算起 n1 到 n2 的文字。
cut -c 3-5 test.txt 显示test.txt中每行从第3到第5个字符


==============================================
linux下查看线程数的几种方法
==============================================
1、 cat /proc/${pid}/status
2、pstree -p ${pid}
3、top -p ${pid} 再按H 或者
直接输入 top -bH -d 3 -p ${pid}
top -H手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
4、ps xH手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
5、ps -mp <PID>手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。


=======================
linux环境查看命令:
=======================
CPU: cat /proc/cpuinfo, top
进程: ps -ef
内存: cat /proc/meminfo, top, free
磁盘: df -sh, df -ht,df -lh,
磁盘分区情况: sfdisk -l, fdisk -l, parted, cat /proc/partitions,
IO: iostat -x 1
操作系统: uname -a, cat /proc/version,more /etc/issue


[root@oam-nas ~]# more /etc/issue
Red Hat Enterprise Linux Server release 6.1 (Santiago)
Kernel \r on an \m


[root@oam-nas ~]# uname -a
Linux oam-nas 2.6.33.20 #1 SMP PREEMPT Wed Apr 3 17:07:07 CST 2013 x86_64 x86_64 x86_64 GNU/Linux


[root@oam-nas ~]# more /proc/version
Linux version 2.6.33.20 (root@oam-nas) (gcc version 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC) ) #1 SMP PREEMPT Wed Apr 3 17
:07:07 CST 2013


如何知道自己的Linux发行版本的所支持的类型有哪些:
以超级用户权限登陆Linux,进入/lib/modules/2.4.21-4.EL/kernel/fs/目录
执行命令(不同Linux发行版本 的Fs目录有些不同你可以用查找FS文件夹的方法找到它):
(abigbadboy的内核版本是2.6.18-164.el5)
[root@rh root]# cd /lib/modules/2.6.18-164.el5/kernel/fs/
[root@localhost fs]# ls
autofs4 cramfs ext3 fscache hfsplus lockd nfsd vfat
cachefiles dlm ext4 fuse jbd msdos nls
cifs ecryptfs fat gfs2 jbd2 nfs squashfs
configfs exportfs freevxfs hfs jffs2 nfs_common udf


查看开机信息: dmesg
Linux命令dmesg用来显示开机信息,kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,
可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里
文件系统的挂载情况: cat /etc/fstab
查看文件系统:
fdisk -l ---查看磁盘信息以及分区表情况 或者使用 cat /proc/partitions
df ---当前系统剩余空间
mount ---查看目录挂载情况
查看某个目录的大小: du -sh /uploadimages
系统运行情况: top,uptime
当前打开的服务: service --status-all
服务的运行级别: chkconfig --list
所有服务所占用的端口: cat /etc/services |less ------看所有服务所占用的端口
当前打开的端口: netstat -nat, netstat -tnlp
网络配置:ifconfig -a |grep add,
ifup eth0,
ifdown eth0,
ethtool eth0,
mii-tool -v eth0,
/etc/init.d/network status,
route,
/etc/sysconfig/network-scripts

[root@oam-nas2 yuanjs]# service network ?
用法:/etc/init.d/network {start|stop|status|restart|reload|force-reload}


环境变量: export
安装了哪些软件: rpm -qa , yum list,yum grouplist


top 看进程和cpu的使用率
uptime 看cpu负载和系统运行时间。
free 看内存 虚拟内存 -m 是以兆为单位显示
df -hT 硬盘.查看个各个分区的使用情况,-h是以G为单位显示 -T是显示分区的系统类型
iostat -x 1 可以查看磁盘的IO信息




/sbin
/bin
/usr/sbin
/usr/bin
/usr/local/sbin
/usr/local/bin
/usr/lib64/qt-3.3/bin
/root/bin


========================
linux软件安装方式:
(dpkg,apt-get)(rpm,yum)
========================
APT --- Advanced Package Tool
apt-get --------是debian、ubuntu发行版的包管理工具,与红帽中的yum工具非常类似。
apt-get install packagename ---安装一个新软件包(参见下文的aptitude)
apt-get remove packagename ---卸载一个已安装的软件包(保留配置文档)
apt-get autoremove packagename ---卸载一个已安装的软件包(删除配置文档)
软件源设置 /etc/apt/sources.list
更新软件源数据 apt-get update
更新已安装软件 apt-get upgrade
更换系统版本 apt-get dist-upgrade
通过安装包或卸载包来修复依赖错误 apt-get -f install
搜索软件源数据 apt-cache search foo
解压安装软件包 apt-get install foo
重新安装软件包 apt-get --reinstall install foo
删除软件包释放的内容 apt-get remove foo
卸载软件,同时清除该软件配置文件 apt-get --purge remove foo
删除不需要的包 apt-get autoclean
删除所有已下载的包 apt-get clean
自动安装编译一软件所需要的包 apt-get build-dep foo
获取源码 apt-get source foo apt-get source rox-filer
安装编译依赖 apt-get build-dep foo apt-get build-dep rox-filer
解压源码 dpkg-source -x foo_version-revision.dsc dpkg-source -x rox_2.11-3.dsc
修改源码部分 nano ROX-Filer/src/main.c
创建包 dpkg-buildpackage -rfakeroot -b
修改软件可升级状态 echo -e "foo hold" | dpkg --set-selections


dpkg --- Debian Packager ”的简写。为 “Debian” 专门开发的套件管理系统,方便软件的安装、更新及移除。
所有源自“Debian”的“Linux ”发行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix”等。是Debian软件包管理器的基础,它被伊恩·默多克创建于1993年。
dpkg与RPM十分相似,同样被用于安装、卸载和供给.deb软件包相关的信息。dpkg本身是一个底层的工具。上层的工具,
如APT,被用于从远程获取软件包以及处理复杂的软件包关系。
显示DEB包信息 dpkg -I xx.deb
显示DEB包文件列表 dpkg -c xx.deb
安装DEB包 dpkg -i xx.deb
安装DEB包(指定根目录) dpkg --root=<directory> -i xx.deb
显示所有已安装软件 dpkg -l
显示已安装包信息 dpkg -s foo
显示已安装包文件列表 dpkg -L foo
卸载包 dpkg -r foo
卸载软件包并删除其配置文件 dpkg -P foo
重新配置已安装程序 dpkg-reconfigure foo


yum --------Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora、RedHat、CentOS中的Shell前端软件包管理器。
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,
无须繁琐地一次次下载、安装。

[root@localhost ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* c6-media:
* centosplus: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
file:///media/CentOS/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/CentOS/repodata/repomd.xml
Trying other mirror.
file:///media/cdrecorder/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/cdrecorder/repodata/repomd.xml
Trying other mirror.
file:///media/cdrom/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/cdrom/repodata/repomd.xml
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: c6-media. Please verify its path and try again
提示没有找到YUM仓库文件,原因是镜像没有挂上或的YUM仓库路径写错了,也可能是这个YUM仓库路径无效。


解决办法:
把/etc/yum.repos.d/CentOS-Media.repo转移到其他文件夹。同时保证你的linux要能联网。

yum list 或者 yum grouplist ---查找
yum install 或者 yum groupinstall ---安装
yum remove 或者 groupremove ---卸载
yum info 或者 yum groupinfo ---查看某包或者组的详细信息
yum deplist ---显示软件包依赖关系


安装软件: yum install foo-x.x.x.rpm (以foo-x.x.x.rpm为例)
删除软件:yum remove foo-x.x.x.rpm或者yum erase foo-x.x.x.rpm
升级软件:yum upgrade foo或者yum update foo
查询信息:yum info foo
搜索软件(以包含foo字段为例):yum search foo
显示软件包依赖关系:yum deplist foo


-e 静默执行
  -t 忽略错误
  -R[分钟] 设置等待时间
  -y 自动应答yes
  --skip-broken 忽略依赖问题
  --nogpgcheck 忽略GPG验证


  check-update 检查可更新的包
  clearn 清除全部
  clean packages 清除临时包文件(/var/cache/yum 下文件)
  clearn headers 清除rpm头文件
  clean oldheaders 清除旧的rpm头文件
  deplist 列出包的依赖
  list 可安装和可更新的RPM包
  list installed 已安装的包
  list extras 已安装且不在资源库的包
  info 可安装和可更新的RPM包 信息
  info installed 已安装包的信息(-qa 参数相似)
  install[RPM包] 安装包
  localinstall 安装本地的 RPM包
  update[RPM包] 更新包
  upgrade 升级系统
  search[关键词] 搜索包
  provides[关键词] 搜索特定包文件名
  reinstall[RPM包] 重新安装包
  repolist 显示资源库的配置
  resolvedep 指定依赖
  remove[RPM包] 卸载包


rpm -----Redhat Package Manager OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用 -vh:显示安装进度;
rpm -ivh packagename ---安装 比如: rpm -ivh tcl-8.5.7-6.el6.x86_64.rpm tcl-devel-8.5.7-6.el6.x86_64.rpm tcl-pgtcl-1.6.2-3.el6.x86_64.rpm
rpm -ev packagename ---卸载 比如: rpm -ev tcl
rpm -qa |grep php 查看当前系统安装了PHP了的哪些内容。
rpm -qpl xxxxxx.rpm 怎样查看rpm安装包的安装路径 ******


如何在Fedora,CentOS,RHEL中检查RPM包的依赖性 --- http://www.linuxidc.com/Linux/2014-08/105626.htm
$ rpm -qR tcpdump --- 注意,这种方法只适用于已安装的包。使用RPM命令可以列出目标包所依赖的所有包.
$ rpm -qpR tcpdump-4.4.0-2.fc19.i686.rpm --- 如果你需要检查一个未安装包的依赖关系,使用 "-qpR"参数显示该包的依赖关系。


1.如何安装rpm软件包(强行安装)
执行下面的命令:
rpm -i your-package.rpm 或者 rpm -i --force --nodeps your-package.rpm (强制安装)
其中your-package.rpm是你要安装的rpm包的文件名,一般置于当前目录下。


安装过程中可能出现下面的警告或者提示:
1)... conflict with ... 可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的:
rpm --force -i 强制安装即可
2)... is needed by ... 或... is not installed ... 此包需要的一些软件你没有安装可以用:
rpm --nodeps -i 来忽略此信息


也就是说,rpm -i --force --nodeps 可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。


2.如何卸载rpm软件包 (强行卸载)_
使用命令 rpm -ev 包名,包名可以包含版本号等信息,但是不可以有后缀.rpm
比如卸载软件包proftpd-1.2.8-1,可以使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
不可以是下列格式:
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1


有时会出现一些错误或者警告:
... is needed by ... 这说明这个软件被其他软件需要,不能随便卸载
可以用:
rpm -e --nodeps (强制卸载)


强制卸载一个例子:
[root@A22770797 yuanjs]# rpm -ev --nodeps httpd-2.2.15-9.el6.x86_64
warning: /etc/httpd/conf/httpd.conf saved as /etc/httpd/conf/httpd.conf.rpmsave
[root@A22770797 yuanjs]# rpm -qa|grep httpd
httpd-tools-2.2.15-9.el6.x86_64
[root@A22770797 yuanjs]# rpm -ivh httpd-2.2.15-9.el6.x86_64.rpm
warning: httpd-2.2.15-9.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:httpd ########################################### [100%]
[root@A22770797 yuanjs]# apachectl -v
Server version: Apache/2.2.15 (Unix)
Server built: Apr 9 2011 08:58:28


====================================================================
Linux下which、whereis、locate、find 命令的区别
====================================================================
which 查看可执行文件的位置 : which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件
whereis 配合数据库查看文件的位置
locate 配合数据库查看文件的位置
find 实际搜寻硬盘查询文件名称


1、which
语法:
[root@redhat ~]# which 可执行文件名称
例如:
[root@redhat ~]# which passwd
/usr/bin/passwd
which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件


2、whereis
语法:
[root@redhat ~]# whereis [-bmsu] 文件或者目录名称
参数说明:
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
例如:
[root@redhat ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
将和passwd文件相关的文件都查找出来


[root@redhat ~]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
只将二进制文件查找出来


和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下是一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。


3、 locate
语法:
[root@redhat ~]# locate 文件或者目录名称
例如:
[root@redhat ~]# locate passwd
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp
/lib/security/pam_unix_passwd.so
/lib/security/pam_passwdqc.so
/usr/include/rpcsvc/yppasswd.x
/usr/include/rpcsvc/yppasswd.h
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph
/usr/lib/kde3/kded_kpasswdserver.la
/usr/lib/kde3/kded_kpasswdserver.so
/usr/lib/ruby/1.8/webrick/httpauth/htpasswd.rb
/usr/bin/vncpasswd
/usr/bin/userpasswd
/usr/bin/yppasswd
…………


4、 find
语法:
[root@redhat ~]# find 路径 参数


参数说明:


时间查找参数:
-atime n :将n*24小时内存取过的的文件列出来
-ctime n :将n*24小时内改变、新增的文件或者目录列出来
-mtime n :将n*24小时内修改过的文件或者目录列出来
-newer file :把比file还要新的文件列出来
名称查找参数:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户者名称为name的文件
-name file :寻找文件名为file的文件(可以使用通配符)


例如:
[root@redhat ~]# find / -name zgz
/home/zgz
/home/zgz/zgz
/home/weblogic/bea/user_projects/domains/zgz
/home/oracle/product/10g/cfgtoollogs/dbca/zgz
/home/oracle/product/10g/cfgtoollogs/emca/zgz
/home/oracle/oradata/zgz


[root@redhat ~]# find / -name '*zgz*'
/home/zgz
/home/zgz/zgz1
/home/zgz/zgzdirzgz
/home/zgz/zgz
/home/zgz/zgzdir
/home/weblogic/bea/user_projects/domains/zgz
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004
/home/weblogic/bea/user_projects/domains/zgz/zgz.log
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005


当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查 找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。


locate 是在数据库里查找,数据库大至每天更新一次。
whereis 可以找到可执行命令和man page
find 就是根据条件查找文件。
which 可以找到可执行文件和别名(alias)


==================================
linuxshell中"2>&1"含义(重要)
==================================
脚本是:
nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & "把标准错误输出重定向到标准输出,然后扔到/DEV/NULL下面去。"
对于&1 更准确的说应该是文件描述符 1,而1一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result,
然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了.
其中:
0表示键盘输入,
1表示屏幕输出,
2表示错误输出.
把标准错误输出重定向到标准输出,然后扔到/DEV/NULL下面去。


通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。


command >out.file 2>&1 &
1. command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
2. 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。
3. 最后一个&,是让该命令在后台执行。


试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.


---------------------------------------------------------------------------------------------------
你可以用
ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。


Question:
1) 为何2>&1要写在后面?
command > file 2>&1

首先是command > file将标准输出重定向到file中,
2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。


2) command 2>&1 >file
2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

用strace可以看到:
1. command > file 2>&1
这个命令中实现重定向的关键系统调用序列是:
open(file) == 3
dup2(3,1)
dup2(1,2)
2. command 2>&1 >file
这个命令中实现重定向的关键系统调用序列是:
dup2(1,2)
open(file) == 3
dup2(3,1)
可以考虑一下不同的dup2()调用序列会产生怎样的文件共享结构。




================================================
/dev/zero和/dev/null的区别
================================================
使用/dev/null:
把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.


使用/dev/zero:
像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.


/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero,是一个输入设备,你可你用它来初始化文件。


/dev/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
/dev/zero------该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。


dd --- disk dump
$dd if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l
total 4
-rw-r--r-- 1 oracle dba 1024 Jul 15 16:56 test.txt




禁止标准输出.
1 cat $filename >/dev/null
2 # 文件内容丢失,而不会输出到标准输出.


禁止标准错误 (来自例子 12-3).
1 rm $badname 2>/dev/null
2 # 这样错误信息[标准错误]就被丢到太平洋去了.


禁止标准输出和标准错误的输出.
1 cat $filename 2>/dev/null >/dev/null
2 # 如果"$filename"不存在,将不会有任何错误信息提示.
3 # 如果"$filename"存在, 文件的内容不会打印到标准输出.
4 # 因此Therefore, 上面的代码根本不会输出任何信息.
5 #
6 # 当只想测试命令的退出码而不想有任何输出时非常有用。
7 #
8 #
9 # cat $filename &>/dev/null
10 # 也可以, 由 Baris Cicek 指出.


Deleting contents of a file, but preserving the file itself, with all attendant permissions (from Example 2-1 and Example 2-3):
1 cat /dev/null > /var/log/messages
2 #: > /var/log/messages 有同样的效果, 但不会产生新的进程.(因为:是内建的)
3
4 cat /dev/null > /var/log/wtmp


自动清空日志文件的内容 (特别适合处理这些由商业Web站点发送的讨厌的"cookies"):
--------------------------------------------------------------------------------


例子 28-1. 隐藏cookie而不再使用
1 if [ -f ~/.netscape/cookies ] # 如果存在则删除.
2 then
3 rm -f ~/.netscape/cookies
4 fi
5
6 ln -s /dev/null ~/.netscape/cookies
7 # 现在所有的cookies都会丢入黑洞而不会保存在磁盘上了.


--------------------------------------------------------------------------------
使用/dev/zero
像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.
--------------------------------------------------------------------------------


例子 28-2. 用/dev/zero创建一个交换临时文件
1 #!/bin/bash
2 # 创建一个交换文件.
3
4 ROOT_UID=0 # Root 用户的 $UID 是 0.
5 E_WRONG_USER=65 # 不是 root?
6
7 FILE=/swap
8 BLOCKSIZE=1024
9 MINBLOCKS=40
10 SUCCESS=0
11
12
13 # 这个脚本必须用root来运行.
14 if [ "$UID" -ne "$ROOT_UID" ]
15 then
16 echo; echo "You must be root to run this script."; echo
17 exit $E_WRONG_USER
18 fi
19
20
21 blocks=${1:-$MINBLOCKS} # 如果命令行没有指定,
22 #+ 则设置为默认的40块.
23 # 上面这句等同如:
24 # --------------------------------------------------
25 # if [ -n "$1" ]
26 # then
27 # blocks=$1
28 # else
29 # blocks=$MINBLOCKS
30 # fi
31 # --------------------------------------------------
32
33
34 if [ "$blocks" -lt $MINBLOCKS ]
35 then
36 blocks=$MINBLOCKS # 最少要有 40 个块长.
37 fi
38
39
40 echo "Creating swap file of size $blocks blocks (KB)."
41 dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # 把零写入文件.
42
43 mkswap $FILE $blocks # 将此文件建为交换文件(或称交换分区).
44 swapon $FILE # 激活交换文件.
45
46 echo "Swap file created and activated."
47
48 exit $SUCCESS


--------------------------------------------------------------------------------


关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环回设备 (loopback device) (参考例子 13-8) 或"安全地" 删除一个文件(参考例子 12-55).
--------------------------------------------------------------------------------


例子 28-3. 创建ramdisk
1 #!/bin/bash
2 # ramdisk.sh
3
4 # "ramdisk"是系统RAM内存的一段,
5 #+ 它可以被当成是一个文件系统来操作.
6 # 它的优点是存取速度非常快 (包括读和写).
7 # 缺点: 易失性, 当计算机重启或关机时会丢失数据.
8 #+ 会减少系统可用的RAM.
9 #
10 # 那么ramdisk有什么作用呢?
11 # 保存一个较大的数据集在ramdisk, 比如一张表或字典,
12 #+ 这样可以加速数据查询, 因为在内存里查找比在磁盘里查找快得多.
13
14
15 E_NON_ROOT_USER=70 # 必须用root来运行.
16 ROOTUSER_NAME=root
17
18 MOUNTPT=/mnt/ramdisk
19 SIZE=2000 # 2K 个块 (可以合适的做修改)
20 BLOCKSIZE=1024 # 每块有1K (1024 byte) 的大小
21 DEVICE=/dev/ram0 # 第一个 ram 设备
22
23 username=`id -nu`
24 if [ "$username" != "$ROOTUSER_NAME" ]
25 then
26 echo "Must be root to run ""`basename $0`""."
27 exit $E_NON_ROOT_USER
28 fi
29
30 if [ ! -d "$MOUNTPT" ] # 测试挂载点是否已经存在了,
31 then #+ 如果这个脚本已经运行了好几次了就不会再建这个目录了
32 mkdir $MOUNTPT #+ 因为前面已经建立了.
33 fi
34
35 dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # 把RAM设备的内容用零填充.
36 # 为何需要这么做?
37 mke2fs $DEVICE # 在RAM设备上创建一个ext2文件系统.
38 mount $DEVICE $MOUNTPT # 挂载设备.
39 chmod 777 $MOUNTPT # 使普通用户也可以存取这个ramdisk.
40 # 但是, 只能由root来缷载它.
41
42 echo """$MOUNTPT"" now available for use."
43 # 现在 ramdisk 即使普通用户也可以用来存取文件了.
44
45 # 注意, ramdisk是易失的, 所以当计算机系统重启或关机时ramdisk里的内容会消失.
46 #
47 # 拷贝所有你想保存文件到一个常规的磁盘目录下.
48
49 # 重启之后, 运行这个脚本再次建立起一个 ramdisk.
50 # 仅重新加载 /mnt/ramdisk 而没有其他的步骤将不会正确工作.
51
52 # 如果加以改进, 这个脚本可以放在 /etc/rc.d/rc.local,
53 #+ 以使系统启动时能自动设立一个ramdisk.
54 # 这样很合适速度要求高的数据库服务器.
55
56 exit 0


--------------------------------------------------------------------------------
最后值得一提的是, ELF二进制文件利用了/dev/zero.
/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero,是一个输入设备,你可你用它来初始化文件。
/dev/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
/dev/zero------该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
$if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l
total 4
-rw-r--r-- 1 oracle dba 1024 Jul 15 16:56 test.txt


eg,find / -name access_log 2>/dev/null
这样,一些诸如一些错误信息就不会显示出来。




===============================
硬链接和软链接的区别
===============================
一.链接文件
链接有两种方式,软链接和硬链接。
1.软链接文件
  软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题(或曰“现象"),链接文件甚至可以循环链接自己。类似于编程语言中的递归。
  用ln -s 命令可以生成一个软连接,如下:
------------------------------------------------------------
  ln -s source_file softlink_file
------------------------------------------------------------
  在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
2.硬链接文件
  info ln 命令告诉您,硬链接是已存在文件的另一个名字(A "hard link" is another name for an existing file),这多少有些令人困惑。
硬连接的命令是:
------------------------------
  ln -d existfile newfile
------------------------------
  硬链接文件有两个限制
  1)、不允许给目录创建硬链接;
  2)、只有在同一文件系统中的文件之间才能创建链接。
  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。
这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。

二.两者之间的区别
硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要 文件,以防止“误删”的功能。
其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个
连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。
软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。


========================
Linux下chkconfig命令详解
========================
查看哪些服务打开了:sysv的服务可以用 chkconfig --list 来查看
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
使用语法:
chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]


chkconfig在没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。
如果是,返回true,否则返回false。
如果在服务名后面指定了on,off或者reset,那么chkconfig 会改变指定服务的启动信息。
on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。
on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。


参数用法:
--add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
--del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
--level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。


chkconfig --list [name]:显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
chkconfig [--level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置。


运行级文件:
每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用\ 跨行注释。
例如,random.init包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.


使用范例:
chkconfig --list #列出所有的系统服务
chkconfig --add httpd #增加httpd服务
chkconfig --del httpd #删除httpd服务
chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
chkconfig --list #列出系统所有的服务启动情况
chkconfig --list mysqld #列出mysqld服务设置情况
chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级


如何增加一个服务:
1.服务脚本必须存放在/etc/init.d/目录下;
2.chkconfig --add servicename
在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
3.chkconfig --level 35 mysqld on
修改服务的默认启动等级。

===============
执行等级
===============
[root@localhost ~]# cat /etc/inittab


# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)


========================
Linux命令:declare
========================
功能说明:声明 shell 变量。
语 法:declare [+/-][afrix]
补充说明:declare为shell指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性),在第二种语法中可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。
参 数:
  +/- "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
  -a 定义为数组array
  -f 定义为函数function
  -i 定义为整数integer
  -r 定义为只读
  -x 定义为通过环境输出变量


declare -x XMLRPC_TRACE_XML=1
declare +x XMLRPC_TRACE_XML


ATA --->PATA(IDE)
ATA --->SATA
SCSI --->SAS


hdb中的h代表IDE,如果显示为sdb,则代表SATA和SCSI
最后一个字幕b代表Primary总线,第二块硬盘即Slave位置


hda1 (IDE1:hard disk ) /boot 分区
hda2 (IDE1:hard disk ) / 分区
hdb (IDE2)
sda (SCSI1)
sdb (SCSI2)


软盘一般为/dev/fd0 fd1,硬盘一般为/dev/hda hdb ,硬盘逻辑分区一般为期hda1 hda2…等等,光盘一般为/dev/hdc
swap分区、/ 分区和 /boot分区


more /etc/passwd 查看用户名和组
more /etc/group 查看组
more /etc/hosts
more /etc/issue 查看OS版本
more /etc/networks
more /etc/protocols
more /etc/rpc
more /etc/services
more /etc/shadow 映射口令信息


chmod -R 777 xstart recursive 递归的改变所有的权限。
chmod -R +x /opt 将/opt下所有目录、文件及其子目录文件设置为可执行权限(+X)。


chown root:root xstart
chown -R root:root /opt 将/opt下所有目录及其子目录设置为root所拥有。


清除Linux防火墙:iptables -F service iptables stop


--------------------------------------------------
指令名称 : chmod
使用权限 : 所有使用者
--------------------------------------------------
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。
参数 :
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将档案 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 chmod 777 file


语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file

chmod 777 file
效果相同
chmod ug=rwx,o=x file

chmod 771 file
效果相同
若用chmod 4755 filename可使此程序具有root的权限


--------------------------------------------------
env命令:
--------------------------------------------------
#!/usr/local/bin/python
在 #!之后写上Python 解释器的完整路径
有一个更好的方案, 许多Unix 系统有一个命令叫 env, 位于 /bin 或 /usr/bin 中。它
会帮你在系统搜索路径中找到 python 解释器。 如果你的系统拥有 env, 你的启动行就可以改
为下面这样:
#!/usr/bin/env python
或者, 如果你的 env 位于 /bin 的话,
#!/bin/env python


[root@oam-nas2 yuanjs]# which env
/bin/env
[root@oam-nas2 yuanjs]# env --help
Usage: env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
Set each NAME to VALUE in the environment and run COMMAND.


-i, --ignore-environment start with an empty environment
-0, --null end each output line with 0 byte rather than newline
-u, --unset=NAME remove variable from the environment
--help display this help and exit
--version output version information and exit


A mere - implies -i. If no COMMAND, print the resulting environment.


Report env bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report env translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'env invocation'


看群晖的:
DiskStation> env
SSH_CLIENT=192.168.56.1 3402 22
MAIL=/var/mail/admin
USER=admin
OLDPWD=/var/services/homes/admin
HOME=/var/services/homes/admin
SSH_TTY=/dev/pts/0
PAGER=more
LOGNAME=admin
TERM=xterm
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
SHELL=/bin/sh
PWD=/
SSH_CONNECTION=192.168.56.1 3402 192.168.56.101 22
PGDATA=/var/service/pgsql
TZ=CST-8


看OMV:
root@openmediavault:/var/lib/php5# su openmediavault
$ env
LANGUAGE=zh_CN:zh
USER=openmediavault
SSH_CLIENT=192.168.56.1 2626 22
MAIL=/var/mail/openmediavault
SHLVL=1
OLDPWD=/tmp
HOME=/home/openmediavault
SSH_TTY=/dev/pts/0
LOGNAME=openmediavault
_=/bin/su
TERM=xterm
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
LANG=zh_CN.UTF-8
SHELL=/bin/sh
PWD=/var/lib/php5
SSH_CONNECTION=192.168.56.1 2626 192.168.56.102 22
$ exit
root@openmediavault:/var/lib/php5# env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.56.1 2626 22
SSH_TTY=/dev/pts/0
USER=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/var/lib/php5
LANG=zh_CN.UTF-8
SHLVL=1
HOME=/root
LANGUAGE=zh_CN:zh
LOGNAME=root
SSH_CONNECTION=192.168.56.1 2626 192.168.56.102 22
_=/usr/bin/env
OLDPWD=/tmp


===================================================
/etc/passwd 文件内容详细解释
===================================================
1、/etc/passwd包含用户信息
2、/etc/shadow包含passwd里面用户对应的密码
3、/etc/group包含组信息
4、/etc/gshadow包含组加密信息
5、*-应该是相应文件的备份,如果误操作可用此文件恢复:
/etc/passwd-
/etc/group-
/etc/shadow-
/etc/gshadow-
6、diff group group-看两个文件的区别。


程序用户账号的UID号默认在1-499之间,500-60000的UID号默认分配给普通用户账号使用。
而程序组账号的GID号默认在1-499之间,普通组账号使用的UID号默认为500-60000.
普通用户、组账号使用的默认UID、GID号范围定义在配置文件“/etc/login.defs”中。


系统帐号就是系统用的帐号,区别于个人帐号。其实就是一个帐号,和普通的个人帐号区别就是这个 ID 是系统程序用的。
Linux 下面的每个程序都是要有用户帐号来运行的,一些对外提供服务的程序,为了安全做隔离,都会用非 root 帐号来运行,这些非 root 帐号,专门用来跑程序的帐号,就是系统帐号。
其实这些程序也可以用一般的个人帐号来跑,不过一旦服务程序被攻破,这个帐号的个人数据也就会暴露了。
一般说来,系统帐号的帐号编号都是 <500 的,不过其实并不绝对。(uid 500前的系统用户,500后的创建的)




/etc/passwd 是存放用户的地方


用户名: 密码 : uid : gid :用户描述:主目录:登陆shell
1 2 3 4 5 6 7


root: x : 0 : 0 : root : / root : / bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin



UID : 每个用户必须被分配一个userid,”0”为root保留ID.
1-99为系统保留,分配给系统预定义帐号. HP-UX10.20支持2 147 483 646. HP-UX10.20以前支持不大于60000个.
系统中有一类用户称为伪用户(psuedo users),这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。常见的伪用户如表8-1所示。
表8-1 /etc/passwd文件中常见的伪用户
伪 用 户
含 义
bin
拥有可执行的用户命令文件
sys
拥有系统文件
adm
拥有帐户文件
uucp
UUCP使用
lp
lp或lpd子系统使用
nobody
NFS使用
除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit, cron, mail, usenet等,它们也都各自为相关的进程和文件所需要。


/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开。这些字段是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:


useradd -g mysql -d /home/test -m test(:新建一个用户test, 属于mysql组,开始目录是/home/test)


===================================================
Linux下passwd和shadow文件内容详解
===================================================
一、/etc/passwd
/etc/passwd 文件是一个纯文本文件,每行采用了相同的格式:
name:password:uid:gid:comment:home:shell
name 用户登录名
password 用户口令。此域中的口令是加密的,常用x表示。当用户登录系统时,系统对输入的口令采取相同的算法,与此域中的内容进行比较。如果此域为空,表明该用户登录时不需要口令。
uid 指定用户的 UID。用户登录进系统后,系统通过该值,而不是用户名来识别用户。
gid GID。如果系统要对相同的一群人赋予相同的权利,则使用该值。
comment 用来保存用户的真实姓名和个人细节,或者全名。
home 指定用户的主目录的绝对路径。
shell 如果用户登录成功,则要执行的命令的绝对路径放在这一区域中。它可以是任何命令。
如果/etc/passwd文件存放的是用户的信息,由6个分号组成的7个信息,解释如下
(1):用户名。
(2):密码(已经加密)
(3):UID(用户标识),操作系统自己用的
(4):GID组标识。
(5):用户全名或本地帐号
(6):开始目录
(7):登录使用的Shell,就是对登录命令进行解析的工具。
例如:abc:x:501:501::/home/abc:/bin/bash


二、/etc/shadow
如果查看/etc/shadow文件存放的特殊帐号信息如下:
name:!!:13675:0:99999:7:::
每一行给一个特殊帐户定义密码信息,每个字段用 : 隔开。
字段 1 定义与这个 shadow 条目相关联的特殊用户帐户。
字段 2 包含一个加密的密码。
字段 3 自 1/1/1970 起,密码被修改的天数
字段 4 密码将被允许修改之前的天数(0 表示“可在任何时间修改”)
字段 5 系统将强制用户修改为新密码之前的天数(1 表示“永远都不能修改”)
字段 6 密码过期之前,用户将被警告过期的天数(-1 表示“没有警告”)
字段 7 密码过期之后,系统自动禁用帐户的天数(-1 表示“永远不会禁用”)
字段 8 该帐户被禁用的天数(-1 表示“该帐户被启用”)
字段 9 保留供将来使用


如果查看/etc/shadow下存放的普通帐号信息如下:
(1):帐号名称
(2):密码:这里是加密过的,但高手也可以解密的。要主要安全问题(代!符号标识该帐号不能用来登录)
(3):上次修改密码的日期
(4):密码不可被变更的天数
(5):密码需要被重新变更的天数(99999表示不需要变更)
(6):密码变更前提前几天警告
(7):帐号失效日期
(8):帐号取消日期
(9):保留条目,目前没用
例如:abc:!!:14768:0:99999:7:::


===================================================
详细解说/etc/group /etc/passwd /etc/shadow文件
===================================================
特别注意:
useradd –g users –G administrators admin
新增一个用户admin, 主组是users, 附组是administrators, 有个主组合附组的区别。小g时主组,大G是附组。附组信息会存放在/etc/group之中,主组信息只会存放在/etc/passwd中。




在Linux中,用户(User)和用户组(Group)的配置文件,是作为系统管理员的你最应该了解和掌握的系统基础文件之一。从另一方面来说,了解这些文件也是系统安全管理的重要组成部份,作为一个合格的系统管理员一定要对用户和用户组配置文件了解透彻才行;
一、用户(User)相关:
  谈到用户,就不得不谈用户管理、用户配置文件、以及用户查询和管理的控制工具;用户管理主要通过修改用户配置文件完成,用户管理控制工具最终目的也是为了修改用户配置文件。
  那么,什么是用户查询和管理控制工具呢?用户查询和控制工具是查询、添加、修改和删除用户等系统管理工具,比如查询用户的id和finger命
令,添加用户的useradd 或adduser 、userdel 用户的删除 、设置密码的passwd命令 、修改用户usermod
等等;我们需要知道的是通过用户查询和控制工具所进行的动作的最终目的也是修改用户配置文件;所以我们进行用户管理的时候,直接修改用户配置文件一样可以
达到用户管理的目的。
  了解了上面所说的,我们便能实实在在的感觉到用户(User)配置文件的重要性:其实用户和用户组在系统管理中是不可分割的,但为了说明问题,
我们还是得把用户(User)的配置文件单列出来解说,其中包括/etc/passwd 和/etc/shadow
文件;在这之中,你还能了解UID的重要性;
  通过本标题,您可以了解或掌握的内容有:了解/etc/passwd和/etc/shadow;什么UID ;
  与用户相关的系统配置文件主要有/etc/passwd
和/etc/shadow,其中/etc/shadow是用户资讯的加密文件,比如用户的密码口令的加密保存等;/etc/passwd
和/etc/shadow 文件是互补的;我们可以通过对比两个文件来差看他们的区别;
  1、关于/etc/passwd 和 UID;
  /etc/passwd 是系统识别用户的一个文件,做个不恰当的比喻,/etc/passwd
是一个花名册,系统所有的用户都在这里有登录记载;当我们以beinan 这个账号登录时,系统首先会查阅 /etc/passwd
文件,看是否有beinan 这个账号,然后确定beinan的UID,通过UID 来确认用户和身份,如果存在则读取/etc/shadow
影子文件中所对应的beinan的密码;如果密码核实无误则登录系统,读取用户的配置文件;
  1)/etc/passwd 的内容理解:
  在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割,比如下面是我的系统中的/etc/passwd 的两行:
   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:501:502::/home/linuxsir:/bin/bash
  第一字段:用户名(也被称为登录名);在上面的例子中,我们看到这两个用户的用户名分别是 beinan 和linuxsir;
  第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;
  第三字段:UID ;请参看本文的UID的解说;
  第四字段:GID;请参看本文的GID的解说;
  第五字段:用户名全称,这是可选的,可以不设置,在beinan这个用户中,用户的全称是beinan sun ;而linuxsir 这个用户是没有设置全称;
  第六字段:用户的家目录所在位置;beinan 这个用户是/home/beinan ,而linuxsir 这个用户是/home/linuxsir ;
  第七字段:用户所用SHELL 的类型,beinan和linuxsir 都用的是 bash ;所以设置为/bin/bash ;
  2)关于UID 的理解:
  UID 是用户的ID 值,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID
,系统管理员应该确保这一规则。系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs
可以查到,一般Linux发行版约定为60000; 在Linux 中,root的UID是0,拥有系统最高权限;
  UID 在系统唯一特性,做为系统管理员应该确保这一标准,UID
的唯一性关系到系统的安全,应该值得我们关注!比如我在/etc/passwd 中把beinan的UID
改为0后,你设想会发生什么呢?beinan这个用户会被确认为root用户。beinan这个帐号可以进行所有root的操作;
  UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名,切记;把几个用户共用一个UID
是危险的,比如我们上面所谈到的,把普通用户的UID 改为0,和root共用一个UID
,这事实上就造成了系统管理权限的混乱。如果我们想用root权限,可以通过su或sudo来实现;切不可随意让一个用户和root分享同一个UID ;
  UID是唯一性,只是要求管理员所做的,其实我们修改/etc/passwd 文件,可以修改任何用户的UID的值为0,
  一般情况下,每个Linux的发行版都会预留一定的UID和GID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftp、nobody、adm、rpm、bin、shutdown等;
  在Fedora 系统会把前499 个UID和GID 预留出来,我们添加新用户时的UID
从500开始的,GID也是从500开始,至于其它系统,有的系统可能会把前999UID和GID预留出来;以各个系统中/etc/login.defs
中的 UID_MIN 的最小值为准; Fedora 系统 login.defs的UID_MIN是500,而UID_MAX
值为60000,也就是说我们通过adduser默认添加的用户的UID的值是500到60000之间;而Slackware
通过adduser不指定UID来添加用户,默认UID 是从1000开始;
  2、关于/etc/shadow ;
  1)/etc/shadow 概说;
  /etc/shadow文件是/etc/passwd 的影子文件,这个文件并不由/etc/passwd
而产生的,这两个文件是应该是对应互补的;shadow内容包括用户及被加密的密码以及其它/etc/passwd
不能包括的信息,比如用户的有效期限等;这个文件只有root权限可以读取和操作,权限如下:
  -r——– 1 root root 1.5K 10月 16 09:49 /etc/shadow
  /etc/shadow 的权限不能随便改为其它用户可读,这样做是危险的。如果您发现这个文件的权限变成了其它用户组或用户可读了,要进行检查,以防系统安全问题的发生;
  如果我们以普通用户查看这个文件时,应该什么也查看不到,提示是权限不够:
  [beinan@localhost ~]$ more /etc/shadow
   /etc/shadow: 权限不够
  2)/etc/shadow 的内容分析;
  /etc/shadow 文件的内容包括9个段位,每个段位之间用:号分割;我们以如下的例子说明;
  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;
  第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;
  第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;
  第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;
  第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;
  第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;
  第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
  第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
  第九字段:保留字段,目前为空,以备将来Linux发展之用;
  如果更为详细的,请用 man shadow来查看帮助,您会得到更为详尽的资料;
  我们再根据实例分析:
  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用户名(也被称之为登录名),在例子中有峡谷两条记录,也表示有两个用户beinan和linuxsir
  第二字段:被加密的密码,如果有的用户在此字段中是x,表示这个用户不能登录系统,也可以看作是虚拟用户,不过虚拟用户和真实用户都是相对的,系统管理员随时可以对任何用户操作;
  第三字段:表示上次更改口令的天数(距1970年01月01日),上面的例子能说明beinan和linuxsir这两个用户,是在同一天更改了用户密码,当然是通过passwd 命令来更改的,更改密码的时间距1970年01月01日的天数为13072;
  第四字段:禁用两次口令修改之间最小天数的功能,设置为0
  第五字段:两次修改口令间隔最多的天数,在例子中都是99999天;这个值如果在添加用户时没有指定的话,是通过/etc/login.defs来获取默认值,PASS_MAX_DAYS 99999;您可以查看/etc/login.defs来查看,具体的值;
  第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc
/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;在例子中的值是7 ,表示在用户口令将过期的前7天警告用户更改期口令;
  第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;在例子中,此字段两个用户的都是空的,表示禁用这个功能;
  第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;在例子中,
我们看到beinan这个用户在此字段是空的,表示此用户永久可用;而linuxsir这个用户表示在距1970年01月01日后13108天后过期,算
起来也就是2005年11月21号过期;哈哈,如果有兴趣的的弟兄,自己来算算,大体还是差不多的;);
  第九字段:保留字段,目前为空,以备将来Linux发展之用;
二、关于用户组;
  具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件;在本标题下,您还能了解到什么是GID ;
  1、/etc/group 解说;
  /etc/group
文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用
户组的用户之间具有相似的特征。比如我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件
的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的;
  用户组的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进去,
  2、/etc/group 内容具体分析
  /etc/group 的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录;格式如下:
  group_name:passwd:GID:user_list
  在/etc/group 中的每条记录分四个字段:
  第一字段:用户组名称;
  第二字段:用户组密码;
  第三字段:GID
  第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;
  我们举个例子:
  root:x:0:root,linuxsir 注:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户(可以通过/etc/passwd查看);;
  beinan:x:500:linuxsir 注:用户组beinan,x是密码段,表示没有设置密码,GID是500,beinan用户组下包括linuxsir用户及GID为500的用户(可以通过/etc/passwd查看);
  linuxsir:x:502:linuxsir 注:用户组linuxsir,x是密码段,表示没有设置密码,GID是502,linuxsir用户组下包用户linuxsir及GID为502的用户(可以通过/etc/passwd查看);
  helloer:x:503: 注:用户组helloer,x是密码段,表示没有设置密码,GID是503,helloer用户组下包括GID为503的用户,可以通过/etc/passwd查看;
  而/etc/passwd 对应的相关的记录为:
  root:x:0:0:root:/root:/bin/bash
   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
   helloer:x:502:503::/home/helloer:/bin/bash
  由此可以看出helloer用户组包括 helloer用户;所以我们查看一个用户组所拥有的用户,可以通过对比/etc/passwd和/etc/group来得到;
  2、关于GID ;
  GID和UID类似,是一个正整数或0,GID从0开始,GID为0的组让系统付予给root用户组;系统会预留一些较靠前的GID给系统虚拟
用户(也被称为伪装用户)之用;每个系统预留的GID都有所不同,比如Fedora
预留了500个,我们添加新用户组时,用户组是从500开始的;而Slackware
是把前100个GID预留,新添加的用户组是从100开始;查看系统添加用户组默认的GID范围应该查看 /etc/login.defs 中的
GID_MIN 和GID_MAX 值;
  我们可以对照/etc/passwd和/etc/group 两个文件;我们会发现有默认用户组之说;我们在 /etc/passwd
中的每条用户记录会发现用户默认的GID
;在/etc/group中,我们也会发现每个用户组下有多少个用户;在创建目录和文件时,会使用默认的用户组;我们还是举个例子;
  比如我把linuxsir 加为root用户组,在/etc/passwd 和/etc/group 中的记录相关记录为:
  linuxsir用户在 /etc/passwd 中的记录;我们在这条记录中看到,linuxsir用户默认的GID为502;而502的GID 在/etc/group中查到是linuxsir用户组;
  linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
  linuxsir 用户在 /etc/group 中的相关记录;在这里,我们看到linuxsir用户组的GID 为502,而linuxsir 用户归属为root、beinan用户组;
  root:x:0:root,linuxsir
   beinan:x:500:linuxsir
   linuxsir:x:502:linuxsir
  我们用linuxsir 来创建一个目录,以观察linuxsir用户创建目录的权限归属;
  [linuxsir@localhost ~]$ mkdir testdir
   [linuxsir@localhost ~]$ ls -lh
  总用量 4.0K
  drwxrwxr-x 2 linuxsir linuxsir 4.0K 10月 17 11:42 testdir
  通过我们用linuxsir 来创建目录时发现,testdir的权限归属仍然是linuxsir用户和linuxsir用户组的;而没有归属root和beinan用户组,明白了吧;
  但值得注意的是,判断用户的访问权限时,默认的GID 并不是最重要的,只要一个目录让同组用户可以访问的权限,那么同组用户就可以拥有该目录的访问权,在这时用户的默认GID 并不是最重要的;
  3、/etc/gshadow 解说;
  /etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc
/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极
有必要的。比如我们不想让一些非用户组成员永久拥有用户组的权限和特性,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用
到用户组密码;
  /etc/gshadow 格式如下,每个用户组独占一行;
  groupname:password:admin,admin,…:member,member,…
  第一字段:用户组
  第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
  第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
  第四字段:组成员,如果有多个成员,用,号分割;
  举例:
  beinan:!::linuxsir
   linuxsir:oUS/q7NH75RhQ::linuxsir
  第一字段:这个例子中,有两个用户组beinan用linuxsir
  第二字段:用户组的密码,beinan用户组无密码;linuxsir用户组有已经,已经加密;
  第三字段:用户组管理者,两者都为空;
  第四字段:beinan用户组所拥有的成员是linuxsir ,然后还要对照一下/etc/group和/etc/passwd
查看是否还有其它用户,一般默认添加的用户,有时同时也会创建用户组和用户名同名称; linuxsir 用户组有成员linuxisir ;
  如何设置用户组的密码? 我们可以通过 gpasswd 来实现;不过一般的情况下,没有必要设置用户组的密码;不过自己实践一下也有必要;下面是一个为linuxsir用户组设置密码的例子;
  gpasswd 的用法: gpasswd 用户组
  
[email=root@localhost]root@localhost[/email]
~]# gpasswd linuxsir
  正在修改 linuxsir 组的密码
  新密码:
  请重新输入新密码:
  用户组之间的切换,应该用 newgrp ,这个有点象用户之间切换的su ;我先举个例子:
  [beinan@localhost ~]$ newgrp linuxsir
  密码:
  [beinan@localhost ~]$ mkdir lingroup
   [beinan@localhost ~]$ ls -ld lingroup/
  drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56 lingroup/
  [beinan@localhost ~]$ newgrp beinan
   [beinan@localhost ~]$ mkdir beinangrouptest
   [beinan@localhost ~]$ ls -ld beinangrouptest
  drwxrwxr-x 2 beinan beinan 4096 10月 18 15:56 beinangrouptest
  说明:我是以beinan用户组切换到linuxsir用户组,并且建了一个目录,然后再切换回beinan用户组,又建了一个目录,请观察两个目录属用户组的不同;还是自己体会吧;
三、通过用户和用户组配置文件来查询或管理用户;
  1、用户和用户组查询的方法;


  1)通过查看用户(User)和用户组的配置文件的办法来查看用户信息
  我们已经用户(User)和用户组(Group)的配置文件已经有个基本的了解,通过查看用户(User)和用户组的配置文件,我们就能做到对系统用户的了解,当然您也可以通过id 或finger 等工具来进行用户的查询等任务。
  对于文件的查看,我们可以通过 more 或cat 来查看,比如 more /etc/passwd 或cat /etc/passwd ;其它工具也一样,能对文本查看就行,比如less 也好
  比如我们可以通过more 、cat 、less命令对/etc/passwd 的查看,虽然命令不同,但达到的目的是一样的, 都是得到/etc/passwd 的内容;
  [root@localhost ~]# more /etc/passwd
   [root@localhost ~]# cat /etc/passwd
   [root@localhost ~]# less /etc/passwd


  2)通过id和finger 工具来获取用户信息;-------很重要-----
  除了直接查看用户(User)和用户组(Group)配置文件的办法除外,我们还有id和finger工具可用,我们一样通过命令行的操作,来
完成对用户的查询;id和finger,是两个各有测重的工具,id工具更测重用户、用户所归属的用户组、UID 和GID 的查看;而finger
测重用户资讯的查询,比如用户名(登录名)、电话、家目录、登录SHELL类型、真实姓名、空闲时间等等;


  id 命令用法;
  id 选项 用户名
  比如:我想查询beinan和linuxsir 用户的UID、GID 以及归属用户组的情况:
  [root@localhost ~]# id beinan
   uid=500(beinan) gid=500(beinan) groups=500(beinan)
  注:beinan的UID 是 500,默认用户组是beinan,默认用户组的GID 是500,归属于beinan用户组;
  [root@localhost ~]# id linuxsir
   uid=505(linuxsir) gid=502(linuxsir) groups=502(linuxsir),0(root),500(beinan)
  注:linuxsir的UID 是505,默认用户组是linuxsir ,默认用户组的GID 是502,归属于linuxsir(GID为502)、root(GID为0),beinan(GID为500);
  关于id的详细用法,我会在专门用户查询的文章来介绍;您可以通过man id 来查看用法,用起来还是比较简单的;
  
finger 的用法
  finger 选项 用户名1 用户名2 …
  详细用法请参看man finger ;关于更为详细用法,我会在专门用户查询的文章来介绍;
  如果finger 不加任何参数和用户,会显示出当前在线用户,和w命令类似;对比一下;不过各有测重;


 [root@localhost ~]# w
   14:02:42 up 1:03, 3 users, load average: 0.04, 0.15, 0.18
   USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
   linuxsir tty1 - 13:39 22:51 0.01s 0.01s -bash
   beinan tty2 - 13:53 8:48 11.62s 0.00s /bin/sh /usr/X1
   beinan pts/0 :0.0 13:57 0.00s 0.14s 1.08s gnome-terminal


   [root@localhost ~]# finger
   Login Name Tty Idle Login Time Office Office Phone
   beinan beinan sun tty2 8 Oct 18 13:53
   beinan beinan sun pts/0 Oct 18 13:57 (:0.0)
   linuxsir linuxsir open tty1 22 Oct 18 13:39 linuxsir o +1-389-866-771
  如果我们在finger 后面加上用户名,就可以看到用户更为详细的信息,可以一次查看多个用户,用空格分开,比如下面的例子中,我们一次查询两个用户beinan和linuxsir的信息;
  [root@localhost ~]# finger beinan linuxsir
   Login: beinan 注:用户名(也是登录名) Name: beinan sun (用户名全称)
   Directory: /home/beinan 注:家目录 Shell: /bin/bash 注:所用SHELL类型
   On since Tue Oct 18 13:53 (CST) on tty2 10 minutes 55 seconds idle 注:空闲时间;
   On since Tue Oct 18 13:57 (CST) on pts/0 from :0.0
   No mail.
   No Plan.
   Login: linuxsir Name: linuxsir open
   Directory: /home/linuxsir Shell: /bin/bash
   Office: linuxsir office, +1-389-866-7715
   On since Tue Oct 18 13:39 (CST) on tty1 24 minutes 58 seconds idle
   No mail.
   No Plan.


  3)用户组查询的办法;
  我们可以通过用户来查询所归属的组,用groups 来查询;比如我查询beinan和linuxsir 所归属的组,我们可以用groups 来查询;
  [root@localhost ~]# groups beinan linuxsir
   beinan : beinan
   linuxsir : linuxsir root beinan
  注:这是通过groups 同时查看了用户beinan和linuxsir所归属的组;


  2、通过修改用户(User)和用户组(Group)配置文件的办法来添加;
  由于我们已经在前面说过,可以通过修改配置文件的办法来管理用户,所以此主题应该包括此内容;当然通过用户及用户组管理工具(比如
adduser、userdel、usermod 、userinfo、groupadd 、groupdel
、groupmod等)也是可以的,通过管理工具对用户的管理我们将要在专门一篇文章中介绍;
  通过修改用户(User)和用户组(Group)配置文件的方法管理用户之用户的添加流程;
  我们先以添加用户为例,对用户的删除和修改都比较简单;
  1)修改 /etc/passwd ,添加用户记录;
  我们按/etc/passwd的格式的约定来添加新的用户记录;当然您要让一个用户失效,可以删除您想要删除的用户记录;值得注意的是,不能让UID 重复;
  比如我想添加lanhaitun 这个用户,我发现UID 508没有用户用,并且我想把其用户组也设置为lanhaitun ,用户组的GID 也设置为508,如果GID 没有占用的话;
  我们要打开 /etc/passwd ,在最下面加一行;
  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash
  然后执行pwconv ,让/etc/passwd 和/etc/shadow同步,您可以查看 /etc/shadow的内容是否同步;
  [root@localhost beinan]# pwconv
  2)修改/etc/group
  首先,我们得查看是否有lanhaitun用户组,以及GID 508 是否被其它用户组占用;
  [root@localhost ~]# more /etc/group |grep lanhaitun
   [root@localhost ~]# more /etc/group |grep 508
  通过查看,我们发现没有被占用;所以我们要添加lanhaitun 的记录到 /etc/group
  lanhaitun:x:508:
  其次,是运行 grpconv 来同步/etc/group 和/etc/gshadow内容,您可以通过查看/etc/gshadow的内容变化确认是不是添加组成功了;
  [root@localhost beinan]# grpconv
  3)创建用户的家目录,并把用户启动文件也复制过去;
  创建用户的家目录,我们要以/etc/passwd 中添加的新用户的记录为准,我们在/etc/passwd
中添加新用户lanhaitun ,她的家目录是处于/home/lanhaitun ;另外我们还需要把/etc/skel
目录下的.*隐藏文件复制过去;
  [root@localhost ~]# cp -R /etc/skel/ /home/lanhaitun
   [root@localhost ~]# ls -la /home/lanhaitun/
   总用量 48
   drwxr-xr-x 3 root root 4096 10月 18 14:53 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 root root 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 root root 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 root root 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 root root 5619 10月 18 14:53 .canna
   -rw-r–r– 1 root root 438 10月 18 14:53 .emacs
   -rw-r–r– 1 root root 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 root root 4096 10月 18 14:53 .kde
   -rw-r–r– 1 root root 658 10月 18 14:53 .zshrc
  4)改变新增用户家目录的属主和权限;
  我们发现新增用户的家目录的属主目前是root ,并且家目录下的隐藏文件也是root权限;
  [root@localhost ~]# ls -ld /home/lanhaitun/
   drwxr-xr-x 3 root root 4096 10月 18 14:53 /home/lanhaitun/
  所以我们要通过chown 命令来改变/home/lanhaitun目录归属为lanhaitun用户;
  [root@localhost ~]# chown -R lanhaitun:lanhaitun /home/lanhaitun
  查看是否已经更换了属主为lanhaitun用户所有;
  [root@localhost ~]# ls -ld /home/lanhaitun/
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
   [root@localhost ~]# ls -la /home/lanhaitun/
   总用量 48
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna
   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs
   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde
   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc
  看来已经实现了;
  但这样还是不够的,因为/home/lanhaitun/的目录权限可能会过于公开;
  drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
  我们看到 /home/lanhaitun/ 目录的权限为 drwxr-xr-x ,也就是同组用户和其它用户组所能查看,为了保密,我们有理由把新增用户家目录的权限设置为只有其自己可读可写可执行;于是… …
  [root@localhost ~]# chmod 700 /home/lanhaitun/
   [root@localhost ~]# ls -ld /home/lanhaitun/
   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
  我们用其它用户,当然得把具有超级权限的root用户除外;比如我以beinan用户来查看lanhaitun的家目录会得到如下信息;
  [beinan@localhost ~]$ ls -la /home/lanhaitun/
   ls: /home/lanhaitun/: 权限不够
  如此看来,lanhaitun用户的家目录是安全的
<IMG onmousewheel="return imgzoom(this);" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://linux.qisi.org/wp-includes/images/smilies/icon_wink.gif');}" alt="" src=/uploadfile/2016/0502/20160502112120530.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>


  5)设置新增用户的密码;
  以上各步骤都就序了,我们得为新增用户设置密码了;要通过passwd 命令来生成;这个没有办法通过修改文件解决;
  passwd 的用法:
  passwd 用户
  [root@localhost ~]# passwd lanhaitun
   Changing password for user lanhaitun.
   New UNIX password: 注:输入您的密码
   Retype new UNIX password: 再输入一次
   passwd: all authentication tokens updated successfully. 注:设置密码成功
  6)测试添增用户是否成功;
  您可以用新增用户登录测试,也可以通过su 来切换用户测试;
  [beinan@localhost ~]$ su lanhaitun
   Password:
   [lanhaitun@localhost beinan]$ cd ~
   [lanhaitun@localhost ~]$ pwd
   /home/lanhaitun
   [lanhaitun@localhost ~]$ ls -la
   总用量 52
   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 15:15 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna
   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs
   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde
   -rw——- 1 lanhaitun lanhaitun 66 10月 18 15:15 .xauthOhEoTk
   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc
   [lanhaitun@localhost ~]$ mkdir testdir
   [lanhaitun@localhost ~]$ ls -lh
   总用量 4.0K
   drwxrwxr-x 2 lanhaitun lanhaitun 4.0K 10月 18 15:16 testdir
  通过上面一系列动作,我们会发现所创建的lanhaitun用户已经成功;
  2、通过修改用户(User)和用户组(Group)配置文件的办法来修改用户或用户组;
  我们可以修改/etc/passwd 和/etc/group 来达到修改用户和用户所归属的组,这个过程和添加新用户时差不多;比如我想修改lanhaitun的用户名全称、公司以及电话等信息;我们可以修改/etc/passwd 实现;
  1)修改用户信息;
  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash 注:这是初始记录;
  我们可以修改为
  lanhaitun:x:508:508:lanhaitun wu,Office Dalian,13000000000:/home/lanhaitun:/bin/bash
  当然我们还可以修改用户的bash 类型,家目录等,当然如果修改家目录,还得进行建家目录、属主和权限的操作,这和前面添加用户的办法在程序上有些是相同的;
  修改完成后,我们要进行pwconv 同步,通过finger 来查看用户的信息等;
  [root@localhost lanhaitun]# pwconv
   [root@localhost lanhaitun]# finger lanhaitun
   Login: lanhaitun Name: lanhaitun wu
   Directory: /home/lanhaitun Shell: /bin/bash
   Office: Office Dalian, +1-300-000-0000
   Never logged in.
   No mail.
   No Plan.


  2)修改用户所归属的组,可以通过/etc/group 修改实现;
  当然修改用户和用户组,不仅能通过修改配置文件来实现,还能过过 usermod 及chfn来实现;我将在以后的文档中写一写,也比较简单;您可以通过man来查看用法;在这里我们先讲一讲如何通过修改配置文件来达到目的;
  如果我们想把lanhaitun 这个用户归属到root用户组,所以我们还能修改/etc/group 的办法来达到目的;找到/etc/group 中的root开头的一行,按其规划加入lanhaitun;
  root:x:0:root,lanhaitun
  如果不明白,看前面/etc/group的解释,谢谢;
  然后执行 grpconv 命令来同步/etc/group 和/etc/gshadow两个文件的内容;
  [root@localhost ~]# grpconv
  查看lanhaitun归属组的信息;
  [root@localhost ~]# id lanhaitun
   uid=508(lanhaitun) gid=508(lanhaitun) groups=508(lanhaitun),0(root)
  3)删除用户及用户组的办法;
  这个比较简单,我们可以通过删除/etc/passwd 和/etc/group 相应的用户和用户组记录就能达到目的,也能过过userdel 和groupdel 来实现对用户及用户组的删除;
  如果是通过修改用户和用户组配置文件的办法来删除用户,就是删除相应的记录就行了,如果不想保留其家目录,删除就是了。
  [root@localhost ~]# userdel lanhaitun
   [root@localhost ~]# userdel -r lanhaitun
  注:可以用userdel 来删除lanhaitun 用户,我们看到第二个例子中多了一个参数-r
,第一个例子是说只删除lanhaitun用户,其家目录和mail等仍会保存;加上-r
参数,是删除家目录及mail等;所以要小心操作;用userdel 删除用户的同时,也会把其用户组删除;我们可以通过/etc/passwd
和/etc/group 的内容变化来查看。


===================================================
linux系统账号和密码策略
===================================================
一.情况说明
为了满足系统安全性要求和最大限度的保障主机及数据安全。特为linux系统的账号和密码作以下安全策略设置。
Linux系统中对账号和密码的管理是通过下面这些配置文件:
/etc/login.defs
/etc/shadow
其中/etc/login.defs文件是一个全局性的文件它的设置是对系统中所有新创建的用户起作用(root用户除外)
然而/etc/shadow文件可以针对每个特定账号进行策略设置。
因此我们可以修改/etc/login.defs文件使以后新创建的用户都严格遵循策略限制,同时我们可以手动修改/etc/shadow文件对系统现有的账号进行设置以满足策略要求。


二.修改/etc/login.defs文件
修改账号密码最大有效使用时间
添加test账号测试效果并查看test账号目前信息
1.调整系统时间,人为使test账号过期
2.用test账号登陆系统
提示密码过期需要修改
系统提示需要修改账号密码。而且修改的密码必须符合密码复杂度要求,否则不予进入系统。
3.登陆系统后查看test账号情况
密码过期日期自动往后推移1天
而且从输出信息可以得知此账号过期时间已经往后又推迟了1天


三.在/etc/login.defs文件中还可以修改账号的密码长度
PASS_MIN_LEN 5 系统默认是最少5个字符


四.修改/etc/shadow文件
这个文件我们可以手动去修改但是为了安全和正确性,我们建议使用系统提供的一个命令来修改:chage
-m :密码可更改的最小天数。为零时代表任何时候都可以更改密码。
  -M :密码保持有效的最大天数。
  -W :用户密码到期前,提前收到警告信息的天数。
  -E :帐号到期的日期。过了这天,此帐号将不可用。
  -d :上一次更改的日期
  -l :例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
这个命令的使用必须是root账号(除了-l参数),因此我们可以使用以下命名和参数:
#chage –M 90 –W 7 账号 ?—修改密码有效期限为90天并且提前7天警告用户密码将过期

五.Sudo设置
为了便于日后的维护和避免当root账号密码过期后无法操作系统的情况出现。特意为某个特殊账号配置sudo权限。
1. 基本步骤
以root用户登陆系统
运行#visudo
在文件的结尾添加内容:
test ALL=(root)/usr/bin/chage
账号名称
主机名ALL代表所有主机
赋予普通用户具有root权限执行命令
赋予普通用户有执行chage的权限


======================================
Linux时钟简介:非常重要
======================================
Linux机器里有两个时钟,一个是硬件时钟(CMOS时钟),一个是内核时钟。
硬件时钟是电池驱动的,通过专门的芯片工作。可以通过BIOS设置屏或一些系统命令(如hwclock)进行设置。
内核时钟是由 内核维护的,启动时从硬件读取时间,之后独立运行。
RTC(Real Time Clock)
即Linux实时的时钟驱动,通常它们被嵌在计算机的芯片中,也有一些是在主板上使用Motorola MC146818(或clone)实现的。该硬件设备可映射到/dev/rtc, 供root编程访问。


Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的那个主板硬件时钟,这个时钟可以在BIOS的“Standard BIOS Feture”项中进行设置。 既然Linux有两个时钟系统,那么大家所使用的Linux默认使用哪种时钟系统呢?会不回出现两种系统时钟冲突的情况呢?这些疑问和担心不无道理。首 先,Linux并没有默认哪个时钟系统。当Linux启动时,系统时钟会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作。
从Linux启动过程来看,系统时钟和硬件时钟不会发生冲突,但Linux中的所有命令(包括函数)都是采用的系统时钟设置。不仅如此,系统时钟和硬件时 钟还可以采用异步方式,即系统时间和硬件时间可以不同。这样做的好处对于普通用户意义不大,但对于Linux网络管理员却有很大的用处。例如,要将一个很大的网络中(跨越若干时区)的服务器同步,假如位于美国纽约的Linux服务器和北京的Linux服务器,其中一台服务器无须改变硬件时钟 而只需临时设置一个系统时间,如要将北京服务器上的时间设置为纽约时间,两台服务器完成文件的同步后,再与原来的时钟同步一下即可。这样系统和硬件时钟就 提供了更为灵活的操作。
在Linux中,用于时钟查看和设置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只不过clock命 令除了支持x86硬件体系外,还支持Alpha硬件体系。由于目前绝大多数用户使用x86硬件体系,所以可以视这两个命令为一个命令来学习。




1.hwclock –r : 查看硬件时钟是否为本地时间
为了查看硬件时钟是否为本地时间,运行命令hwclock –r。结果系统提示:“Could not open RTC: No such file or directory”,即找不到RTC文件。


2./dev/rtc如何创建RTC文件
cat /dev/rtc
cat /proc/driver/rtc -----这个很重要
mknod /dev/rtc c 10 135
date


由于内核在编译过程中没有提供RTC支持,需要重新编译内核(或为内核增加一个module)。方法为,在make menuconfig阶段,选中“Character device”的“Enhanced Real Time Clock Support”一项的支持。为内核增加了该模块后,目录/proc/drive/下已出现了rtc文件,cat也能查看到正常的内容。但/dev/目录下仍没有rtc文件。
于是通过mknod命令在/dev目录下增加rtc文件。通过man rtc可以得知,RTC为只读字符设备,主10,从135。因此命令为“mknod /dev/rtc c 10 135”。命令执行完毕后,/dev下成功生成了rtc文件。运行hwclock –r,能够看到硬件时间为本地时间。通过date命令查看系统时间,却为UTC时间。这说明系统没有进行本地时间的设置。


3./etc/localtime 决定了哪个时区
[root@nas-oam1 etc]# date -R 查看时间和时区。
Mon, 23 Dec 2013 11:33:48 +0800
Linux的系统时区是通过符号连接/etc/localtime来得到的。
可以通过tzset命令来设置时区。如果没有该命令,可以通过命令“ln –s /etc/localtime /usr/share/zoneinfo/Asia/Shanghai”来将时区设置为亚洲的上海。


4./etc/sysconfig/clock
该配置文件可用来设置用户选择何种方式显示时间。
如果硬件时钟为本地时间,则UTC设为0(缺省值),并且不用设置环境变量TZ。
如果硬件时钟为UTC时间,则要设置UTC为1,并设置环境变量TZ(或配置文件/etc/TZ)为时区信息,如“Asia/Shanghai”。


我机器的硬件时间为本地时间,因此该配置文件内容为:
ZONE="Asia/Shanghai"
UTC=0
ARC=0





1.在虚拟终端中使用date命令来查看和设置系统时间
查看系统时钟的操作:
# date --------------------------有用


设置系统时钟的操作:
# date 091713272003.30 --------------------------有用
通用的设置格式:
# date 月日时分年.秒


2.使用hwclock或clock命令查看和设置硬件时钟
查看硬件时钟的操作:
# hwclock --show 或# clock –show --------------------------有用
2003年09月17日 星期三 13时24分11秒 -0.482735 seconds
设置硬件时钟的操作:
# hwclock --set --date="08/23/2013 09:52:00"
或者# clock --set --date="09/17/2003 13:26:00"
通用的设置格式:hwclock/clock --set --date=“月/日/年 时:分:秒”。


3.系统时钟和硬件时钟同步:
# hwclock --hctosys 或者 --------------------------有用
# clock --hctosys --------------------------有用
上面命令中,--hctosys表示Hardware Clock to SYStem clock。


硬件时钟与系统时钟同步:
hwclock --systohc 或者 --------------------------有用
clock –systohc --------------------------有用


注意的是:clock是hwclock的软链接
[root@oam-nas2 yuanjs]# ls -l /sbin/clock*
lrwxrwxrwx. 1 root root 7 4月 3 15:55 /sbin/clock -> hwclock


===============================
linux 下修改日期和时间
===============================
我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成2009年11月13日的命令如下。
#date -s 11/13/09
将系统时间设定成下午1点12分0秒的命令如下。
#date -s 13:12:00


---- 注意,这里说的是系统时间,是linux由操作系统维护的。


在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性, Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。
#clock -w ----这个命令强制把系统时间写入CMOS。




======================================
Linux时区简介:非常重要
======================================
CST China Standard Time -----UTC+8:00 中国沿海时间(北京时间)
UTC 世界协调时间(Universal Time Coordinated,UTC)
GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为本地时间,如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时,以此计算即可
HKT-8 香港时间
JST-9 Janpanese Standard Time 日本标准时间


《1》查看时区
The time zone of the system is defined by the contents of /etc/localtime.
1)cat /etc/localtime 查看当前选中哪个时区。--------重点----------
cat /etc/timezone unix
cat /etc/TZ unix
2)cat /etc/sysconfig/clock 查看当前系统时钟时区和硬件时钟时区以及他们的时差是多少
该配置文件可用来设置用户选择何种方式显示时间。
如果硬件时钟为本地时间,则UTC设为0,并且不用设置环境变量TZ。
如果硬件时钟为UTC时间,则要设置UTC为1,并设置环境变量TZ(或配置文件/etc/TZ)为时区信息,如“Asia/Shanghai”。
我机器的硬件时间为本地时间,因此该配置文件内容为:
ZONE="Asia/Shanghai"
UTC=0 #缺省值
ARC=0


如何查看硬件时钟是否为本地时间:
hwclock –r


《2》设置时区:
1)在/usr/share/zoneinfo/目录下查询想要更换的时区名称,修改格式同上
2)/etc/localtime可以是二进制文件也可以是软连接文件。
将原有的localtime文件移走;
# mv /etc/localtime /etc/localtime-old
3)两个方法:
(1)做新的localtime文件,将对应的时区文件链接过来:
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime --------重点----------
(2)或者cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime:
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime --------重点----------
4)在/etc/sysconfig/clock文件上设置时区条目: (e.g. "Asia/Shanghai") ----设置硬件时钟是否用local time or UTC
ZONE="Asia/Shanghai"
UTC=0 #缺省值 参考上面

[root@xiangfch etc]# cat /etc/sysconfig/clock
# The time zone of the system is defined by the contents of /etc/localtime.
# This file is only for evaluation by system-config-date, do not rely on its
# contents elsewhere.
ZONE="Asia/Shanghai"




======================================
linux下如何修改时区(TIMEZONE)
======================================
如何修改linux的timezone?谢谢!
你可以看看/etc路径下有没有一个文件localtime,如果有的话,它应该是一个软链接,更改链接指向就可以更改系统时区设定。


现在的集群软件,大部分都需要多台机器的时间差不能超过1000秒,所以如果用户都用date命令去修改时间,这个比较简单就不多说了。然而,有时候两台机器的时间虽然一致,但是时区却不同,那么用户就不得不去修改机器的时区,这个修改在不同操作系统是不同的,所以这里分别介绍一下主流操作系统修改时区的方法:


Solaris:
在solaris中,修改时区需要修改/etc/TIMEZONE文件,其中的TZ=PRC就表示中国时区,我们可以将其替换为TZ=US/Pacific,再重启机器,就将时区修改为美国太平洋时区了。
这里需要注意三点:
1,在X86的机器上,需要再执行如下命令,更新/etc/rtc_config文件:
# rtc -z zone-name(这里的zone-name就是/etc/TIMEZONE中TZ的值)
# rtc -c
2,到底有多少种时区可以选择呢?我们可以进入/usr/share/lib/zoneinfo目录,其中有很多目录,包括US,也有很多文件,比如PRC;这表示US下还有很多时区,而PRC就是统一的时区。正因为如此,我们才看到TZ=PRC和TZ=US/Pacific这两种不同的形式。
3,需要重启系统使之生效。


Linux(Redhat and Suse):
1,在/usr/share/zoneinfo/目录下查询想要更换的时区名称,修改格式同上
2,将原有的localtime文件移走;
# mv /etc/localtime /etc/localtime-old
3,做新的localtime文件,将对应的时区文件链接过来
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4,与硬件同步
# /sbin/hwclock --systohc


AIX:
1,查看当前时区(其他操作系统是date命令即可)
cat /etc/environment (查找TZ所在行)
2,为了妥善起见,建议使用smit修改时区
smit chtz
3,所有的时区信息在/usr/share/lib/zoneinfo目录


HPUX:
1,# set_parms timezone,可以通过交互的方式来修改时区。


所有Unix系统(不包括Linux),可以通过echo $TZ来查看当前时区。

另外你也可以安装system-config-date工具:
yum install system-config-date


更多信息:
Linux Time Zone Configuration guide:
Background - The Earth is divided into time zones that are 15 degrees of longitude each, for this corresponds to the amount of angular distance the Sun appears to travel in 1 hour. 0 degrees longitude runs through the Royal Observatory in Greenwich, England. This is the origin of Greenwich Mean Time, or GMT. For all practical purposes, GMT and UTC are the same. To complicate matters, some countries observe Daylight Savings Time (DST), while others do not. Even within some countries, some states or districts do not observe DST while the rest of the country does! DST can also begin and end on different days in different countries! What a mess...
There are several files and directories that are used for time zones, and several tools:
l /etc/sysconfig/clock- this is a short text file that defines the timezone, whether or not the hardware clock is using UTC, and an ARC option that is only relevant to DEC systems.
eg:/ect/sysconfig/clock file content on jstest3:
ZONE="Asia/Shanghai"
UTC=true
ARC=false

l /etc/localtime - this is a symbolic link to the appropriate time zone file in /usr/share/zoneinfo
l /usr/share/zoneinfo - this directory contains the time zone files that were compiled by zic(The time zone compiler. Zic creates the time conversion information files.)These are binary files and cannot be viewed with a text viewer. The files contain information such as rules about DST. They allow the kernel to convert UTC UNIX time into appropriate local dates and times.
l /etc/rc.d/rc.sysinit- This script runs once, at boot time. A section of this script sets the system time from the hardware clock and applies the local time zone information.
l /etc/init.d/halt- This script runs during system shutdown. A section of this script synchronizes the hardware clock from the system clock.
l /etc/adjtime - This file is used by the adjtimex function, which can smoothly adjust system time while the system runs. settimeofday is a related function.
l redhat-config-date or dateconfig - These commands start the Red Hat date/time/time zone configuration GUI.
l zdump - This utility prints the current time and date in the specified time zone. Example:
# zdump Japan
Japan Sat Mar 29 00:47:57 2003 JST
# zdump Iceland
Iceland Fri Mar 28 15:48:02 2003 GMT


RedHat Linux操作系统修改时区的方法
Most modern Linux distributions have user-friendly programs to set the timezone, often accesible through the program menus or right-clicking the clock in a desktop environment such as KDE or GNOME. Failing that it's possible to manually change the system timezone in Linux in a few short steps.
It's possible to change the system timezone in Linux in a few short steps.
Steps
1. Logged in as root, check which timezone your machine is currently using by executing `date`. You'll see something like "Mon 17 Jan 2005 12:15:08 PM PST -0.461203 seconds", PST in this case is the current timezone.
2. Change to the directory to /usr/share/zoneinfo, here you will find a list of time zone regions. Choose the most appropriate region, if you live in Canada or the US this directory is the "Americas" directory.
3. If you wish, backup the previous timezone configuration by copying it to a different location. Such as `mv /etc/localtime /etc/localtime-old`.
4. Create a symbolic link from the appropiate timezone to /etc/localtime. Example: `ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime`.
5. If you have the utility rdate, update the current system time by executing `/usr/bin/rdate -s time.nist.gov`. (This step can be skip!)
6. Set the ZONE entry in the file /etc/sysconfig/clock file (e.g. "America/Los_Angeles")
7. Set the hardware clock by executing: ` /sbin/hwclock --systohc`
Tips
· On some versions of RedHat Linux, Slackware, Gentoo, SuSE, Debian, Ubuntu, and anything else that is "normal", the command to display and change the time is 'date', not 'clock'
· On RedHat Linux there is a utility called "Setup" that allows one to select the timezone from a list, but you must have installed the 'redhat-config-date' package.
Warnings
· Some applications (such as PHP) have separate timezone settings from the system timezone.
· On some systems, /etc/localtime is actually a symlink to the appropriate file under the /usr/share/zoneinfo directory (rather than a copy of that file).
· On some systems, there is a system utility provided that will prompt for the correct timezone and make the proper changes to the system configuration. For example,Debianprovides the "tzsetup" utility.
Here is an example of changing the timezone: (Logged in as root)
In order to manually change the timezone, you can edit the /etc/sysconfig/clockfile and then make a new soft link to /etc/localtime. Here is an example of changing the timezone manually to "America/Denver":
1. Select the appropriate time zone from the /usr/share/zoneinfo directory. Time zone names are relative to that directory. In this case, we will select "America/Denver"
2. Edit the /etc/sysconfig/clocktext file so that it looks like this:
ZONE="America/Denver"
UTC=true
ARC=false
Of course, this assumes that your hardware clock is running UTC time...
3. Delete the following file: /etc/localtime (backup it when you need it !)
4. Create a new soft link for /etc/localtime. Here is an example of step 3 and step 4:
# cd /etc
# ls -al localtime
lrwxrwxrwx 1 root root 39 Mar 28 07:00 localtime -> /usr/share/zoneinfo/America/Los_Angeles
# rm /etc/localtime
# ln -s /usr/share/zoneinfo/America/Denver /etc/localtime
# ls -al localtime
lrwxrwxrwx 1 root root 34 Mar 28 08:59 localtime -> /usr/share/zoneinfo/America/Denver
# date
Fri Mar 28 09:00:04 MST 2003

extern configuration of timezone:
---- allows computers, servers, and network devices to synchronize their internal clock systems
NTP Configuration and Usage:
Background - Network Time Protocol (NTP) allows computers, servers, and network devices to synchronize their internal clock systems to an external reference source. In some cases, the reference source can be an atomic clock or GPS receiver. This is useful for a number of reasons. If you would like to automatically keep the time on your Linux system synchronized to standard world times, you have two built-in tools to do this:
ntpdate and ntpd (NTP Daemon)


ntpdate:
ntpdate was written by David L. Mills at the University of Delaware. For details on Dr. Mills, enter this:
$ finger David.L.Mills@udel.eduntpdate allows you to view or set system time from one or more NTP servers. The first thing you need to do is find a time server you can query. Here is a list of public time servers, or you can use one of the following:
clock.redhat.com
clock2.redhat.com
ns1.tuxfamily.org
time.nist.gov
For example, if you only want to query an NTP server and make sure that you can reach it, use the following command:


# ntpdate -q clock2.redhat.com
server 66.187.224.4, stratum 1, offset -0.067532, delay 0.38452
28 Mar 18:14:20 ntpdate[10724]: adjust time server 66.187.224.4 offset -0.067532 sec
Note that some firewall systems do not allow NTP traffic. NTP uses UDP port 123. If you would like to query more than one server and
# ntpdate clock2.redhat.com clock.redhat.com
28 Mar 18:20:59 ntpdate[10754]: adjust time server 66.187.233.4 offset -0.043222 sec
You can add the -v
This command is very similar to the rdate command. The ntpdate command can be used in startup scripts or cron jobs to automatically set the system time without running a dedicated server process. You will definitely want to try to retrieve the time from an NTP server with ntpdate before setting up your own NTP server. This will ensure that (a) you have connectivity (b) your firewall does not block NTP. Another thing to note about the ntpdate command is that it will not work in update mode if you are running a local NTP server process. It will work in query mode.


flag for verbose output.set your system clock with the result, use the following:
NTP Server:
The NTP server (ntpd) can be setup to run continuously. This will keep the system clock synchronized. You will also be able to server NTP clients on your LAN, if you wish. I had problems with the Red Hat configuration GUI not setting the NTP server up correctly.


The configuration file is /etc/ntp.conf, and there is also an /etc/ntp directory which contains keys and the drift file. I will show you a working configuration file, with comments:
# Prohibit general access to this service.
restrict default ignore
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
# -- CLIENT NETWORK -------
# Permit systems on this network to synchronize with this
# time service. Do not permit those systems to modify the
# configuration of this service. Also, do not use those
# systems as peers for synchronization.
# This is my internal LAN network address
restrict 192.168.212.0 mask 255.255.255.0 notrust nomodify notrap
# --- OUR TIMESERVERS -----
# or remove the default restrict line
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
# The statements below limit what the servers can do to your server
# I am using IP instead of DNS name because the "restrict" construct
# requires IP addresses
restrict 66.187.224.4 mask 255.255.255.255 nomodify notrap noquery
restrict 80.67.177.2 mask 255.255.255.255 nomodify notrap noquery
# The server listed below is clock2.redhat.com
server 66.187.224.4
# The server listed below is ns1.tuxfamily.org
server 80.67.177.2
# --- NTP MULTICASTCLIENT ---
#multicastclient # listen on default 224.0.1.1
# restrict 224.0.1.1 mask 255.255.255.255 notrust nomodify notrap
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
# I don't want to use multicast for my NTP server
# --- GENERAL CONFIGURATION ---
#
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available. The
# default stratum is usually 3, but in this case we elect to use stratum
# 0. Since the server line does not have the prefer keyword, this driver
# is never used for synchronization, unless no other other
# synchronization source is available. In case the local host is
# controlled by some external source, such as an external oscillator or
# another protocol, the prefer keyword would cause the local host to
# disregard all other synchronization sources, unless the kernel
# modifications are in use and declare an unsynchronized condition.
#
# If you un-comment the two statements below, you could run an NTP server
# off of your local (and inaccurate) system clock.
#restrict 127.127.1.0
#server 127.127.1.0
fudge 127.127.1.0 stratum 10
#
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
#
driftfile /etc/ntp/drift
broadcastdelay 0.008


#
# Authentication delay. If you use, or plan to use someday, the
# authentication facility you should make the programs in the auth_stuff
# directory and figure out what this number should be on your machine.
#
# I am not using any authentication for this simple setup.
authenticate no


#
# Keys file. If you want to diddle your server at run time, make a
# keys file (mode 600 for sure) and define the key number to be
# used for making requests.
#
# PLEASE DO NOT USE THE DEFAULT VALUES HERE. Pick your own, or remote
# systems might be able to reset your clock at will. Note also that
# ntpd is started with a -A flag, disabling authentication, that
# will have to be removed as well.
#
keys /etc/ntp/keys
After you install this new version of the config file, you can start the service with /etc/init.d/ntpd startTo monitor the service, you can run the following command: ntpdc -p or ntpdc -p -n
If you are really impatient, you can use this command to watch the system until it synchronizes: watch nptdc -p -n
The ntpdc command can be run interactively as well. There are a number of informative ntpdc commands, such as iostats, sysstats, and peers.
When enough time has gone by, one of the servers will have an * placed in front of it to tell you that your system is synchronized to it. The lower the stratum number, the more accurate the server.
If you want to have the NTP server start up automatically, you can use the checkconfig command as follows:
# chkconfig --level 345 ntpd on
# chkconfig --level 0126 ntpd off
# chkconfig --list | grep ntpd
ntpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
To see that your NTP server is listening on UDP port 123, use the following command: netstat -tunaPlease note that the NTP server makes NTP queries from a UDP source port of 123. Some firewalls will not allow this, even if ntpdate worked (ntpdate uses a source port > 1023.)
You can also use the ntpq utility, and the ntptrace utility for additional diagnostic support. For complete documentation on setting up and using NTP servers, see http://www.ntp.org/.



How to Set the Time Zone in Unix:
Step1
Turn your machine on and locate the time zone file. You can do this by entering “command /etc/TIMEZONE.”
Step2
Locate the line within this file that indicates what time zone you’re clock is set to. It will look like this: TZ=US/Pacific. In this example, the time zone is set to the Pacific time zone of the U.S.
Step3
Change the value of the time zone to the desired time zone. This could be, for example, U.S./Eastern. It is important to know what time zone you are in so the time zone function can be set correctly.
Step4
Reboot your machine for the changes to take effect. Shut down and restart your computer. This will cause the computer’s clock to reset and show the correct time zone


===================================================
浅谈RedHat AS中英文字符集配置
===================================================
linux字符集查看与设置redhat 5.8
locale 查看当前设置的字符集 the current locale environment
locale -a 查看可以支持的所有的locale Write names of available locales.
locale -m 查看所有支持的字符集(CP1125,UTF-8,ISO-8859-1等) Write names of available charmaps.
echo $LANGUAGE 查看当前默认设置
echo $LANG 查看当前默认设置
echo $LC_ALL


记录系统默认使用语言的文件是/etc/sysconfig/i18n,如果默认安装的是中文的系统,i18n的内容如下:
LANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16" SUPPORTED="zh_CN.UTF-8:zh_CN:zh"


LANG变量: 是language的简称,稍微有英语基础的用户一看就看出来这个变量是决定系统的默认语言的,即系统的菜单、程序的工具栏语言、输入法默认语言等。
SYSFONT: 是system font的简称,决定系统默认用哪一种字体。
SUPPORTED:决定系统支持的语言,即系统能够显示的语言。
需要说明的是,由于计算机起源于英语国家,因此,不管你把这些变量设置成什么,英语总是默认支持的,而且不管用什么字体,英文字体总包含在其中。


locale字符集的设置:
1.临时 LANG="zh_CN.UTF-8" ; export LANG= "zh_CN.UTF-8"
2.永久 修改/etc/sysconf/i18n文件,把 LANG="zh_CN.UTF-8"


/etc/environment 控制GNOME的语言环境(可以自己创建这个文件)
/etc/sysconfig/i18n 控制启动过程以及真个系统的语言环境


[root@jsjzhang ~]$ cat /etc/environment
#中文界面配置
LANGUAGE="zh_CN:zh:en_US:en"
LC_ALL=zh_CN.UTF-8
LANG=zh_CN.UTF-8
GST_ID3_TAG_ENCODING=GB2312


#英文界面配置
#LANGUAGE="en_US:en"
#LC_CTYPE=zh_CN.UTF-8
#LANG=en_GB.UTF-8
#GST_ID3_TAG_ENCODING=GBK


[root@jsjzhang ~]$ cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"


如果只修改/etc/environment文件,而不修改/etc/sysconfig/i18n文件,
那么启动过程还是中文,只是Gnome环境变成了英文。
要配置从启动过程到Gnome环境均是英文,并让Fcitx中文输入法能够在英文环境下正常使用,
除按上面修改/etc/environment文件外,还要如下修改/etc/sysconfig/i18n文件:


[root@jsjzhang ~]# vim /etc/sysconfig/i18n
#LANG="zh_CN.UTF-8"
#SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_CN.GBK:zh_CN.GB18030:zh_CN.GB2312"
SYSFONT="latarcyrheb-sun16"


---------------------------------------
如何设置linux的locale
---------------------------------------
1.查看语言设置:
[root@brs98 ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=


2.编写/etc/environment文件
vi /etc/environment
LC_ALL=zh_CN.UTF-8


3.编写/etc/sysconfig/i18n文件
vi /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"


4.重启机器:
reboot


===================================================
/etc/profile和/etc/environment的比较
===================================================
Question:
先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。用户环境建立的过程中总 是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙的不同呢?


Answer:
/etc/profile 是所有用户的环境变量
/etc/enviroment是系统的环境变量
登陆系统时shell读取的顺序应该是
/etc/enviroment -> /etc/profile -->$HOME/.profile -->$HOME/.env
原因应该是下面所说的用户环境和系统环境的区别了:
/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。
系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG 是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。




(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)~/.bashlogin: 该文件包含专用于当登录时,执行该文件.
(6)~/.profile: 该文件包含专用于当登录完成后,执行该文件.
(7) ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.


另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
官方文档:
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.baseadmn/doc/baseadmndita/etc_env_file.htm

The /etc/environment, /etc/profile, and ~/.profile files are run once at login time and ~/.env also run at login time.
The ~/.env file, on the other hand, is run every time you open a new shell or a window.
* /etc/environment file
The first file that the operating system uses at login time is the /etc/environment file. The /etc/environment file contains variables specifying the basic environment for all processes.
* /etc/profile file
The second file that the operating system uses at login time is the /etc/profile file.
* .profile file
The .profile file is present in your home ($HOME) directory and lets you customize your individual working environment.
* .env file
A fourth file that the operating system uses at login time is the .env file, if your .profile contains the following line: export ENV=$HOME/.env

===================================================
如何改变linux的语言环境
===================================================
1)全局(所有用户):
/etc/sysconfig/i18n
/etc/i18n 或者 ~/.i18n


将文件中的LANG=zh_CN.UTF-8更改为LANG=en_US.UTF-8。
其他字符集。
LANG=en_US.UTF-8
LANG=zh_CN.gbk


2)个体用户:
~/.bash_profile个人路径与环境变量的文件名称。
~/.bashrc:重要的个人设定文件


/etc/profile: ---->~/.bash_profile
/etc/bashrc : ---->~/.bashrc


---------------------------------------
LINUX SSH显示中文乱码,如何解决?
---------------------------------------
ssh登陆后,执行:
export LANG=zh_CN.gb2312
就可以显示中文了。
编辑/etc/sysconfig/i18n 将LANG="zh_CN.UTF-8" 改为 LANG="zh_CN.GB18030" 可永久显示中文 或者 LANG="zh_CN.gb2312"


export LANG=US_EN 你这样 按照我说的做,进入字符界面,输入gdm 出现一个让你登陆的界面,那有个language选项,选择simple chinese就OK了


[root@php ~]# vi /etc/sysconfig/i18n
#LANG="zh_CN.UTF-8"
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030;zh_CN.GB2313:zh_CN"
SUPPORTED="zh_CN.GB18030;zh_CN;zh:en_US.UTF-8;en_US:en"
SYSFONT="lat0-sun16"




如果ls -al 显示的中文目录是乱码的话,那么就是客户端的字符集有问题:
如果你用的secureCRT的话,可以设置客户端的字符集,可以是GB2312,UTF-8等


---------------------------------------
linux下强制踢掉登陆用户,查询终端
---------------------------------------
查看机器中登陆的用户
[root@sunsyk ~]# w
16:29:02 up 2 days, 2:35, 5 users, load average: 0.03, 0.05, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 :0.0 Tue15 2days 1:44 0.04s -bash
root pts/2 :0.0 Tue15 46:42m 0.05s 0.05s bash
root pts/3 :0.0 Tue15 2days 0.02s 0.02s bash
root pts/4 172.20.52.114 14:17 58:48 0.16s 0.03s sqlplus
root pts/5 172.20.52.114 15:31 0.00s 0.03s 0.00s w
我把pts/1踢掉(只有root才能去踢掉用户)
[root@sunsyk ~]# pkill -kill -t pts/0,pts/1,pts/2,pts/12,pts/15 -kill 是signal -t terminal


查看是不是踢掉
[root@sunsyk ~]# w
16:34:16 up 2 days, 2:40, 2 users, load average: 0.00, 0.05, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/4 172.20.52.114 14:17 1:04m 0.16s 0.03s sqlplus
root pts/5 172.20.52.114 15:31 0.00s 0.03s 0.00s w
root可以踢掉其他用户包括自己


------------------------------------------------------------------------------
Linux命令kill和signal
------------------------------------------------------------------------------
kill命令用于终止指定的进程(terminate a process),是Unix/Linux下进程管理的常用命令。通常,我们在需要终止某个或某些进程时,先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令的另外一个用途就是向指定的进程或进程组发送信号(The command kill sends the specified signal to the specified process or process group),或者确定进程号为PID的进程是否还在。比如,有许多程序都把SIGHUP信号作为重新读取配置文件的触发条件。


一 常用参数
格式:kill <pid>
格式:kill -TERM <pid>
发送SIGTERM信号到指定进程,如果进程没有捕获该信号,则进程终止(If no signal is specified, the TERM signal is sent. The TERM signal will kill processes which do not catch this signal.)

格式:kill -l
列出所有信号名称(Print a list of signal names. These are found in /usr/include/linux/signal.h)。只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。下面是常用的信号:
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
格式:kill -l <signame>
显示指定信号的数值。

格式:kill -9 <pid>
格式:kill -KILL <pid>
强制杀掉指定进程,无条件终止指定进程。

格式:kill %<jobid>
格式:kill -9 %<jobid>
杀掉指定的任务(使用jobs命令可以列出)

格式:kill -QUIT <pid>
格式:kill -3 <pid>
使得程序正常的退出。

killall命令
killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。
# killall httpd

二 示例
1)先用ps查找进程,然后用kill杀掉。
[root@new55 ~]# ps -ef|grep vim
root 3368 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@new55 ~]# kill 3368
[root@new55 ~]# kill 3368
-bash: kill: (3368) - 没有那个进程

2)init进程是不可杀的。
3)列出所有信号名称
[root@new55 ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@new55 ~]#

/usr/include/linux/signal.h 写道
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL SIGIO
/*
#define SIGLOST 29
*/
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED 31
/* These should not be considered constants from userland. */
#define SIGRTMIN 32
#define SIGRTMAX _NSIG

参考:
http://codingstandards.iteye.com/blog/847299


------------------------------------------------------------------------------
Linux下用于查看系统当前登录用户信息的4种方法
------------------------------------------------------------------------------
作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动。有些时候,你甚至需要知道他(她)们正在做什么。本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法。
1. 使用w命令查看登录用户正在使用的进程信息
w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命令输出的信息包括:


用户名称
用户的机器名称或tty号
远程主机地址
用户登录系统的时间
空闲时间(作用不大)
附加到tty(终端)的进程所用的时间(JCPU时间)
当前进程所用时间(PCPU时间)
用户当前正在使用的命令
w命令还可以使用以下选项


-h忽略头文件信息
-u显示结果的加载时间
-s不显示JCPU, PCPU, 登录时间
$ w
23:04:27 up 29 days, 7:51, 3 users, load average: 0.04, 0.06, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ramesh pts/0 dev-db-server 22:57 8.00s 0.05s 0.01s sshd: ramesh [priv]
jason pts/1 dev-db-server 23:01 2:53 0.01s 0.01s -bash
john pts/2 dev-db-server 23:04 0.00s 0.00s 0.00s w


$ w -h
ramesh pts/0 dev-db-server 22:57 17:43 2.52s 0.01s sshd: ramesh [priv]
jason pts/1 dev-db-server 23:01 20:28 0.01s 0.01s -bash
john pts/2 dev-db-server 23:04 0.00s 0.03s 0.00s w -h


$ w -u
23:22:06 up 29 days, 8:08, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ramesh pts/0 dev-db-server 22:57 17:47 2.52s 2.49s top
jason pts/1 dev-db-server 23:01 20:32 0.01s 0.01s -bash
john pts/2 dev-db-server 23:04 0.00s 0.03s 0.00s w -u


$ w -s
23:22:10 up 29 days, 8:08, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM IDLE WHAT
ramesh pts/0 dev-db-server 17:51 sshd: ramesh [priv]
jason pts/1 dev-db-server 20:36 -bash
john pts/2 dev-db-server 1.00s w -s


2.使用who命令查看(登录)用户名称及所启动的进程
who命令用于列举出当前已登录系统的用户名称。其输出为:用户名、tty号、时间日期、主机地址。


$ who
ramesh pts/0 2009-03-28 22:57 (dev-db-server)
jason pts/1 2009-03-28 23:01 (dev-db-server)
john pts/2 2009-03-28 23:04 (dev-db-server)
如果只希望列出用户,可以使用如下语句:
$ who | cut -d' ' -f1 | sort | uniq
john
jason
ramesh
补充:users命令,可用于打印输出登录服务器的用户名称。该命令除了有help和version选项外,再没有其他选项。如果某用户使用了多个终端,则相应的会显示多个重复的用户名。
$ users
john jason ramesh
3. 使用whoami命令查看你所使用的登录名称
whoami命令用于显示登入的用户名。


$ whoami
john
whoami命令的执行效果和id -un的效果完全一样,例如:
$ id -un
john
whoami命令能显示当前登入的用户名称,以及当前所使用的tty信息。该命令的输出结果包括如下内容:用户名、tty名、当前时间日期,同时还包括用户登录系统所使用的链接地址。
$ who am i
john pts/2 2009-03-28 23:04 (dev-db-server)


$ who mom likes
john pts/2 2009-03-28 23:04 (dev-db-server)


Warning: Don't try "who mom hates" command.
当然,如果你使用su命令改变用户,则该命令(whoami)所显示的结果将随之改变。


4. 随时查看系统的历史信息(曾经使用过系统的用户信息)
last命令可用于显示特定用户登录系统的历史记录。如果没有指定任何参数,则显示所有用户的历史信息。在默认情况下,这些信息(所显示的信息)将来源于/var/log/wtmp文件。该命令的输出结果包含以下几列信息:


用户名称
tty设备号
历史登录时间日期
登出时间日期
总工作时间
$ last jason
jason pts/0 dev-db-server Fri Mar 27 22:57 still logged in
jason pts/0 dev-db-server Fri Mar 27 22:09 - 22:54 (00:45)
jason pts/0 dev-db-server Wed Mar 25 19:58 - 22:26 (02:28)
jason pts/1 dev-db-server Mon Mar 16 20:10 - 21:44 (01:33)
jason pts/0 192.168.201.11 Fri Mar 13 08:35 - 16:46 (08:11)
jason pts/1 192.168.201.12 Thu Mar 12 09:03 - 09:19 (00:15)
jason pts/0 dev-db-server Wed Mar 11 20:11 - 20:50 (00:39


-----------------------------------------------------
查找文件和查找文件中的字符:
-----------------------------------------------------
查找文件中的字符:grep
-R, -r, --recursive equivalent to --directories=recurse
--include=FILE_PATTERN search only files that match FILE_PATTERN
--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
--exclude-from=FILE skip files matching any file pattern from FILE
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
-R 表示在其子目录下也查找。


grep -FR 'type="array"' ./* 查找当前目录下的文件以及子目录中是否含有这种字符串type="array"


grep 'type="array"' ./* |less 查找当前目录下的文件中是否含有这种字符串type="array"


假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件:
$ grep magic /usr/src/linux/Documentation/*


当然,如果预料到有许多输出,您可以通过 管道 将其转到‘less’上阅读
$ grep magic /usr/src/linux/Documentation/* | less


有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,‘grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。
下面是一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
这里还有些用于搜索的特殊符号:
< 和 > 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep \'<man\' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep \'<man>\' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
\'^\':指匹配的字符串在行首,
\'$\':指匹配的字符串在行尾,
如果您不习惯命令行参数,可以试试图形界面的‘grep’,如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 :-) 。如果您只是需要更清楚的输出,不妨试试 fungrep 。


.grep 搜索字符串
命令格式:
grep string filename
寻找字串的方法很多,比如说我想找所有以M开头的行.此时必须引进pattern的观
念.以下是一些简单的□例,以及说明:
^M 以M开头的行,^表示开始的意思
M$ 以M结尾的行,$表示结束的意思
^[0-9] 以数字开始的行,[]内可列举字母
^[124ab] 以1,2,4,a,或b开头的行
^b.503 句点表示任一字母
* 星号表示0个以上的字母(可以没有)
+ 加号表示1个以上的字母
. 斜线可以去掉特殊意义
<eg> cat passwd | grep ^b 列出大学部有申请帐号者名单
cat passwd | grep ^s 列出交换学生申请帐号者名单
cat passwd | grep \'^b.503\' 列出电机系各年级...
grep \'^.\' myfile.txt 列出所有以句点开头的行


查找文件: find, locate, whereis
-name 按照文件名查找文件
-perm 按照文件权限来查找文件
-prune 不在当前指定的目录中查找
-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前.
-nogroup 查找无有效所属组的文件,即该文件所属的组不存在
-nouser 查找无有效属主的文件
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件
-type 查找某一类型的文件
文件类型:
b 块设备文件
d 目录
c 字符设备文件
p 管道文件
l 符号链接文件
f 普通文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
-mount 在查找文件时不跨越文件系统mount点
-follow 如果find命令遇到符号链接文件,就跟踪到链接所指向的文件
-cpio 对匹配的文件使用cpio命令,就将这些文件备份到磁盘设备中


对find命令选项的一些例子:
$ find /etc -name oamdatcfg.ini 在/etc目录下查找所有的目录是否有oamdatcfg.ini这个文件。
$ find /etc -type d 在/etc目录下查找所有的目录
$ find /etc -user yaoyuan #在/etc目录下查找文件属主为yaoyuan的文件
$ find . -size +1000000c #在当前目录下查找文件长度大于1 M字节的文件

whereis命令会在指定的目录中查找符合条件的文件,文件应的属性应属于原始代码,二进制文件,或是帮助文件.


选项:
-b 只查找二进制文件
-B 只在设置的目录下查找二进制文件
-f 不显示文件名前的路径名称
-m 只查找说明文件
-M 只在设置的目录下查找说明文件
-s 只查找原始代码文件
-S 只在设置的目录下查找原始代码文件
-u 查找不包含指定类型的文件


whereis例子
$ whereis mysql
mysql: /usr/bin/mysql /etc/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz


locate命令用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找符合条件的文件或目录


选项:
-u 建立数据库,由根目录开始
-U 建立数据库,可以指定开始的位置
-e 将排除在寻找的范围之外
-f 将特定的档案系统排除在外
-q 安静模式,不会显示任何错误讯息
-n 至多显示n个输出
-r 使用正规运算式 做寻找的条件
-o 指定数据库存的名称
-d 指定数据库的路径
-h 显示辅助讯息
-v 显示更多的讯息
-V 显示程序的版本讯息


$ locate inittab
/usr/lib/upstart/migrate-inittab.pl
/usr/share/terminfo/a/ansi+inittabs






rm -r recursive 删除目录和下面的文件
-f force 强迫删除文件
rm -rf 目录或者文件。

-----------------------------------------------------
touch命令:
-----------------------------------------------------
TOUCH(1) User Commands TOUCH(1)
NAME
touch - change file timestamps
SYNOPSIS
touch [OPTION]... FILE...
DESCRIPTION
Update the access and modification times of each FILE to the current time.
A FILE argument that does not exist is created empty, unless -c or -h is supplied.
A FILE argument string of - is handled specially and causes touch to change the times of the file associated with standard output.
Mandatory arguments to long options are mandatory for short options too.
-a change only the access time
-c, --no-create
do not create any files


-d, --date=STRING
parse STRING and use it instead of current time


-f (ignored)


-h, --no-dereference
affect each symbolic link instead of any referenced file (useful
only on systems that can change the timestamps of a symlink)


-m change only the modification time


-r, --reference=FILE
use this file’s times instead of current time


-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time


--time=WORD
change the specified time: WORD is access, atime, or use: equiv-
alent to -a WORD is modify or mtime: equivalent to -m
--help display this help and exit


--version
output version information and exit


Note that the -d and -t options accept different time-date formats.


DATE STRING
The --date=STRING is a mostly free format human readable date string
such as "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or
even "next Thursday". A date string may contain items indicating cal-
endar date, time of day, time zone, day of week, relative time, rela-
tive date, and numbers. An empty string indicates the beginning of the
day. The date string format is more complex than is easily documented
here but is fully described in the info documentation.

-----------------------------------------------------
less命令:
-----------------------------------------------------


SEARCHING


/pattern * Search forward for (N-th) matching line.
?pattern * Search backward for (N-th) matching line.
n * Repeat previous search (for N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
ESC-u Undo (toggle) search highlighting.
&pattern * Display only matching lines
---------------------------------------------------
Search patterns may be modified by one or more of:
^N or ! Search for NON-matching lines.
^E or * Search multiple files (pass thru END OF FILE).
^F or @ Start search at FIRST file (for /) or last file (for ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.

-----------------------------------------------------
如何更改当前用户、密码或者切换用户、注销用户:
-----------------------------------------------------
第一次修改root密码的话 命令是 sodu passwd root


su 和 su -:命令 su 给你到根账号或系统上其它账号的访问权。当你在用户账号的 shell 内键入 su 来切换到根账号时,你就能够改变重要的系统文件(若不小心,你会损坏它们)。使用 su - 命令使你成为使用根账号 shell 的根用户。登录为根用户时请务必小心。


su yuanjs 表示以yuanjs登陆,但是当前的路径不发生改变
su - yuanjs 表示以yuanjs登陆,同时当前的路径变为yuanjs账号的home路径
su 表示以root登陆,但是当前的路径不发生改变
su - 表示以root登陆,同时当前的路径变为root账号的home路径


sudo 功能说明:以其他身份来执行指令。
语  法:sudo [-bhHpV][-s <shell>][-u <用户>][指令] 或 sudo [-klv]
例子:
jorge@ubuntu:~$ sudo killall rm


更改密码:
名称:passwd
  
  使用权限:所有使用者
  
  使用方式:passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
  
  说明:用来更改使用者的密码
  
  参数:
  -k keep non-expired authentication tokens
  -l 关闭账号密码。效果相当于usermod -L,只有root才有权使用此项。
  -u 恢复账号密码。效果相当于usermod -U,同样只有root才有权使用。
  -g 修改组密码。gpasswd的等效命令。
  -f 更改由finger命令访问的用户信息。
  -d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备 root 权限的使用者方可使用.
  -S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用.
  [username] 指定帐号名称.


最常用最简单的用法: passwd tom,修改tom用户密码。
sudo su先切到root再用passwd修改,具体参数可使用passwd -help


不用root登录也可以,如果你是系统安装时指定的用户,默认有sudo权限,可以直接
$ sudo passwd user1
接下来同上


-------------------------------------------
linux introduction:
-------------------------------------------
On top of the Linux kernel effort, the creators of Linux also drew on a great deal of system software and applications that are now bundled with Linux distributions from the GNU software effort (GNU stands for “GNU is Not UNIX”), which is directed by the Free Software Foundation (www.gnu.org). There is a vast amount of software that can be used with Linux, making it an operating system that can compete with or surpass features available in any other operating system in the world.


If you have heard Linux described as a free version of UNIX, there is good reason for it. Although much of the code for Linux started from scratch, the blueprint for what the code would do was created to follow POSIX (Portable Operating System Interface for UNIX) standards. POSIX is a computer industry operating system standard that every major version of UNIX complied with. In other words, if your operating system was POSIX-compliant, it was UNIX.


netstat -tnlp |grep smb
netstat -lan |grep 80 查询被打开80端口的东东
或者
netstat -nat 查询哪个IP地址和它建立连接


-------------------------------------------
vncserver配置:
-------------------------------------------
netstat -tlnp |grep vnc 或者netstat -tlnp |grep vino
service vncserver status
service vncserver stop
service vncserver start
service vncserver restatus
ps -ef|grep vino


[root@ganshuai ~]# netstat -tlnp |grep vino
tcp 0 0 :::5900 :::* LISTEN 11099/vino-server
tcp 0 0 :::5901 :::* LISTEN 4696/vino-server




-------------------------------------------
linux的版本:
-------------------------------------------
Mandriva 10.1
Novell Linux Desktop 9.x (2.6.4)
Red Flag Linux Desktop 4.1, 5.0
Red Hat Linux AS 4.0 (2.6.9) Application Server
Red Hat Linux ES 4.0 (2.6.9) Enterprise Server
Red Hat Linux WS 4.0 (2.6.9) Workstation Server
SuSE Professional 9.2 (2.6.4), 9.3, 10.0 欧洲流行
Turbolinux 10 S (2.6) 亚洲流行
Fedora: from Redhat linux
Ubunton Linux


-------------------------------------------
Linux内核和版本查询命令
-------------------------------------------
一:命令: uname -a
  作用: 查看系统内核版本号及系统名称


二:命令: cat /proc/version
  作用: 查看目录"/proc"下version的信息,也可以得到当前系统的内核版本号及系统名称
  补充说明:
  /proc文件系统,它不是普通的文件系统,而是系统内核的映像,也就是说,该目录中的文件是存放在系统内存之中的,它以文件系统的方式为访问系统内核数据的操作提供接口。而我们使用命令“uname -a"的信息就是从该文件获取的,当然用方法二的命令直接查看它的内容也可以达到同等效果.另外,加上参数"a"是获得详细信息,如果不加参数为查看系统名称。


三、查看redhat的release版本
  # more /etc/redhat-release
  CentOS release 4.4 (Final)


四、lsb_release -a
  登录到服务器执行 lsb_release -a ,即可列出所有版本信息


for example:
[root@RH52173 X11]# lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
Release: 5.2
Codename: Tikanga


五. 查看etc下的issue文件。
#more /etc/issue


-------------------------------------------
Fedora:
-------------------------------------------
In 2003, Red Hat, Inc. changed the name of the distribution from Red Hat Linux to Fedora Core and moved its commercial efforts toward its Red Hat Enterprise Linux products. It then set up Fedora to be:
1.Sponsored by Red Hat
2.Supported by the Linux community
3.Inclusive of high-quality, cutting-edge open source technology
4.A proving ground for software slated for commercial Red Hat deployment and support
With the recent split between community (Fedora) and commercial (Red Hat Enterprise Linux) versions of Red Hat Linux, Red Hat has created a model that can suit the fast-paced changes in the open source world, while still meeting the demands for a well-supported commercial Linux distribution.
Technical people have chosen Red Hat Linux because of its reputation for solid performance. With the new Fedora Project, Red Hat has created an environment where open source developers can bring high-quality software packages to Red Hat Linux that would be beyond the resources of Red Hat, Inc. to test and maintain on its own.
Over 1,600 individual software packages (compared to just over 600 in Red Hat Linux 6.2) are included in Fedora Core 3. These packages contain features that would cost you hundreds or thousands of dollars to duplicate if you bought them as separate commercial products. These features let you:
1.Connect your computers to a LAN or the Internet.
2.Create documents and publish your work on paper or on the Web.
3.Work with multimedia content to manipulate images, play music files, view video, and even burn your own CDs.
4.Play games individually or over a network.
5.Communicate over the Internet using a variety of Web tools for browsing, chatting, transferring files, participating in newsgroups, and sending and receiving e-mail.
6.Protect your computing resources by having Red Hat Linux act as a firewall and/or a router to protect against intruders coming in through public networks.
7.Configure a computer to act as a network server, such as a print server, Web server, file server, mail server, news server, and a database server.
This is just a partial list of what you can do with Red Hat's Fedora. Using this book as your guide, you will find that there are many more features built into Fedora as well.




-------------------------------------------
Linux下JDK的安装与配置.
Red Hat Linux下安装JDK :
-------------------------------------------
1、授予权限:chmod 777 jdk-1_5_0_11-linux-i586-rpm.bin
2、解压rpm.bin文件:./jdk-1_5_0_11-linux-i586-rpm.bin
3、安装命令:rpm -ivh jdk-1_5_0_11-linux-i586.rpm
4. 卸载命令: rpm -e jdk-1_5_0_11-linux-i586
5. 查找命令: rpm -qa jdk-1_5_0_11-linux-i586
rpm -qa |grep vnc q---query a---all package
-------------------------------------------
Linux下JDK环境变量配置 :
-------------------------------------------
1、使用SSH Secure Shell Client连接至Linux
2、执行:vi /etc/profile 命令,使用vi编辑/etc/profile文件。
3、在export PATH USER LOGNAME MAIL HOS ...


-------------------------------------------
常用Shell类型:
-------------------------------------------
Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell(简称sh)、C-Shelll(简称csh)、Korn Shell(简称ksh)和Bourne Again Shell (简称bash)。
(1)Bourne Shell是AT&T Bell实验室的 Steven Bourne为AT&T的Unix开发的,它是Unix的默认Shell,也是其它Shell的开发基础。Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其它几种Shell。
(2)C Shell是加州伯克利大学的Bill Joy为BSD Unix开发的,与sh不同,它的语法与C语言很相似。它提供了Bourne Shell所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。但是,C Shell与BourneShell并不兼容。
(3)Korn Shell是AT&T Bell实验室的David Korn开发的,它集合了C Shell和Bourne Shell的优点,并且与Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。
(4)Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。


---------------
rename 命令:
---------------
foo1 foo2 foo10 foo99
rename foo foo0 foo??
rename foo foo0 foo?
foo 表示被替换的旧内容
foo0 用来被替换的新内容
foo?? 表示那些文件被替换 一个pattern


1.
查看当前进程ID (KornShell):
$echo $$
4992


grep a*.txt & 将当前任务放置到后台去执行。
jobs 察看所有的正在执行的任务。
bg 察看后台的任务 第一个字符为 $jobspec
bg $jobspec 继续执行后台的$jobspec任务
fg $jobspec 将后台的$jobspec任务移动到前台来执行。
ctrl+z (挂起当前正在执行的前台进程)把进程放到后台,并使之休眠.如果想将其返回请使用:fg
ctrl+D 文件结束符可以用


bg [jobspec ...]
Resume each suspended job jobspec in the background, as if it had been started with &. If
jobspec is not present, the shella
相关TAG标签
上一篇:十二、备忘录设计模式
下一篇:iOS开发之蓝牙4.0技术完美实现
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站