linux复习--命令总结

linux操作系统在开发部署过程中太常用了,一个优秀的开发者肯定会熟练使用它的。

linux引子

Linux确切的是指一个操作系统中的内核,它源于Unix,linux操作系统是指采用linux内核的GNU操作系统。
在1991年,由芬兰赫尔辛基大学的学生Linus B. Torvolds首创。

linux的发行版本,比较流行的有下列:Debian,红帽(redhat)、ubuntu、Suse、Open Suse、Mandriva(原Mandrake)、CentOS、fedora等,国内比较著名的有红旗linux。

linux/unix基本思想与原则:

  • 一切皆文件:系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件
  • K.I.S.S (Keep it Simple Stupid):保持简单傻瓜化,简单,易学易用,足够强壮

基本操作

首先,如何寻求帮助?

  • man:linux有句话,“有问题,找男人”,即找man命令,man其实是manual(操作说明)的简写。
  • --help:是某个命令自带的简单有用的帮助文档,这个文档简单有用。
  • info:是Linux下info格式的帮助指令,可以像浏览网页一样在各个节点中跳转,相比于man更容易查看。下面是进入info命令里面后会用到的快捷键:

    ?键:它就会显示info的常用快捷键。
    N键:显示(相对于本节点的)下一节点的文档内容。
    P键:显示(相对于本节点的)前一节点的文档内容。
    U键:进入当前命令所在的主题。
    M键:敲M键后输入命令的名称就可以查看该命令的帮助文档了。
    G键:敲G键后输入主题名称,进入该主题。
    L键:回到上一个访问的页面。
    SPACE键:向前滚动一页。
    BACKUP或DEL键:向后滚动一页。
    Q:退出info。

1
2
3
$ man ls #查看ls命令的操作说明。进入里面按q是退出
$ info ls #查看ls命令的操作说明,info格式的。
$ ls --help #查看ls命令的简单操作说明

退出当前命令

常用:ctrl+c
进入某个命令后,可能用:q

tab补全

这个可能是大家最喜欢的操作之一了

  • 未输入状态下连按两次 Tab 列出所有可用命令
  • 已输入部分命令名或文件名,按 Tab 进行自动补全

管道符 | 和重定向符 >

在linux中,任何一条命令都会经过这样一个过程:

一个命令执行了:
先有一个标准输入:输入可以从键盘,也可以从文件得到
命令执行完成:成功了,会把成功结果输出到屏幕:standard output(标准输出)默认是屏幕
命令执行有错误:会把错误也输出到屏幕上面:standard error(标准错误输出)默认也是指的屏幕

linux shell下常用输入输出操作符是:

  1. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0 0代表:/dev/stdin
  2. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1 1代表:/dev/stdout
  3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr

管道符是将上一个命令的标准输出作为下一个命令的标准输入
重定向符是可以将标准输入、标准输出、标准错误输出改变到其他文件或设备

1
2
3
4
5
6
7
8
$ ps -ef | grep mongod #ps -ef是查看当前运行的进程,grep是正则过滤。组合起来的意思是查看当前包含"mongod"字符的进程信息
$ echo "hello" #在屏幕(默认输出)上输出hello
$ echo "hello" > a.txt #将hello输入到a.txt文件中,屏幕上不会显示
$ echo "hello2" >> a.txt #将hello2追加到a.txt文件中
$ cat b.txt 2> error.txt #查看b.txt文件,如果出现错误,将错误信息输入到 error.txt中。此时因为b.txt文件不存在,会出现错误,error.txt中有:cat: b.txt: No such file or directory
$ ls -al 1> list.txt 2> list.err #将显示的数据,正确的输出到 list.txt 错误的数据输出到 list.err
$ ls -al 1> list.txt 2> &1 #将显示的数据,不论正确或错误均输出到 list.txt 当中
$ ls -al 1> list.txt 2> /dev/null #将显示的数据,正确的输出到 list.txt 错误的数据则予以丢弃! /dev/null ,可以说成是linux文件的黑洞装置。为空,即不保存。

文件管理

ls:列出目录内容

1
2
3
4
$ ls
$ ls -a #显示当前目录下的所有内容,包括隐藏的文件内容,linux系统中以.开头的文件都是隐藏的文件或文件夹
$ ls -l #详细地显示每一个文件或文件夹内容
$ ll #同 ls -l 功能一致,在某些操作系统可能不支持

详细说明一下“ls -l”命令的结果,假如命令返回如下内容:
drwx------ 2 Guest users 1024 Nov 21 21:05 Mail  
-rwxr-xr-x 1 root bin 5013 Aug 15 9:32 uname*  
每一列从左到右依次是:文件属性,连接数,拥有者,所在的group,文件大小,建档日期或者最后一次修改的时间,文件名
其中 文件属性 这一列共有十个字符:
第一个字符为文件类型信息:-指普通文件,d指目录文件,l指链接文件,b指块设备文件,c指字符设备文件,p指管道文件
第二到第十个字符中 每三个字符为一组,第一组表示文件所有者权限,第二组表示同组人权限,第三个表示他人权限。r、w、x分别代表可读,可写,可执行权限。

pwd:显示当前文件路径

basename:获取文件名

1
$ basename /etc/httpd/httpd.conf #返回httpd.conf

dirname:获取路径名

1
$ dirname /etc/httpd/httpd.conf #返回/etc/httpd

cd:跳转系统路径

基本用法就是: cd path
path 有绝对路径和相对路径之分,绝对路径强调从 / 起,一直到所在路径。相对路径则相对于当前路径来说,假设当前的目录有etc 文件夹(绝对路径应为 /home/username/etc),如果直接 cd etc 则进入此文件夹,但若是 cd /etc/ 则是进入系统 etc ,多琢磨一下就可以理解了。另外在 Linux 中, . 代表当前目录, .. 代表上级目录,因此返回上级目录可以 cd ..
注意配合tab补全使用,方便准确,注意区分大小写。

1
2
3
$ cd / #进入根目录
$ cd usr #进入当前目录下的usr目录
$ cd .. #返回上级目录

file:查看文件信息

普通文件,压缩文件,连接文件都有不同的结果,可以都试试

1
2
$ file a.txt #查看文件的类型,编码等信息
$ file -i a.txt #查看文件的mime类型

cat:查看全部文件

如果文件比较大,使用就不方便

1
2
$ cat catlina.out #查看catline.out文件内容
$ cat -n catlina.out #查看catline.out文件内容,显示行号

more:翻页查看文件

让画面在显示满一页时暂停,此时可按空格健继续显示下一个画面,或按Q键停止显示。

less:翻页查看文件

空格键:向下翻页
[pagedown]:向下翻页
[pageup]:向上翻页
/字符串:向下搜索字符串
?字符串:向上搜索字符串
n:重复前一个搜索,向上继续搜
N:重复前一个搜索,向下继续搜
q:退出less

head:查看文件的前面几行

1
2
3
$ head catlina.out #默认查看catlina.out文件的前十行内容
$ head -n 20 catlina.out #查看catlina.out文件的前二十行内容
$ head -n -20 catlina.out #查看catlina.out文件除去最后二十行之前的内容

tail:查看文件的尾部几行

1
2
3
4
5
6
7
$ tail catlina.out #默认查看catlina.out文件的最后十行内容
$ tail -n 20 catlina.out #查看catlina.out文件的最后二十行内容
$ tail -n -20 catlina.out #查看catlina.out文件的最后二十行内容,没写错,和上面效果一样
$ tail -n +20 catlina.out #查看catlina.out文件的二十行开始后的所有内容
$ tail -f catlina.out #可以实时查看catlina.out文件追加的内容,追踪实时日志会常用到
#来个复杂的:
$ tail +4 catlina.out | head -n 39 #查看catlina.out从第四行开始,共39行内容

mkdir:创建文件夹

1
2
3
$ mkdir a #创建1文件夹
$ mkdir -p a/b/c #创建c文件夹,如果b,a文件夹不存在,会自动创建而不报错
$ mkdir -m 777 a #创建一个权限为777的a文件夹,777是管理权限的值。

此处来详细解释一下权限值是怎么来的:
“ls -l” 命令中,第一列中除去第一个字母,剩下第二个到第十个字母就是本文件或者文件夹的权限标志了。
假如一个文件权限为”rwxrwxrwx”,表示 文件所有者 拥有可读、可写、可执行权限,同组人拥有可读、可写、可执行权限,其他人拥有 可读、可写、可执行权限。
r、w、x分别记为数字4,2,1,就像二进制一样。那么”rwxrwxrwx”权限就可以记为 777,这也是一个文件所提供的最高权限了。
假如你想赋予一个文件”rwxr-xr-x”的权限,那么权限值给出 755 即可。
假如你想赋予一个文件”rw-r–r–”的权限,那么权限值给出 644 即可。

touch:创建文件

另外可以重新设定文件的时间戳,感觉并不太常用

1
2
3
$ touch test.txt #创建一个test.txt文件
$ touch -r log.log log2012.log #更新log.log的时间和log2012.log时间戳相同
$ touch -t 201211142234.50 log.log #设定log.log的时间戳

rm:删除文件或文件夹

1
2
3
$ rm log.log #删除log.log文件,如果文件非空,会提示是否删除,按y则删除完成
$ rm -f log.log #强制删除log.log文件,系统不会提示
$ rm -rf test #强制递归删除test文件夹及文件夹下的内容,系统不会提示

rmdir:删除空文件夹

只能删除空目录,非空目录还得靠rm命令

1
2
$ rmdir test #删除test目录,如果test下有内容,会提示无法删除
$ rmdir -p test1/test2 #删除test2目录,如果test1此时也成了空目录的话,test1也会被删除。命令等于 "rmdir test1/test2 test1"

cp:复制

1
2
3
4
5
$ cp file file2 #将file复制到file2
$ cp -u -v file file2 #将file复制到file2,-u只有源文件相比目标文件有变动才复制,-v显示执行过程
$ cp file1 dir1 #将file1赋值到目录dir1下面
$ cp file1 file2 file3 dir1 # 将file1,file2,file3赋值到目录dir1下面
$ cp -r dir1 dir2 #将dir1目录及内容复制到dir2下面

mv:移动,重命名

1
2
$ mv source folder #将 source 移动到 folder 下,完成后则为 folder/source
$ mv source dest #在 dest 不为目录的前提下,重命名 source 为 dest

grep:文本搜索

该命令通常和其他命令联合使用,值得牢记
grep参数:

-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。

正则表达式主要参数:

\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的单个字符
*:有字符,长度可以为0

1
2
3
4
$ grep 'test' log.log #显示log.log文件中包含test的行
$ grep 'test' aa bb cc #显示aa、bb、cc文件中包含test的行
$ grep '[a-z]\{5\}' aa #显示aa文件中包含每个字符串有5个连续小写字符的字符串的行,{}要转义
$ grep '123' -r * #查询当前目录下(*)包含所有子文件(-r),所有包含123的行

find:查文件

最常用,实际搜寻硬盘查询文件名称,实时精确,但稍微较慢

1
2
3
4
5
# find <指定目录> <指定条件> <指定动作>
$ find / -name "mongo" #全盘查找文件名为mongo的文件
$ find . -name "mongo" #全盘当前目录下文件名为mongo的文件
$ find / -name "mongo*" #全盘查找包含文件名为mongo的文件
$ find / -iname "mongo*" #全盘查找包含文件名为mongo的文件,不区分大小写

whereis:查文件

whereis命令只能用于搜索程序名,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息

1
$ whereis ls

which:查文件

查看可执行文件的位置
which是通过 PATH环境变量 到该路径内查找可执行文件,所以基本的功能是寻找可执行文件

1
2
$ echo $PATH #输出当前环境变量
$ which ls #输出ls命令的位置

locate:查文件

配合数据库查看文件位置,不是实时查找,数据库更新每天更新一次

1
2
3
$ updatedb #更新文件位置数据库
$ locate passwd #查找文件名包含passwd文件o
$ locate -n 10 passwd #查找文件名包含passwd文件,只显示前10个

ln:创建链接

如同windows下的快捷方式一样,用到相同文件时,我们不需要复制一遍,只需要连接link一下即可。
软连接:1.软链接,以路径的形式存在;2.软链接可以 跨文件系统 ,硬链接不可以;3.软链接可以对一个不存在的文件名进行链接;4.软链接可以对目录进行链接
硬连接:1.硬链接,以文件副本的形式存在。但不占用实际空间;2.不允许给目录创建硬链接;3.硬链接只有在同一个文件系统中才能创建

1
2
$ ln -s log link_log #为log文件创建了一个link_log的软连接,常用
$ ln log link_log #为log文件创建了一个link_log的硬连接

nano:编辑文件

使用方法:nano 文件名
如果你要保存所做的修改,按下Ctrl+O。想要退出,按下Ctrl+X。如果你退出前没有保存所做的修改,它会提示你是否要保存。如果不要,请按N,反之,则按Y。然后它会让你确认要保存的文件名,确认或修改后按Enter即可。

vi:编辑文件

这个也是用来编辑文件的,是编辑神器vim的母体,使用较为麻烦,此处不说明。

系统管理

关机命令

1
2
3
4
$ halt
$ poweroff
$ shutdown -h now
$ shutdown -h 10 #10分钟后关机,可以用shutdown -c 取消

重启命令

1
2
3
4
$ reboot
$ shutdown -r now
$ shutdown -r 10 #10分钟后重启
$ shutdown -r 20:35 #时间为20:35重启

uname:系统信息

1
2
$ uname #内核名
$ uname -a #详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称

top:任务管理器

输入 top 后:
top命令截图

  • 前五行是系统整体的统计信息
  1. 第一行:
    信息如下:top - 21\:50\:54 up 48 days, 16:16, 1 user, load average: 0.00, 0.01, 0.05
    意义:本行同 uptime 输出结果一致,是时间和任务队列的信息。
    21\:50\:54 是 当前时间,up 48 days,16:16 表示服务器已经运行的时间,1 user表示当前登录的用户数,load average: 0.00, 0.01, 0.05 表示系统负载,即任务队列的平均长度, 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
  2. 第二行:
    信息如下:Tasks: 12 total, 1 running, 11 sleeping, 0 stopped, 0 zombie
    意义:本行主要是任务信息。分别代表总共任务数,正在运行的任务数,睡眠的任务数,停止的任务数,僵尸任务数
  3. 第三行:
    信息如下:Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    意义:本行主要是cpu信息。从左到右分别是:“用户空间占用CPU百分比”、“内核空间占用CPU百分比”、“用户空间内改变过优先级的进程占用CPU百分比”、“空闲CPU百分比”、“等待输入输出CPU时间百分比”、“CPU服务于硬件中断所耗费的时间总额”、“CPU服务软中断所耗费的时间总额”、“Steal Time”
  4. 第四行:
    信息如下:Mem: 262144k total, 149204k used, 112940k free, 0k buffers
    意义:本行主要是内存使用情况。从左到右依次是:“物理内存总量”、“已使用的物理内存”、“空闲物理内存”、“内核缓存内存量”
  5. 第五行:
    信息如下:Swap: 131072k total, 23308k used, 107764k free, 34024k cached
    意义:本行主要是交换区(虚拟内存)的使用情况。从左到右一次是:“交换区总量”、“已使用交互区总量”、“空闲交换区总量”、“缓冲的交换区总量”
  • 接下来是一直变动的进程信息
    标志:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    意义:“进程ID”、“进程所有者”、“优先级”、“nice值,负值表示高优先级,正值表示低优先级”、“进程使用的虚拟内存总量”、“进程使用的、未被换出的物理内存大小”、“共享内存大小”、“进程状态”、“上次更新到现在的CPU时间占用百分比”、“进程使用的物理内存百分比”、“进程使用CPU总时间”、“命令名、命令行”

  • 简单使用
    h或者? : 显示帮助画面,给出一些简短的命令总结说明
    k : 终止一个进程。系统将提示用户输入需要终止的进程PID
    d : 改变命令的刷新时间(默认为3s),系统将提示用户输入新的刷新时间
    q : 退出程序

free:内存使用

  • 命令使用

    1
    2
    3
    4
    5
    $ free -m
    total used free shared buffers cached
    Mem: 256 142 113 2 0 30
    -/+ buffers/cache: 112 143
    Swap: 128 22 105
  • 参数参考
    -b  以Byte为单位显示内存使用情况
    -k  以KB为单位显示内存使用情况
    -m  以MB为单位显示内存使用情况
    -g 以GB为单位显示内存使用情况
    -s<间隔秒数>  持续观察内存使用状况

  • 结果说明
  1. 第一行:
    total 内存总数: 256M
    used 已经使用的内存数: 142M
    free 空闲的内存数: 113M
    shared 共享内存数:2M
    buffers Buffer 缓存内存数: 0M
    cached Page 缓存内存数:30M
    关系:total= used + free
  2. 第二行:
    (-buffers/cache) used内存数:112M (指的第一部分Mem行中的used - buffers - cached)
    (+buffers/cache) free内存数: 143M (指的第一部分Mem行中的free + buffers + cached)
    可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
  3. 第三行:
    交换区(虚拟内存)的使用情况,大家都能看懂

ps:进程使用

ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。kill 命令用于杀死进程。

1
2
3
4
5
6
7
8
9
$ ps
PID TTY TIME CMD
16307 pts/1 00:00:00 bash
16468 pts/1 00:00:00 ps
$ ps -ef #显示所有进程,包含命令行
$ ps -aux #显示所有进程,包含其他使用者
$ ps -C init #过滤只含有init命令的进程
$ ps -axjf #树形显示进程
$ ps -ef | grep "tomcat" #查找本机正在运行的tomcat进程

kill:杀死进程

kill命令其实是给指定进程发送一个指定信号来终止这个进程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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
$ kill 123 #杀掉pid为123的进程,默认发送15信号,进程在收到这个信号后会清理并释放资源。等同于在前台运行pid为123的进程,然后按下Ctrl+C键
$ kill -9 123 #强制杀掉pid为123的进程,发送9信号。9是最强硬的杀掉信号,比其他kill信号等级都要高

date:日期

date命令可以用各种格式来表现时间,也可以设定系统时间,也可以计算前后日期,此处不列举

1
2
$ date
Fri Sep 2 00:07:17 EDT 2016

cal:日历

1
2
3
$ cal #显示日历,当前年月
$ cal 2016 #显示2016年所有月的日历
$ cal 10 2016 #显示2016年10月的日历

权限管理

用户权限管理就是 以组来区分开用户,然后再给每个组辅以响应的操作空间、操作权限就完成了权限大业。

who:登录用户

显示目前登入系统的用户信息,与who am i一致。

1
2
3
$ who #简单显示当前登录用户信息
$ who -aH #-a获取所有登录用户,-H列出表头
$ whoami #仅仅显示当前登录用户的用户名

三个文件

用户信息:/etc/passwd

我们首先看第一行root这一行,一共有七项,每一项使用:分开,他们代表的意思如下:

  1. 帐号名称:帐号名称由于对应用户ID,这个是系统默认用户root超级管理员,在同一个系统帐号名称是唯一的,长度根据不同的linux系统而定,一般是8位。
  2. 密码:由于系统中还有一个/etc/shadow文件用于存放加密后的口令,所以在这里这一项是“x”来表示,如果用户没有设置口令,则该项为空。
  3. 用户ID:这个是系统内部用于来识别不同的用户的,不同的用户识别码不同,其中用户ID有以下几种:0代表系统管理员,如果你想建立一个系统管理员的话,可以建立一个普通帐户,然后将该账户的用户ID改为0即可。
    1-500系统预留的ID,500以上是普通用户使用。
  4. 组ID:其实这个和用户ID功能差不多,用来规范群组,与/etc/group有关。
  5. 描述信息:这个字段几乎没有什么作用,只是用来解释这个帐号的意义。
  6. 用户根目录:就是用户登录系统的起始目录,用户登录系统后将首先进入该目录。root用户默认的是/root,普通用户的是/home/用户名。
  7. 用户登录shell:就是用户登录系统时使用的shell,关于shell我们会在以后专门的研究一下。

    用户密码信息:/etc/shadow

    在早期的unix操作系统中,用户的帐号信息和口令信息都保存在passwd文件中,尽管系统已经对口令进行了加密,并且以密文的方式保存在passwd文件中,但是由于passwd文件对于系统中的所有用户是可读的,口令比较容易破解,存在较大的安全隐患。现在使用“shadow”文件保存密文的用户口令,使用passwd文件保存用户帐号其它信息。“shadow”文件只有管理员用户才可以读取其中的内容。由于这个文件可能被破解,所以一定不要将该文件内容泄露给他人,保证系统安全。

分析第一行,一共有九项,分别说明一下:

  1. 帐户名称
  2. 密码:这才是真正的密码,并且已经加密过了,只能看到一些特殊符号。需要注意的是这些密码很难破解,但是不等于不能。还有密码栏的第一个字符为“*”表示这个用户不用来登录,如果那个用户不想让他登录了,可以在他前面加个星。
  3. 上次改动密码的日期:这段记录了改动密码的最后日期,为什么是16293呢?这是因为linux计算日期的方法是以1970年1月1日作为1,1971年1月1日就是366,依次类推到我修改密码的日期表示为16293了。
  4. 密码不可改的天数:假如这个数字是8,则8天内不可改密码,如果是0,则随时可以改
  5. 密码需要修改的期限:如果是99999则永远不用改。如果是其其他数字比如12345,那么必须在距离1970-1-1的12345天内修改密码,否则密码失效。
  6. 密码变更期期限快到前的警告期:当帐号的密码失效期限快到时,系统依据这个字段的设定发出警告,提醒用户“再过n天您的密码将过期,请尽快重新设定密码。默认的是七天。
  7. 帐号失效期:如果用户过了警告期没有重新输入密码,使得密码失效,而该用户在这个字段限定的时间内又没有向管理员反映,让帐号重新启用,那么这个帐号将暂时失效。
  8. 帐号取消日期:这个日期跟第三个字段一样,都是使用1970年以来的日期设定方法。这个字段表示:这个帐号在此字段规定的日期之后将无法再使用。这个字段通常用于收费服务系统中,可以规定一个日期让该帐号不能再使用。
  9. 保留:最后一个字段是保留的,看以后有没有新功能加入。

    组信息:/etc/group

    每行4项:
  10. “组名”是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
  11. “口令”字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是*。
  12. “组id”与用户标识号类似,也是一个整数,被系统内部用来标识组。
  13. “组内用户列表”是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。

    groupadd:增加组

    1
    2
    3
    4
    $ groupadd test #创建一个test组
    $ cat /etc/group | grep test #查看一下刚刚创建的组
    test:x:1002:
    $ groupadd --g 2000 student #指定组的gid

groupdel:删除组

1
$ groupdel test #删除test组

useradd:增加用户

1
2
3
4
$ useradd user1 #创建用户user1,默认用户主目录为/home/用户名,此处为/home/user1
$ useradd -d /home/mytest test #创建用户test,指定主目录为/home/mytest
$ useradd -s /bin/false user1 #指定用户的shell为/bin/false
$ useradd -g user user1 #创建用户user1,指定其组为user

此时创建的用户均没有登录密码,应紧接着设置其登录密码

passwd:修改密码

普通用户仅能修改自己的密码,root管理员可以修改普通用户和自己的密码

1
2
$ passwd #修改当前登录用户的密码
$ passwd user1 #修改用户user1的密码

usermod:修改用户

除了本命令,直接修改/etc/passwd文件也可以达到效果

1
2
3
4
5
6
$ usermod -g test user1 #修改用户user1的组为test
$ usermod -G staff newuser2 #添加用户user1到组staff,同一个用户可以在多个组
$ usermod -d /home/myuser1 user1 #修改用户user1的主目录为/home/myuser1
$ usermod -s /bin/sbin user1 #修改用户user1的shell为/bin/sbin
$ usermod -L user1 #锁定用户user1
$ usermod -U user1 #解锁用户user1

userdel:删除用户

1
$ userdel user1

umask:规定默认权限

umask总共为4位(gid/uid,属主,组权,其它用户的权限),第一位经常不看,看后三位。
默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2),建立的目录的默认权限是755(7-0,7-2,7-2),这就是umask的作用。

1
2
$ umask #查看当前umask值
$ umask 002 #修改mask值

chown:改变文件拥有者

管理员可以更改文件的拥有者和群组,通过控制权限来保证服务安全
参数:
-R 处理指定目录以及其子目录下的所有文件
-v 显示详细的处理信息

1
2
3
$ chown root:mail log2012.log #改变log2012.log的拥有者和群组分别为root和mail
$ chown root: log2012.log #改变log2012.log的拥有者为root,群组为root所在的群组
$ chown :mail log2012.log #改变log2012.log的群组为mail

chmod:改变文件属性

linux文件权限分为文件拥有者(user)、群组(group)、其他(other)。

设定权限模式为:[ugoa…][[+-=][rwxX]…][,…]
其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被
设定过为可执行。

此外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。

1
2
3
4
5
6
$ chmod ugo+r file1.txt #将 file1.txt 设为所有人皆可读取
$ chmod a+r file1.txt #同上
$ chmod u+x ex1.py #将 ex1.py 设定为只有该文件拥有者可以执行
$ chmod -R a+r * #将目前目录下的所有档案与子目录皆设为任何人可读取
$ chmod 777 file #所有人拥有所有权限
$ chmod a=rwx fil #同上

网络通讯

ifconfig:网卡查看

同windows下的ipconfig,另外可以创建网卡,更改mac,ip等

ping:ping

同windows下的ping

route:路由查看

route命令用于显示和操作IP路由表。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是 为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为 Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;要想永久保存,有如下方法:

  1. 在/etc/rc.local里添加
  2. 在/etc/sysconfig/network里添加到末尾
  3. /etc/sysconfig/static-router : any net x.x.x.x/24 gw y.y.y.y

本命令使用需要一定的网络知识

wget:下载

还支持限速下载,断点续传,后台下载等很多功能

1
$ wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip #下载某个文件

curl:命令浏览器

非常强大,此处不详细讲

1
2
$ curl http://www.linux.com #网页文件内容就显示在屏幕上了
$ curl http://www.linux.com >> linux.html #保存某个面

设备管理

df:disk free

通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件, df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。

du:disk usage

是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。

1
2
3
4
$ du #显示当前目录和文件所占空间,最后一个是总大小
$ du file #显示file文件所占空间
$ du dir #显示dir目录及目录下内容所占空间
$ du -h #用方便阅读的方式显示

fdisk:查看分区

可以列出所有的分区,包括没有挂上的分区和usb设备.我一般用这个来查找需要挂载的分区的位置,比如挂上u盘。

1
$ fdisk -l

mount:挂载

使用mount命令挂载光盘镜像文件、移动硬盘、U盘以及Windows网络共享和UNIX NFS网络共享等
示例:挂载u盘

1
2
3
4
$ fdisk -l #查看当前的分区结构,然后插入u盘
$ fdisk -l #查看当前的分区结构,看看多出了那个设备
$ mkdir /mnt/usb #创建一个文件夹
$ mount /dev/sdd1 /mnt/usb #将这个设备挂载在文件夹上

umount:解除挂载

1
$ umount /mnt/usb

备份压缩

gzip:.gz

处理尾缀是.gz的压缩文件

1
2
3
4
$ gzip FileName #压缩
$ gunzip FileName.gz #解压
$ gzip -d FileName.gz #解压

bzip:.bz

处理尾缀是.bz的压缩文件

1
2
$ bzip2 -d FileName.bz #解压
$ bunzip2 FileName.bz #解压

bzip2:.bz2

处理尾缀是.bz2的压缩文件

1
2
3
4
$ bzip2 -z FileName #压缩
$ bzip2 -d FileName.bz2 #解压
$ bunzip2 FileName.bz2 #解压

compress:.Z

处理尾缀是.Z的压缩文件

1
2
3
$ compress FileName #压缩
$ uncompress FileName.Z #解压

tar:.tar重要

处理尾缀包含.tar的压缩文件,因为大部分linux平台的压缩文件包含.tar,然后用tar命令即可处理这些解压缩问题
参数:

几个互斥的必输操作参数,这几个命令只能选一个:
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
必输参数: -f 这个参数是最后一个参数,后面只能接档案名
可选参数:
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ tar -cf all.tar *.jpg #将所有.jpg的文件打成一个名为all.tar的包
$ tar -rf all.tar *.gif #将所有.gif的文件增加到all.tar的包里面去
$ tar -uf all.tar logo.gif #更新原来tar包all.tar中logo.gif文件
$ tar -tf all.tar #列出all.tar包中所有文件
$ tar -xf all.tar #解出all.tar包中所有文件
$ tar -rf all.tar *.gif #将所有.gif的文件增加到all.tar的包里面去
#配合其他压缩方式
tar –cvf jpg.tar *.jpg #将目录里所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz *.jpg #将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg #将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg #将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
#解压 双重压缩的文件
tar –xvf file.tar #解压 tar包
tar -xzvf file.tar.gz #解压tar.gz
tar -xjvf file.tar.bz2 #解压 tar.bz2
tar –xZvf file.tar.Z #解压tar.Z

zip/unzip:.zip

处理尾缀是.zip的压缩文件

1
2
3
4
5
6
7
8
9
$ zip -r myfile.zip ./* #将当前目录下的所有文件压缩到myfile.zip文件中,-r递归压缩子目录下所有文件,常用
$ zip -d myfile.zip smart.txt #删除压缩文件中smart.txt文件
$ zip -m myfile.zip ./add.txt #向压缩文件中myfile.zip中添加add.txt文件
#file1、file2、 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.zip 文件中:
$ zip -r filename.zip file1 file2 file3 /usr/work/school
$ unzip myfile.zip #解压myfile.zip到当前文件夹下
$ unzip -d /home/root myfile.zip #解压myfile.zip到/home/root下

终于写完了,断断续续写了这么长时间,不过也收益良多,温故而知新。