常用linux命令
来源:互联网 发布:nginx 线程模型 编辑:程序博客网 时间:2024/06/06 06:31
- 计划任务2 个
- at -m TIME
- 启动atd服务
- at工作流程
- atq 查询目前主机上面有多少的 at 工作排程
- crontab -u username -l-e-r
- 特殊字符含义
- crontab权限设置
- at -m TIME
- 文件和目录操作命令13 个
- ls -aAdfFhilRS 目录名称
- tree
- pwd -P
- mkdir -mp 目录名称
- rmdir -p 目录名称 删除空目录
- touch -acdmt 档案
- cp -aifpru源文件目标文件
- mv ifu源文件目录目的文件目录
- rm -fir 档案或目录
- ln realfile linkfile
- find PATH option-bcdplf action
- 与时间有关的参数
- 与使用者或群组名称有关的参数
- 与档案权限及名称有关的参数
- 额外可进行的动作
- demo
- rename oldname newname
- 查看文件及内容处理命令22 个
- cat -Asnb filename
- tac 倒序输出
- rev反转输出
- tr SET1 SET2替换输出
- more
- less less 与 more 类似但使用 less 可以随意浏览文件而 more 仅能向前移动却不能向后移动而且 less 在查看之前不会加载整个文件
- head -cn filename -vncq filepath
- tail -ncf filename
- cut -cdfbs file 抽取文本
- 范围控制
- 实例
- split -bl file PREFIX
- paste -ds 合并文件内容
- sort
- uniq -cdDfisuzw file
- wc -lwm
- iconv 编码装换
- dos2unix
- file
- diff
- vimd
- ff
- chattr
- lsattr -aR 档案或目录
- rev 反转
- grep -acinv 搜寻字符串 filename
- tee -a file 默认覆盖重定向
- 文件压缩及解压缩命令4 个
- tar -cxtzjvfpPN 档案与目录
- gzip -cdt 档案名
- bzip2 -cdkzv档名
- xz -dtlkc档名
- zip
- 信息显示命令12 个
- uname -asrmpi
- hostname 显示或临时设置主机名
- dmesg 显示系统开机信息
- file
- stat -tL显示文件或文件系统状态
- du -abckmshxLSXDHl 显示每个文件和目录的磁盘使用空间
- df -ahHiklmPtx 检查linux服务器的文件系统的磁盘空间占用情况
- date
- cal
- 搜索文件命令4 个
- which 查看可执行文件的位置
- whereis -bmsu BMS 目录名 -f 文件名 查看文件的位置
- locate -qe
- 用户管理命令10 个
- useradd -u UID -g initial_group -G other_group -Mm -c 说明栏 -d home -s shell username
- 密码栏会是不可登入的 以 为开头因此还需要使用 passwd
- 来给予 vbird1 密码后才算新增完毕
- usermod
- userdel -r username
- chsh -ls
- passwd -lunxwS username
- chage -dEImMWl username
- groupadd -g gid -r
- groupmod -g gid -n group_name
- groupdel groupname
- gpasswd -A user1 -M user3user4 -rR groupname
- newgrp gname
- chfn -foph
- finger
- id username
- su -lcm username
- sudo -u usernameuid command
- sudo 是怎样工作的
- visudo
- 语法格式
- 修改nologin账户提示语
- 手动创建账号
- 基础网络操作命令10 个
- telnet
- ssh
- scp 参数 原路径 目标路径
- wget
- ping
- 备份
- 恢复
- 拷贝内存资料到硬盘
- 从光盘拷贝iso 镜像
- 销毁磁盘数据
- 得到最恰当的block size
- 测试硬盘读写速度
- 修复硬盘 dd ifdevsda ofdevsda
- dumpe2fs
- dump
- mkfs
- mkfsxfs - - b bsize - - d parms - - i parms - - l parms - - L label - - f - - r parms 装置名称
- 关机和查看系统信息的命令3个
- shutdown
- halt
- init
- 系统管理相关命令8个
- uptime
- top
- free
- vmstat
- mpstat
- iostat
- sar
- chkconfig
- 系统安全相关命令10 个
- chmod -R sxyz 档案或目录
- 数字类型改变档案权限
- 符号类型改变档案权限
- chown -R username 档案或目录 usernamegroupname 档案或目录
- chgrp -R dirnamefilename 改变所属群组
- umask
- chattr
- lsattr
- chmod -R sxyz 档案或目录
- 查看系统用户登陆信息的命令7 个
- whoami
- who
- w
- last
- lastlog
- users
- finger
- 查看硬件信息相关命令8 个
- ifconfig
- free
- fdisk
- ethtool
- mii-tool
- dmidecode
- dmesg
- lspci
- 其它19 个
- echo
- printf
- rpm
- yum
- watch
- alias
- unalias
- clear
- history
- eject
- time
- nohup
- nc
- xargs -oepn command
- exec
- export
- unset
- type
- 系统性能监视高级命令12 个
- 内存
- top
- free
- vmstat
- mpstat
- iostat
- sar
- CPU
- top
- vmstat
- mpstat
- iostat
- sar
- IO
- vmstat
- mpstat
- iostat
- sar
- 进程
- ipcs
- ipcrm
- lsof
- strace
- lstrace
- 内存
- 系统管理相关命令8 个
- uptime 就是显示出目前系统已经开机多久的时间以及 1 5 15 分钟的平均负载
- top
- top交互命令
- 使用技巧
- free
- vmstat
- mpstat
- iostat
- sar
- chkconfig
- 关机和查看系统信息的命令3 个
- shutdown
- halt
- init
计划任务(2 个)
1. at [-m] TIME
HH:MM|在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作同ex>04:00
HH:MM YYYY-MM-DD|强制规定在某年某月的某一天的特殊时刻进行该工作同ex> 04:00 2005-12-03
HH:MM[am|pm] [Month] [Date]|ex> 04pm December 3
HH:MM[am|pm] + number [minutes|hours|days|weeks]|在某个时间点『再加几个时间后』才进行ex> now + 5 minutes ex> 04pm + 3 days
demo1. 再过五分钟后,将 /root/.bashrc 寄给 dmtsai 这个使用者
at now + 5 minutesat> /bin/mail dmtsai -s "testing at job" < /root/.bashrcat> <EOT> <==这里输入 [ctrl] + d 就会出现 <EOF> 的字样!代表结束!job 8 at 2005-09-07 10:47# 上面这行信息在说明,第 8 个 at 工作将在 2005/09/07 的 10:47 进行!
demo2. 由于机房预计于 2005/09/16 停电,我想要在 2005/09/15 23:00 关机?
[root@linux ~]# at 23:00 2005-09-15at> /bin/syncat> /bin/syncat> /sbin/shutdown -h nowat> <EOT>job 10 at 2005-09-15 23:00# 您瞧瞧! at 还可以在一个工作内输入多个指令
启动atd服务
at需要atd服务的支持,chkconfig –list | grep atd查看,没开启的话需要手动开启
[root@linux ~]# /etc/init.d/atd restartStopping atd: [FAILED]Starting atd: [ OK ]#再设定一下开机时就启动![root@linux ~]# chkconfig --level 35 atd on
at工作流程
- 先找寻 /etc/at.allow 这个档案,写在这个档案中的使用者才能使用 at ,没有在这个档案中的
使用者则不能使用 at ( 即使没有写在 at.deny 当中 ); - 如果没有 /etc/at.allow 就寻找 /etc/at.deny 这个档案,若写在这个 at.deny 的使用者则不
能使用 at ,而没有在这个 at.deny 档案中的使用者,就可以使用 at 咯; - 如果两个档案都不存在,那么只有 root 可以使用 at 这个指令。
我们的 FC4预设也是只有 /etc/at.deny 存在,而且该档案内并未有任何账号数据!这表示任何人均可使用 at了.不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的账号写入 /etc/at.deny 即可! 一个账号写一行。
2.atq 查询目前主机上面有多少的 at 工作排程
3.atrm [jobnumber] 移除指定的at任务与atq查出jobnumber
4. crontab [-u username] [-l|-e|-r]
注意:
1. ==当周为 0 或 7 时,都代表『星期天』的意思==
2. ==如果只是要删除某个 crontab 的工作项目,
那么请使用 crontab -e 来重新编辑即可!==
3. ==如果该讯息不重要的话, 那
么就予以丢弃,如果讯息很重要的话,才将他保留下来!假设今天这个命令不重要, 所以将他丢
弃掉!因此,可以这样写:
/5 * * * root /usr/local/ping.sh > /dev/null 2>&1==
特殊字符含义
demo 1. 用 dmtsai 在每天的 12:00 发信给自己
[dmtsai@linux ~]$ crontab -e# 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc#分 时 日 月 周 |<==============指令串========================>|
demo 2. 假若你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59发一封信给他,这封
信的内容已经写在/home/dmtsai/lover.txt内了,该如何进行?
直接下达 crontab -e 之后,编辑成为:59 23 1 5 * mail kiki < /home/dmtsai/lover.txt那样的话,每年 kiki 都会收到你的这封信喔!(当然啰,信的内容就要每年变一变啦!)
demo3. 假如每五分钟需要执行 /home/dmtsai/test.sh 一次,又该如何?
同样使用 crontab -e 进入编辑:*/5 * * * * /home/dmtsai/test.sh
crontab权限设置
与 at 同样的,我们可以限制使用crontab的使用者账号喔!使用的限制数据有:
- /etc/cron.allow:将可以使用 crontab 的账号写入其中,若不在这个档案内的使用者则不可使用 crontab;
- /etc/cron.deny:
将不可以使用 crontab的账号写入其中,若未记录到这个档案当中的使用者,就可以使用
crontab 。与 at 很像吧!同样的,以优先级来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个档案只选择一个来限制而已,因此,建议您只要保留一个即可,免得影响自己在设定上面的判断!一般来说,系统预设是保留 /etc/cron.deny , 您可以将不想让他执行 crontab 的那个使用者写入
/etc/cron.deny 当中,一个账号一行当使用者使用 crontab 这个指令来建立工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去
了,而且是以账号来作为判别的
文件和目录操作命令(13 个)
1. ls [-aAdfFhilRS] 目录名称
|选项|说明||—|—|-a |全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来~-A |全部的档案,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~-d |仅列出目录本身,而不是列出目录内的档案数据-f |直接列出结果,而不进行排序 (ls 预设会以档名排序!)-F |根据档案、目录等信息,给予附加数据结构,例如:*:代表可执行档;/:代表目录; =|代表 socket 档案; |:代表 FIFO 档案;-h |将档案容量以人类较易读的方式(例如 GB, KB 等等)列出来;-i |列出 inode 位置,而非列出档案属性;-l |长数据串行出,包含档案的属性等等数据;-n |列出 UID 与 GID 而非使用者与群组的名称 (UID 与 GID 会在账号管理提到!)-r |将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;-R |连同子目录内容一起列出来;-S |以档案容量大小排序!-t |依时间排序–color=never |不要依据档案特性给予颜色显示;–color=always|显示颜色–color=auto|让系统自行依据设定来判断是否给予颜色–full-time |以完整时间模式 (包含年、月、日、时、分) 输出–time={atime,ctime} |输出 access 时间或 改变权限属性时间 (ctime)而非内容变更时间 (modification time)2. tree
3. pwd [-P]
|选项|说明||—|—|-P|显示出确实的路径,而非使用连结 (link) 路径4. mkdir [-mp] 目录名称
|选项|说明||—|—|-m |设定档案的权限,直接设定,不需要看预设权限 (umask) 的脸色~-p |目录递归建立5. rmdir [-p] 目录名称 删除空目录
|选项|说明||—|—|-p|递归删除6. touch [-acdmt] 档案
|选项|说明||—|—|filename|直接跟存在的文件,则此文件的atime/ctime/mtime都会更新为目前的时间-a |仅修订 access time;-c |仅修改时间,而不建立档案;-d |后面可以接日期,也可以使用 –date=”日期或时间”-m |仅修改 mtime ;-t |后面可以接时间,格式为[YYMMDDhhmm]8. cp [-aifpru][源文件][目标文件]
9. mv [ifu][源文件/目录][目的文件/目录]
10. rm [-fir] 档案或目录
|选项|作用||—|—|-f |就是 force 的意思,强制移除;-i |互动模式,在删除前会询问使用者是否动作-r |递归删除啊!最常用在目录的删除了11. ln realfile linkfile
==realfile的相对路径必须相对linkfile==12. find [PATH] [option][-bcdplf] [action]
1. 与时间有关的参数:
|选项|作用||—-|—|-atime n |n 为数字,意义为在 n 天之前的『一天之内』被 access 过的档案即[n,n+1)天;-ctime n |n 为数字,意义为在 n 天之前的『一天之内』被 change 过状态的档案;-mtime n |n 为数字,意义为在 n 天之前的『一天之内』被 modification 过的档案;-newer file |file 为一个存在的档案,意思是说,只要档案比 file 还要新,就会被列出来~2. 与使用者或群组名称有关的参数:
|选项|作用||—-|—|- -uid n |n 为数字,文件属主uid-gid n |n 为数字,文件属组gid-user name |name 为使用者账号名称-group name |name 为群组名称,例如 users ;-nouser |寻找档案的拥有者不存在 /etc/passwd 的人!-nogroup |寻找档案的拥有群组不存在于 /etc/group 的档案!3.与档案权限及名称有关的参数
|选项|作用||—-|—|-name filename|搜寻文件名称为 filename 的档案;-size [+-]SIZE|搜寻比 SIZE 还要大(+)或小(-)的档案。这个 SIZE 的规格有:c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB还要大的档案,就是『 -size +50k 』-type TYPE |搜寻档案的类型为 TYPE 的,类型主要有:一般正规档案 (f),装置档案 (b, c), 目录 (d), 连结档 (l), socket (s),及 FIFO (p)等属性。-perm mode |搜寻档案属性『刚好等于』mode的档案,这个mode为类似chmod的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !-perm -mode |搜寻档案属性『必须要全部囊括 mode 的属性』的档案,举例来说,我们要搜寻 -rwxr–r– ,亦即 0744 的档案,使用 -perm -0744,当一个档案的属性为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr–r– 的属性了。-perm +mode |搜寻档案属性『包含任一 mode 的属性』的档案,举例来说,我们搜寻-rwxr-xr-x ,亦即 -perm +755 时,但一个档案属性为 -rw——-也会被列出来,因为他有 -rw…. 的属性存在!4. 额外可进行的动作:
|选项|说明||—|—|-exec command |command为其它指令,-exec后面可再接额外的指令来处理搜寻到的结果。-print |将结果打印到屏幕上,这个动作是预设动作!demo
1.将过去系统上面 24 小时内有更动过内容 (mtime) 的档案列出[root@linux ~]# find / -mtime 0# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前2.将过去系统上面 24 小时内有更动过内容 (mtime) 的档案列出find / -mtime 3 ,意思是说今天之前的 3*24 ~ 4*24 小时之间3.寻找 /etc 底下的档案,如果档案日期比 /etc/passwd 新就列出[root@linux ~]# find /etc -newer /etc/passwd4.==搜寻档案当中含有 SGID/SUID/SBIT 的属性==[root@linux ~]# find / -perm +7000
13. rename oldname newname
查看文件及内容处理命令(22 个)
1. cat [-Asnb] filename
2. tac 倒序输出
3.rev反转输出
4.tr SET1 SET2替换输出
|选项|说明||—|—|-c| 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。 -d| 删除字符串1中所有输入字符。 -s| 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。 input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。 字符范围 |指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。 [a-z] |a-z内的字符组成的字符串。 [A-Z] |A-Z内的字符组成的字符串。 [0-9] |数字串。 /octal| 一个三位的八进制数,对应有效的ASCII字符。 [O*n] |表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。 /a |Ctrl-G 铃声/007 /b |Ctrl-H 退格符/010 /f |Ctrl-L 走行换页/014 /n |Ctrl-J 新行/012 /r |Ctrl-M 回车/015 /t |Ctrl-I tab键/011 /v| Ctrl-X /030echo 03456|tr '0-9' 'A-Z'ADEFGecho 23456|tr '2-9' 'A-Z'ABCDE#SET2的字符数比SET1少则替换到SET1最后一个时指针不再移动,用SET2的最后一个去填充echo 23456|tr '2-9' 'A-C'ABCCC#SET1的补集是01以及换行符等字符,所以-c参数相当于把21456中01和换行都用A-C去替换echo 21456|tr -c '2-9' 'A-C'2C456C
3. more
|选项|说明||—|—|+n | 从笫n行开始显示-n | 定义屏幕大小为n行+/pattern | 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示 -c | 从顶部清屏,然后显示-d | 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能-l | 忽略Ctrl+l(换页)字符-p | 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似-s | 把连续的多个空行显示为一行-u | 把文件内容中的下画线去掉快捷键|作用Enter | 向下n行,需要定义。默认为1行Ctrl+F | 向下滚动一屏空格键| 向下滚动一屏Ctrl+B | 返回上一屏= | 输出当前行的行号:f | 输出文件名和当前行的行号V | 调用vi编辑器!命令 | 调用Shell,并执行命令 q | 退出more4. less less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
|选项|说明||—|—|-b|5. head [-cn] filename [-vncq] filepath
-q |隐藏文件名-v| 显示文件名-c6. tail [-ncf] filename
只查看新追加的行:tail -n0 -f file查看文件的第1000行cat -n install.log | head -1000|tail -1
7. cut [-cdfbs] file 抽取文本
|选项|说明||—|—| -b |按字节选取 忽略多字节字符边界,除非也指定了 -n 标志 -c | 按字符选取 -d| 自定义分隔符,默认为制表符。 -f |与-d一起使用,指定显示哪个区域。–complement| 补全选中的字节、字符或域 -s| –only-delimited 不打印没有包含分界符的行–output-delimiter=字符串 |使用指定的字符串作为输出分界符,默认采用输入 的分界符范围控制:
|选项|说明||—|—|n:| 只有第n项n-:| 从第n项一直到行尾n-m:| 从第n项到第m项(包括m)-m:| 从一行的开始到第m项(包括m)-:| 从一行的开始到结束的所有项实例
cat /etc/passwd | cut -b1-3 #取每行的第1-3字字节cat /etc/passwd | cut -b1-3,5-7,8 #取每行的第1-3,5-7,8的字节(后面的数字会先进行从小到大的排列) 需要事先知道具体字节,很容易出错cat song.txt |cut -nb 1,2,3#当 -b 添加 -n 后则不会分割多字节 (我的系统是utf-8,所以需要用三个字节来表示一个汉字)cat /etc/passwd | cut -c1,3 #适用于中文 cat /etc/passwd | cut -d : -f 3 #以:分割,取第三段cat /etc/passwd | cut -d '' #以空格进行分割,且是一个空格
8.split [-bl] file PREFIX
|选项|说明||—|—|-b |后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;-l |以行数来进行分割。mkdir baksplit -l 3 file bak/file #会在bak下生成以file开始的后接aa,ab.....的文件split -b 1 file bak/file #讲file中每个字节分隔一个文件
9. paste [-ds] 合并文件内容
paste file1 file2 将file1和file2的内容合并,以行位单位,以TAB分开。 www.2cto.com paste -d @ file1 file2 将两文件内容合并,以@分开。paste -s file1 将文件内容在一行输出,以TAB分开。
10. sort
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。|选项|说明||—|—|-t11. uniq [-cdDfisuzw] file
|选项|说明||—|—| -c, –count |在每行前加上表示相应行目出现次数的前缀编号 -d, –repeated |只输出重复的行 -D, –all-repeated |只输出重复的行,不过有几行输出几行 -f, –skip-fields=N |-f 忽略的段数,-f 1 忽略第一段 -i, –ignore-case |不区分大小写 -s, –skip-chars=N |根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符 -u, –unique |去除重复的后,全部显示出来,根mysql的distinct功能上有点像 -z, –zero-terminated end lines with 0 byte, not newline -w, –check-chars=N //对每行第N 个字符以后的内容不作对照12. wc [-lwm]
|选项|说明||—|—|-l|仅列出行;-w |仅列出多少字(英文单字);-m |多少字符范例一:那个 /etc/man.config 里面到底有多少相关字、行、字符数?[root@linux ~]# cat /etc/man.config | wc138 709 4506# 输出的三个数字中,分别代表: 『行、字数、字符数』范例二:我知道使用 last 可以输出登入者,但是 last 最后两行并非账号内容,那么请问,我该如何以一行指令串取得这个月份登入系统的总人次?[root@linux ~]# last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l# 由于 last 会输出空白行与 wtmp 字样在最底下两行,因此,我利用# grep 取出非空白行,以及去除 wtmp 那一行,在计算行数
13. iconv 编码装换
|选项|说明||—|—|-f encoding |把字符从encoding编码开始转换。 -t encoding |把字符转换到encoding编码。 -l |列出已知的编码字符集合 -o file |指定输出文件 -c |忽略输出的非法字符 -s |禁止警告信息,但不是错误信息 –verbose |显示进度信息14. dos2unix
15. file
16. diff
17. vimd
18. ff
19. chattr
|选项|说明||—|—|+ |增加某一个特殊参数,其它原本存在参数则不动。- |移除某一个特殊参数,其它原本存在参数则不动。= |设定一定,且仅有后面接的参数A |当设定了 A 这个属性时,这个档案(或目录)的存取时间 atime (access)将不可被修改,可避免例如手提式计算机容易有磁盘 I/O 错误的情况发生!S |这个功能有点类似 sync 的功能!就是会将数据同步写入磁盘当中!可以有效的避免数据流失!a |当设定 a 之后,这个档案将只能增加数据,而不能删除,只有 root才能设定这个属性。c |这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大档案似乎蛮有用的!)d |当 dump(备份)程序被执行的时候,设定 d 属性将可使该档案(或目录)不具有 dump 功能i |这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法写入或新增资料!』对于系统安全性有相当大的帮助!j |当使用 ext3 这个档案系统格式时,设定 j 属性将会使档案在写入时先记录在journal 中!但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了日志了,所以这个属性无效!s |当档案设定了 s 参数时,他将会被完全的移除出这个硬盘空间。u |与 s 相反的,当使用 u 来设定档案时,则数据内容其实还存在磁盘中,可以使用来 undeletion.==注意:这个属性设定上面,比较常见的是 a 与 i 的设定值,而且很多设定值必须要身为root 才能够设定的喔!==
20. lsattr [-aR] 档案或目录
|选项|说明||—|—|-a |将隐藏文件的属性也秀出来;-R |连同子目录的数据也一并列出来!21. rev 反转
22. grep [-acinv] ‘搜寻字符串’ filename
|选项|说明||—|—|-a |将 binary 档案以 text 档案的方式搜寻数据-c |计算找到 ‘搜寻字符串’ 的次数-i |忽略大小写的不同,所以大小写视为相同-n |顺便输出行号-v |反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行-o|只显示匹配的内容24. tee [-a] file 默认覆盖重定向
- -a 以累加 (append) 的方式,将数据加入 file 当中!
文件压缩及解压缩命令(4 个)
1. tar [-cxtzjvfpPN] 档案与目录 ….
|选项|说明||—|—|-c |建立一个压缩档案的参数指令(create 的意思);-x |解开一个压缩档案的参数指令!-t |查看 tarfile 里面的档案!特别注意,在参数的下达中,c/x/t仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。-z |是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?-j |是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?-v |压缩的过程中显示档案!这个常用,但不建议用在背景执行过程!-f |使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成『 tar -zcvPf tfile sfile』才对喔!-p |使用原档案的原来属性(属性不会依据使用者而变)-P |可以使用绝对路径来压缩!-N |比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!–exclude FILE| 在压缩的过程中,不要将 FILE 打包!==在使用的参数方面,有还有几个有用的参数需要来了解一番,亦即是 -p 与 -P 这两个!在我们的范例一当中,有提到一个警告讯息,那就是『 tar: Removing leading `/’ from member names』意思是说, tar 将 /etc 目录的那个 / 拿掉了!这是因为担心未来你在解开压缩的时候,会产生一些困扰, 因为在 tar 里面的档案如果是具有『绝对路径』的话,那么你解开的档案将会『一定』在该路径下也就是 /etc,而不是相对路径==范例一:将整个 /etc 目录下的档案全部打包成为 /tmp/etc.tar[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩![root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩# 特别注意,在参数 f 之后的档案档名是自己取的,我们习惯上都用 .tar 来作为辨识。# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~# 上述指令在执行的时候,会显示一个警告讯息:# 『tar: Removing leading `/' from member names』那是关于绝对路径的特殊设定。范例二:查阅上述 /tmp/etc.tar.gz 档案内有哪些档案?[root@linux ~]# tar -ztvf /tmp/etc.tar.gz# 由于我们使用 gzip 压缩,所以要查阅该 tar file 内的档案时,# 就得要加上 z 这个参数了!这很重要的!范例三:将 /tmp/etc.tar.gz 档案解压缩在 /usr/local/src 底下[root@linux ~]# cd /usr/local/src[root@linux src]# tar -zxvf /tmp/etc.tar.gz# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,# 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc# 则会发现,该目录下的档案属性与 /etc/ 可能会有所不同喔!范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已[root@linux ~]# cd /tmp[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个档案,# 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!范例五:将 /etc/ 内的所有档案备份下来,并且保存其权限![root@linux ~]# tar -zcvpf /tmp/etc.tar.gz /etc# 这个 -p 的属性是很重要的,尤其是当您要保留原本档案的属性时!范例六:在 /home 当中,比 2005/06/01 新的档案才备份[root@linux ~]# tar -N '2005/06/01' -zcvf home.tar.gz /home范例七:我要备份 /home, /etc ,但不要 /home/dmtsai[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生档案![root@linux ~]# cd /tmp[root@linux tmp]# tar -cvf - /etc | tar -xvf -# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!# 要注意的地方在于输出档变成 - 而输入档也变成 - ,又有一个 | 存在~# 这分别代表 standard output, standard input 与管线命令
2. gzip [-cdt#] 档案名
|实例|说明||—|—|-c|将压缩的数据输出到屏幕上,可透过数据流重导向来处理;-d |解压缩;-t |可以用来检验一个压缩档的一致性~看看档案有无错误;-# |压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6 ~ 使用zcat预览bzip2 [-cdkzv#]档名
-c |将压缩的过程产生的资料输出到萤幕上!-d |解压缩-k |保留原始档案,而不会删除原始的档案喔!-z |压缩的参数(预设值,可以不加)-v |可以显示出原档案/压缩档案的压缩比等资讯;-# |与gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!预览:bzcatxz [-dtlkc#]档名
-d |解压缩-t |完整性校验-l |列出压缩档的相关资讯-k |保留原本的档案不删除-c |将数据输出 -#|指定压缩比 预览:xzcat4. zip
- 压缩:zip -r /test/sysconfig /etc/syszonfig/
- 解压缩:
- unzip sysconfig.zip
- cat /var/log/message | zip message -
- unzip -p messsage > message
信息显示命令(12 个)
1. uname [-asrmpi]
|实例|说明|
|—|—|
-a |所有系统相关的信息;
-s |系统核心名称
-r |核心的版本
-m |本系统的硬件名称(x86_64)
-p |CPU 的类型(x86_64)
-i |硬件的平台 (ix86)
2. hostname 显示或临时设置主机名
- /etc/sysconfig/network:没有/etc/hosts的功能只是提供一个主机名
- /etc/hosts:
它和网络相关的,相当于DNS,提供IP地址到hostname的对应
3. dmesg 显示系统开机信息
dmesg | grep -i hd #开机时硬盘相关信息dmesg | grep -i eth #查看网卡相关信息
5. file
|实例|说明|
|—|—|
-b|列出辨识结果时,不显示文件名称; -c|详细显示指令执行过程,便于排错或分析程序执行的情形; -f|<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称;
-L|直接显示符号连接所指向的文件类别;
-m|<魔法数字文件>:指定魔法数字文件;
-z|尝试去解读压缩文件的内容。
6. stat [-tL]显示文件或文件系统状态
-L:支持符号连接; -f:显示文件系统状态而非文件状态; -t:以简洁方式输出信息;
7. du [-abckmshxLSXDHl] 显示每个文件和目录的磁盘使用空间
|实例|说明|
|—|—|
-a或-all | 显示目录中个别文件的大小。
-b或-bytes | 显示目录或文件大小时,以byte为单位。
-c或–total | 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或–kilobytes | 以KB(1024bytes)为单位输出。
-m或–megabytes | 以MB为单位输出。
-s或–summarize | 仅显示总计,只列出最后加总的值。
-h或–human-readable | 以K,M,G为单位,提高信息的可读性。
-x或–one-file-xystem|以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或–dereference<符号链接>|显示选项中所指定符号链接的源文件大小。
-S或–separate-dirs| 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或–exclude-from=<文件>| 在<文件>指定目录或文件。
–exclude=<目录或文件> | 略过指定的目录或文件。
-D或–dereference-args | 显示指定符号链接的源文件大小。
-H或–si | 与-h参数相同,==但是K,M,G是以1000为换算单位==。
-l或–count-links | 重复计算硬件链接的文件。
du -sh /* #统计根目录下每个目录所占空间[root@CentOS69: /root]# du -sh /*7.6M /bin38M /boot340K /dev41M /etc803M /home209M /lib29M /lib6416K /lost+found3.8G /media0 /misc64K /mnt0 /net26M /optdu: cannot access `/proc/8187/task/8187/fd/4': No such file or directorydu: cannot access `/proc/8187/task/8187/fdinfo/4': No such file or directorydu: cannot access `/proc/8187/fd/4': No such file or directorydu: cannot access `/proc/8187/fdinfo/4': No such file or directory0 /proc7.2M /root17M /sbin0 /selinux4.0K /srv0 /sys147M /tmp2.3G /usr200M /var或者du -ah --max-depth=1 / 这个是我想要的结果 a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度。
8. df [-ahHiklmPtx] 检查linux服务器的文件系统的磁盘空间占用情况
|实例|说明|
|—|—|
-a |全部文件系统列表
-h |方便阅读方式显示
-H |等于“-h”,但是计算式,1K=1000,而不是1K=1024
-i |显示inode信息
-k| 区块为1024字节
-l |只显示本地文件系统
-m |区块为1048576字节
–no-sync |忽略 sync 命令
-P |输出格式为POSIX
–sync| 在取得磁盘信息前,先执行sync命令
-T |文件系统类型
–block-size=<区块大小> |指定区块大小
-t<文件系统类型> |只显示选定文件系统的磁盘信息
-x<文件系统类型>| 不显示选定文件系统的磁盘信息
df -t ext4Filesystem 1K-blocks Used Available Use% Mounted on/dev/sda3 201957312 3943316 187748448 3% //dev/sda1 289293 40892 233041 15% /boot/dev/sdb1 9481164 21488 8971396 1% /mnt/sdb1
11. date
-d<字符串> 显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s<字符串> 根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u 显示GMT。
date -s //设置当前时间,只有root权限才能设置,其他只能查看。 date -s 20080523 //设置成20080523,这样会把具体时间设置成空0:00:00 date -s 01:01:01 //设置具体时间,不会对日期做更改 date -s “01:01:01 2008-05-23″ //这样可以设置全部时间 date -s “01:01:01 20080523″ //这样可以设置全部时间 date -s “2008-05-23 01:01:01″ //这样可以设置全部时间 date -s “20080523 01:01:01″ //这样可以设置全部时间加减: date +%Y%m%d //显示前天年月日 date +%Y%m%d –date=”+1 day” //显示前一天的日期 date +%Y%m%d –date=”-1 day” //显示后一天的日期 date +%Y%m%d –date=”-1 month” //显示上一月的日期 date +%Y%m%d –date=”+1 month” //显示下一月的日期 date +%Y%m%d –date=”-1 year” //显示前一年的日期 date +%Y%m%d –date=”+1 year” //显示下一年的日期date -d “nov 22” 今年的 11 月 22 日是星期三 date -d ‘2 weeks’ 2周后的日期 date -d ‘next monday’ (下周一的日期) date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d date -d last-month +%Y%m(上个月是几月) date -d next-month +%Y%m(下个月是几月)使用 ago 指令,您可以得到过去的日期: date -d ‘30 days ago’ (30天前的日期)使用负数以得到相反的日期: date -d ‘dec 14 -2 weeks’ (相对:dec 14这个日期的两周前的日期) date -d ‘-100 days’ (100天以前的日期) date -d ‘50 days’(50天后的日期)
12. cal
|实例|说明|
|—|—|
-1| 显示一个月的月历
-3 |显示系统前一个月,当前月,下一个月的月历
-s| 显示星期天为一个星期的第一天,默认的格式
-m| 显示星期一为一个星期的第一天
-j |显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y |显示当前年份的日历
搜索文件命令(4 个)
1. which 查看可执行文件的位置。
|实例|说明|
|—|—|
-n | 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p | 与-n参数相同,但此处的包括了文件的路径。
-w | 指定输出时栏位的宽度。
==which 默认是找 PATH 内所规范的目录,内建命令找不到==
3. whereis [-bmsu] [BMS 目录名 -f ] 文件名 查看文件的位置
|实例|说明|
|—|—|
-b | 定位可执行文件。
-m | 定位帮助文件。
-s | 定位源代码文件。
-u | 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B | 指定搜索可执行文件的路径。
-M | 指定搜索帮助文件的路径。
-S | 指定搜索源代码文件的路径。
4. locate [-qe]
updatedb更新
|实例|说明|
|—|—|
-r, –regexp REGEXP | 使用基本正则表达式
–regex | 使用扩展正则表达式
-b, –basename | match only the base name of path names
-c, –count | 只输出找到的数量
-d, –database DBPATH | 使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-e, –existing | only print entries for currently existing files
-L, –follow | follow trailing symbolic links when checking file existence (default) |
-h, –help | 显示帮助
-i, –ignore-case | 忽略大小写
-l, –limit, -n LIMIT |limit output (or counting) to LIMIT entries
-m, –mmap | ignored, for backward compatibility
-P, –nofollow, -H | don’t follow trailing symbolic links when checking file ex |istence
-0, –null | separate entries with NUL on output
-S, –statistics | don’t search for entries, print statistics about eachused database |
-q, –quiet | 安静模式,不会显示任何错误讯息
-s, –stdio | ignored, for backward compatibility
-V, –version | 显示版本信息
-w, –wholename | match whole path name (default)
用户管理命令(10 个)
1. useradd [-u UID] [-g initial_group] [-G other_group] -[Mm] [-c 说明栏] [-d home] [-s shell] username
demo
1. 完全参考默认值建立一个使用者,名称为 vbird1
useradd vbird1
当我们使用 useradd 时,系统会主动的去修改 /etc/passwd 与 /etc/shadow,此时/etc/shadow
密码栏会是不可登入的 (以 !! 为开头),因此还需要使用 passwd
来给予 vbird1 密码后,才算新增完毕!
- 新建用户vbired2指定uid 700
useradd -u 700 -g users vbird2 - 建立一个系统账号,名称为 vbird3
useradd -r vbird3
如果我现在新增一个使用者,这个使用者的 UID 会是多少?答案是:『 如果 /etc/passwd 里面的账号
所属的 UID 没有大于 /etc/login.defs 里头的 UID_MIN (在本例中是 500)时,则以 UID 500 来作为一
个新账号的 UID。 如果 /etc/passwd 已有大于 500 以上的 UID 时,则取 /etc/passwd 内最大的那个
UID + 1 作为新设帐号的 UID。』而如果我是想要建立系统用的账号,所以使用 useradd -r sysaccount 这
个 -r 的参数时,就会找『比 500 小的最大的那个 UID + 1 』就是了
2. usermod
3. userdel [-r] username
这个指令下达的时候要小心了!通常我们要移除一个账号的时候,你可以手动的将 /etc/passwd 与
/etc/shadow 里头的该账号取消即可!一般而言,如果该账号只是『 暂时不启用』的话,那么将 /etc/shadow
里头最后倒数一个字段设定为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来! 使
用 userdel 的时机通常是『 你真的确定不要让该用户在主机上面使用任何数据了!』
另外,其实使用者如果在系统上面操作过一阵子了,那么该使用者其实在系统内可能会含有其它档案的。 举
例来说,他的邮件信箱 (mail box) 或者是例行性命令 (crontab) 之类的档案。所以,==如果想要完整的将某个账号完整的移除,最好可以在下达 userdel -r username 之前, 先以『 find / -user username 』
查出整个系统内属于username的档案,然后再加以删除==吧!
4. chsh [-ls]
5. passwd [-lunxwS] username
demo
范例一:将 dmtsai 这个使用者的密码冻结,并观察他![root@linux ~]# passwd -l dmtsaiLocking password for user dmtsai.passwd: Success[root@linux ~]# passwd -S dmtsaiPassword locked.[root@linux ~]# grep dmtsai /etc/shadowdmtsai:!!$1$TDy6D7eg$jVJV/FMaQn14v5Kl7sqw6/:13026:0:99999:7::13149:
4. chage [-dEImMWl] username
chage -d 0 tom # 下一次登录强制重设密码chage -m 0 –M 42 –W 14 –I 7 tomchage -E 2016-09-10 tom
6. groupadd [-g gid] [-r]
预设是私有群组,并无法使用 newgrp 来登
入的
7. groupmod [-g gid] [-n group_name]
8. groupdel [groupname]
必须要确认 /etc/passwd 内的账号没有任何人使用该群组作为 initial group 』才可以删除!所以,你可以:
- 修改 dmtsai 的 GID ,或者是:
- 删除 dmtsai 这个使用者。
9. gpasswd [-A user1,…] [-M user3,user4…] [-rR] groupname
demo
建立一个新群组,名称为 testgroup 且群组交由 dmtsai 管理:
[root@linux ~]# groupadd testgroup[root@linux ~]# gpasswd testgroupChanging the password for group testgroupNew Password:Re-enter new password:# 输入两次密码就对了![root@linux ~]# gpasswd -A dmtsai -M dmtsai,vbird testgroup[root@linux ~]# grep testgroup /etc/group /etc/gshadow/etc/group:testgroup:x:502:dmtsai,vbird/etc/gshadow:testgroup:1CEVbrcjxO6Ps:dmtsai:dmtsai,vbird#此时 dmtsai 则拥有 testgroup 的主控权dmtsai 登入系统,并且让他加入 vbird1 成为 testgroup 成员之一:[dmtsai@linux ~]$ gpasswd -a vbird1 testgroupAdding user vbird1 to group testgroup
10.newgrp gname
newgrp 会额外以另一个login来提供使用者登入到另一个shell中,并且将有效群组改为newgrp后面接的那个群组,若没有接群组,则预设群组为 initial group,此时虽然使用者的环境设定(例如环境变量等等其它数据)不会有影响,但是使用者的『权限』将会重新被计算,只有在群组未被锁定且用户属于这个群租的的前提下才能切换
11. chfn [-foph]
与finger配合使用
12. finger
[root@yongge: /root]# finger -s rootLogin Name Tty Idle Login Time Office Office Phone Hostroot liyong tty1 1d Mar 30 08:48 aliyun +1-324-293-086root liyong pts/0 Apr 1 01:27 aliyun +1-324-293-086 (172.16.250.153)root liyong pts/2 1d Mar 30 09:02 aliyun +1-324-293-086 (172:S.0)root liyong pts/6 12:33 Mar 31 10:44 aliyun +1-324-293-086 (172.16.250.153)root liyong pts/7 1:48 Mar 31 12:31 aliyun +1-324-293-086 (172.16.250.153)
13. id [username]
14.su [-lcm] [username]
环境设定参数档,如 /root/.bash_profile 等等
-l | 后面可以接使用者,例如 su -l dmtsai ,这个 -l 好处是,可使用欲变换身份者
他的所有相关环境设定档
-m | -m 与 -p 是一样的,表示『使用目前的环境设定,而不重新读取新使用者的设定档。』
-c ‘commond’| 以username的身份执行commond
15. sudo [-u [username|#uid]] command
sudo 是怎样工作的?
- 当使用者执行 sudo 时,系统会主动的去寻找 /etc/sudoers 档案,判断该使用者是否有执行
sudo 的权限; - 若使用者具有可执行 sudo 的权限后,便让使用者『输入使用者自己的密码』来确认;
- 若密码输入成功,便开始进行 sudo
- 不过, root 执行 sudo 时,不需要输入密码;
- 若欲切换的身份与执行者身份相同,那也不需要输入密码
16. visudo
语法格式
假如您的系统里面,有个 Web 的软件是以 www 这个使用者来进行编辑的, 您想要让 vbird2 这个使用者可以用 www 这个账号进行编辑,那么就应该写成:vbird2 ALL = (www) ALL如果错写成:vbird2 ALL = ALL亦即没有加上身份宣告的话,那么『预设是仅能进行 root 的身份切换』而已喔! ^_^ 这可是很重要的一个观念呢!另外,如果想要以使用者的群组来进行规范的话,那么在 『使用者账号』的字段,前面加上『 % 』时,就代表是群组 (group) 的身份了。 举例来说,我想要让系统里面所有属于 wheel 这个群组的使用者都能够进行 sudo 时,可以这样写:%wheel ALL = (ALL) ALL而如果你还想要让这个群组内的使用者在使用 sudo 时,不需要输入密码, 那么可以在『可以下达的指令』那个字段内多加入一个参数,名为『NOPASSWD:』即可,亦即:%wheel ALL = (ALL) NOPASSWD: ALL另外,除了单一个人或单一群组之外,我们还可以额外指定一些『账号别名、主机别名、指令别名』 等等
例题:我想要建立一个可以帮忙系统管理员变更使用者密码的群组,名称为 ADMPW ( 注意,在 sudoers
内,这个别名的名称一定要是大写字符才行!)但是这个群组不能修改 root 的密码喔!且他们执行
sudo 时,不需要密码验证。
我以 root 的身份使用 visudo ,进入编辑画面后,去设定成底下的模样:User_Alias ADMPW = vbird, dmtsai, vbird1, vbird3ADMPW ALL = NOPASSWD: !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \!/usr/bin/passwd root上面的意思是说,我的系统上面有四个账号,分别是 vbird, vbird1, vbird3 与 dmtsai 这四个账号加入 sudo 内的 ADMPW 群组中,这四个账号可以使用 sudo 进行『 /usr/bin/passwd * 』密码的更改动作,但是不能 (在指令前面加入 ! 代表不可) 使用/usr/bin/passwd 或 /usr/bin/passwd root ,如此一来,就让该 ADMPW 可以更改使用者的密码,但是不能变更 root 的密码啰!
我的系统中有 DNS 服务,他的启动指令在 /etc/init.d/named ,如果我想要建立一个DNSMASTER 的群组来管理他时?如何是好?
我以 root 的身份使用 visudo ,进入编辑画面后,去设定成底下的模样:User_Alias DNSMASTER = vbird, dmtsaiCmnd_Alias DNSCMD = /etc/init.d/named, /usr/bin/vim /var/named/*DNSMASTER ALL = DNSCMD看的懂吗?嘿嘿!因为 DNS 的设定档大多在 /var/named 里面,所以,我也允许相关账号用 vi 去处理 DNS 的设定档
建议您一定要使用 visudo 去编辑 /etc/sudoers !(注: visudo 必须要使用 root 的身份来执行!)
当我们储存离开时, visudo 会额外去检查 /etc/sudoers 内部的语法,以避免使用者输入错误的信息了
17.修改nologin账户提示语
建立『 /etc/nologin.txt 』这个档案, 并且在这个档案内说明不能登入的原因,那么下次当这个使用者想要登入系统时, 屏幕上出现的就会是 /etc/nologin.txt这个档案的内容,而不是预设的内容了
手动创建账号
- 先建立所需要的群组 ( vi /etc/group );
- 将 /etc/group 与 /etc/gshadow 同步化 ( grpconv );
- 建立账号的各个属性 ( vi /etc/passwd );
- 将 /etc/passwd 与 /etc/shadow 同步化 ( pwconv );
- 建立该账号的密码 ( passwd accountname );
- 建立使用者家目录 ( cp -a /etc/skel /home/accountname );
- 更改使用者家目录的属性 ( chown -R accountname.group /home/accountname )。
1. 建立群组 normalgroup ,假设 520 这个 GID 没有被使用!并且同步化 gshadow[root@linux ~]# vi /etc/group# 在最后一行加入底下这一行!normalgroup:x:520:[root@linux ~]# grpconv[root@linux ~]# grep 'normalgroup' /etc/group /etc/gshadow/etc/group:normalgroup:x:520:/etc/gshadow:normalgroup:x::# 简单!搞定群组啰! ^_^2. 建立 normaluser 这个账号,假设 UID 700 没被使用掉![root@linux ~]# vi /etc/passwd# 在最后一行加入底下这一行!normaluser:x:700:520::/home/normaluser:/bin/bash3. 同步化密码,并且建立该使用者的密码[root@linux ~]# pwconv[root@linux ~]# grep 'normaluser' /etc/passwd /etc/shadow/etc/passwd:normaluser:x:700:520::/home/normaluser:/bin/bash/etc/shadow:normaluser:x:13030:0:99999:7:::# 呵呵!没错没错!已经建立妥当啰~但是密码还不对~[root@linux ~]# passwd normaluserChanging password for user normaluser.New UNIX password:Retype new UNIX password:passwd: all authentication tokens updated successfully.4. 建立使用者家目录,并且修订权限![root@linux ~]# cp -a /etc/skel /home/normaluser[root@linux ~]# chown -R normaluser:normalgroup /home/normaluser
基础网络操作命令(10 个)
1. telnet
2. ssh
3. scp [参数] [原路径] [目标路径]
# 复制文件到本机scp -r root@192.168.120.204:/opt/soft/mongodb /opt/soft/#上传本地文件到远程scp /opt/soft/nginx-0.5.38.tar.gz root@192.168.120.204:/opt/soft/scptest
4. wget
–limit-rates=:
5. ping
-c |数目:在发送指定数目的包后停止。-I |网络界面:使用指定的网络界面送出数据包。-l |前置载入:设置在送出要求信息之前,先行发出的数据包。-p |范本样式:设置填满数据包的范本样式。-t |存活数值:设置存活数值TTL的大小。
### 6. route### 7. ifconfig [网络设备] [参数]选项 | 含义—|—up| 启动指定网络设备/网卡。down |关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除。arp |设置指定网卡是否支持ARP协议。-promisc| 设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包-allmulti |设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包-a |显示全部接口信息-s| 显示摘要信息(类似于 netstat -i)add| 给指定网卡配置IPv6地址del| 删除指定网卡的IPv6地址### 8. ifup### 9. ifdown### 10. netstat # 深入网络操作命令(6 个) ### 1. lsof### 2. route### 3. mail### 4. mutt### 5. nslookup### 6. dig 以上这些命令是一个精简版,很多人不知道用法,以后我会整理出来一个豪华版,当然之前已经分享了一部分了哦 # 有关磁盘文件系统的命令(8 个) ### 1. mount### 2. umount### 3. fsck### 4. dd if=/PATH/FROM/SRC of=/PATH/TO/DESToptions | complications—|—bs=# |block size, 复制单元大小count=# |复制多少个bsof=file| 写到所命名的文件而不是到标准输出if=file |从所命名文件读取而不是从标准输入bs=size |指定块大小(既是是ibs 也是obs)ibs=size |一次读size 个byteobs=size |一次写size 个bytecbs=size |一次转化size 个byteskip=blocks |从开头忽略blocks 个ibs 大小的块seek=blocks |从开头忽略blocks 个obs 大小的块count=n |只拷贝n个bs指定的大小conv=conversion|conversion是转化参数:如下conversion转化参数|含义ascii |转换 EBCDIC 为 为 ASCIIebcdic |转换 ASCII 为 为 EBCDICblock | 转换一行数据为长度为 cbs 的记录,不足部分用空格填充。unblock |替代cbs 长度的每一行尾的空格为新行lcase | 把大写字符转换为小写字符ucase |把小写字符转换为大写字符nocreat | 不创建输出文件noerror | 出错时不停止==notrunc== | ==不截短输出文件==sync | 把每个输入块填充到ibs 个字节,不足部分用空(NUL)echo '123456' > f1[358][root@liyong: /root]# echo 'abc' > f2[root@liyong: /root]# dd if=f2 of=f1 bs=1 count=3 conv=notrunc,ucase[root@liyong: /root]# cat f1ABC456[root@liyong: /root]#dd if=f2 of=f1 bs=1 count=2 seek=4 conv=notrunc,ucase[root@liyong: /root]# cat f1ABC4AB#备份MBR:dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1#破坏MBR 中的bootloader: :dd if=/dev/zero of=/dev/sda bs=64 count=1seek=446#有一个大与2K 的二进制文件fileA。 。 现在想从第64 个字节位置开始读取,需要读取的大小是128Byts 。又有fileB, 想把上面读取到的128Bytes 写到第32 个字节开始的位置,替换128Bytes ,请问如何实现?#dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31conv=notrunc
备份
dd if=/dev/sdx of=/dev/sdy将本地的/dev/sdx 整盘备份到/dev/sdydd if=/dev/sdx of=/path/to/image将 将/dev/sdx 全盘数据备份到指定路径的image 文件dd if=/dev/sdx | gzip >/path/to/image.gz备份/dev/sdx 全盘数据,并利用gzip 工具进行压缩,保存到指定路径
恢复
恢复:dd if=/path/to/image of=/dev/sdx将备份文件恢复到指定盘gzip -dc /path/to/image.gz | dd of=/dev/sdx将压缩的备份文件恢复到指定盘
拷贝内存资料到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root 目录下的mem.bin 文件
从光盘拷贝iso 镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root 文件夹下,并保存为cd.iso 文件
销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
得到最恰当的block size
dd if=/dev/zero bs=1024 count=1000000of=/root/1Gb.filedd if=/dev/zero bs=2048 count=500000of=/root/1Gb.filedd if=/dev/zero bs=4096 count=250000of=/root/1Gb.file通过比较dd 指令输出中所显示的命令执行时间,即可确定系统最佳的block size 大小
测试硬盘读写速度
d if=/dev/zero of=/root/1Gb.file bs=1024count=1000000dd if=/root/1Gb.file bs=64k | dd of=/dev/null通过上两个命令输出的执行时间,可以计算出测试硬盘的写/读 读/速度
修复硬盘 dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2 年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O 错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生 生,
5. dumpe2fs
6. dump
7. mkfs
mkfs.xfs [- - b bsize] [- - d parms] [- - i parms] [ [- - l parms] [- - L label] [- - f] \ [ [- - r parms] 装置名称
选项与参数:
关于单位:底下只要谈到『数值』时,没有加单位则为 bytes 值,可以用 k,m,g,t,p (小写)等来解释
比较特殊的是 s 这个单位,它指的是 sector 的『个数』
关机和查看系统信息的命令(3个)
1. shutdown
2. halt
3. init
系统管理相关命令(8个)
1. uptime
2. top
3. free
4. vmstat
5. mpstat
6. iostat
7. sar
8. chkconfig
系统安全相关命令(10 个)
1. chmod [-R] [s]xyz 档案或目录
数字类型改变档案权限
chmod 2755 /test
符号类型改变档案权限
x:特殊权限;u属主;g数组:o其他人a:ugo
==同时设置ugo权限可用,隔开==
chmod u=rwx,go=rx .bashrc# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格符![root@linux ~]# ls -al .bashrc-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
2. chown [-R] username 档案或目录 / username:groupname 档案或目录
-R 递归修改
3. chgrp [-R] dirname/filename …改变所属群组
8. umask
9. chattr
10. lsattr
查看系统用户登陆信息的命令(7 个)
1. whoami
2. who
3. w
4. last
5. lastlog
6. users
7. finger
查看硬件信息相关命令(8 个)
1. ifconfig
2. free
3. fdisk
4. ethtool
5. mii-tool
6. dmidecode
7. dmesg
8. lspci
其它(19 个)
1. echo
2. printf
3. rpm
某个 RPM 档案内的信息,而非已安装的套件信息
4. yum
info|查看指定软件包的信息
check-update|检查可以更新的软件包
search packagename|根据名称搜索软件包
clean|清楚yum缓存
install|安装
remove|卸载
update|更新
list|列出已安装和仓库中所有包
repolist|显示yum仓库信息
deplist |获取指定包的依赖关系
groupinstall|安装包组
groupremove|卸载包组
groupupdate|更新包组
grouplist|列出包组
5. watch
-n或–interval|watch缺省每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。
-d或–differences 用-d或–differences|watch会高亮显示变化的区域。 而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来。
-t 或-no-title|会关闭watch命令在顶部的时间间隔,命令,当前时间的输出。
命令:每隔一秒高亮显示网络链接数的变化情况watch -n 1 -d netstat -ant
6. alias
7. unalias
9. clear
10. history
Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。linux中history命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。运行特定的历史命令history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.
11. eject
12. time
13. nohup
14. nc
15. xargs [-oepn] command
当 xargs 后面没有接任何的指令时,预设是以 echo 来进行输出喔!
例一:将 /etc/passwd 内的第一栏取出,仅取三行,使用 finger 这个指令将每个账号内容秀出来[root@linux ~]# cut -d':' -f1 < /etc/passwd |head -n 3| xargs fingerLogin: root Name: rootDirectory: /root Shell: /bin/bashNever logged in.No mail.No Plan.......底下省略.....如果不加xargs则只会显示第一个用户的信息cut -d':' -f1 < /etc/passwd | finger范例四:同上,但是当分析到 lp 就结束这串指令?[root@linux ~]# cut -d':' -f1 < /etc/passwd | xargs -p -e'lp' fingerfinger root bin daemon adm ?...# 仔细与上面的案例做比较。也同时注意,那个 -e'lp' 是连在一起的,中间没有空格键。# 上个例子当中,第五个参数是 lp 啊,那么我们下达 -e'lp' 后,则分析到 lp# 这个字符串时,后面的其它 stdin 的内容就会被 xargs 舍弃掉了范例二:同上,但是每次执行 finger 时,都要询问使用者是否动作?[root@linux ~]# cut -d':' -f1 < /etc/passwd |head -n 3| xargs -p fingerfinger root bin daemon ?...y......底下省略.....# 呵呵!这个 -p 的参数有趣了吧?!他可以让使用者的使用过程中,被询问到每个# 指令是否执行!范例三:将所有的 /etc/passwd 内的账号都以 finger 查阅,但一次仅查阅五个账号[root@linux ~]# cut -d':' -f1 < /etc/passwd | xargs -p -n 5 fingerfinger root bin daemon adm lp ?...y......底下省略.....# 在这里鸟哥使用了 -p 这个参数来让您对于 -n 更有概念。一般来说,某些指令后面# 可以接的 arguments 是有限制的,不能无限制的累加,此时,我们可以利用 -n# 来帮助我们将参数分成数个部分,每个部分分别再以指令来执行!这样就 OK 啦!^
16. exec
17. export
18. unset
19. type
系统性能监视高级命令(12 个)
内存:
1. top
2. free
3. vmstat
4. mpstat
5. iostat
6. sar
CPU:
1. top
2. vmstat
3. mpstat
4. iostat
5. sar
I/O:
1. vmstat
2. mpstat
3. iostat
4. sar
进程:
1. ipcs
2. ipcrm
3. lsof
4. strace
5. lstrace
系统管理相关命令(8 个)
1. uptime 就是显示出目前系统已经开机多久的时间,以及 1, 5, 15 分钟的平均负载
06:49:41 up 18:16, 2 users, load average: 0.00, 0.00, 0.00
2. top
|实例|说明|
|—|—|
-b |批处理
-c| 显示完整的命令
-I |忽略失效过程
-s |保密模式
-S |累积模式
-i<时间> |设置间隔时间
-u<用户名>| 指定用户名
-p<进程号> |指定进程
-n<次数> |循环显示的次数
top交互命令
在top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。
h |显示帮助画面,给出一些简短的命令总结说明
k |终止一个进程。
i |忽略闲置和僵死进程。这是一个开关式命令。
q |退出程序
r |重新安排一个进程的优先级别
S |切换到累计模式
s |改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s
f或者F |从当前显示中添加或者删除项目
o或者O |改变显示项目的顺序
l |切换显示平均负载和启动时间信息
m |切换显示内存信息
t |切换显示进程和CPU状态信息
c |切换显示命令名称和完整命令行
M |根据驻留内存大小进行排序
P |根据CPU使用百分比大小进行排序
T |根据时间/累计时间进行排序
W |将当前设置写入~/.toprc文件中
使用技巧
-多U多核CPU监控
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
-高亮显示当前运行进程
敲击键盘“b”(打开/关闭加亮效果)
我们发现进程id为2570的“top”进程被加亮了,top进程就是视图第二行显示的唯一的运行态(runing)的那个进程,可以通过敲击“y”键关闭或打开运行态进程的加亮效果
- 敲击键盘“x”(打开/关闭排序列的加亮效果)
- 通过”shift + >”或”shift + <”可以向右或左改变排序列
[root@TG1704 log]# toptop - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombieCpu(s): 5.9%us, 3.4%sy, 0.0%ni, 90.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%stMem: 32949016k total, 14411180k used, 18537836k free, 169884k buffersSwap: 32764556k total, 0k used, 32764556k free, 3612636k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28894 root 22 0 1501m 405m 10m S 52.2 1.3 2534:16 java 18249 root 18 0 3201m 1.9g 11m S 35.9 6.0 569:39.41 java 2808 root 25 0 3333m 1.0g 11m S 24.3 3.1 526:51.85 java 25668 root 23 0 3180m 704m 11m S 14.0 2.2 360:44.53 java 574 root 25 0 3168m 611m 10m S 12.6 1.9 556:59.63 java 1599 root 20 0 3237m 1.9g 11m S 12.3 6.2 262:01.14 java 1008 root 21 0 3147m 842m 10m S 0.3 2.6 4:31.08 java 13823 root 23 0 3031m 2.1g 10m S 0.3 6.8 176:57.34 java 28218 root 15 0 12760 1168 808 R 0.3 0.0 0:01.43 top 29062 root 20 0 1241m 227m 10m S 0.3 0.7 2:07.32 java 1 root 15 0 10368 684 572 S 0.0 0.0 1:30.85 init 2 root RT -5 0 0 0 S 0.0 0.0 0:01.01 migration/0 3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 说明:统计信息区:前五行是当前系统情况整体的统计信息区。下面我们看每一行信息的具体意义。第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:14:06:23 — 当前系统时间up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)2 users — 当前有2个用户登录系统load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。第二行,Tasks — 任务(进程),具体信息说明如下:系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。第三行,cpu状态信息,具体属性说明如下:5.9%us — 用户空间占用CPU的百分比。3.4% sy — 内核空间占用CPU的百分比。0.0% ni — 改变过优先级的进程占用CPU的百分比90.4% id — 空闲CPU百分比0.0% wa — IO等待占用CPU的百分比0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比0.2% si — 软中断(Software Interrupts)占用CPU的百分比备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!第四行,内存状态,具体信息如下:32949016k total — 物理内存总量(32GB)14411180k used — 使用中的内存总量(14GB)18537836k free — 空闲内存总量(18GB)169884k buffers — 缓存的内存量 (169M)第五行,swap交换分区信息,具体信息说明如下:32764556k total — 交换区总量(32GB)0k used — 使用的交换区总量(0K)32764556k free — 空闲交换区总量(32GB)3612636k cached — 缓冲的交换区总量(3.6GB)备注:第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:18537836k +169884k +3612636k = 22GB左右。对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。第六行,空行。第七行以下:各进程(任务)的状态监控,项目列信息说明如下:PID — 进程idUSER — 进程所有者PR — 进程优先级NI — nice值。负值表示高优先级,正值表示低优先级VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESRES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATASHR — 共享内存大小,单位kbS — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程%CPU — 上次更新到现在的CPU时间占用百分比%MEM — 进程使用的物理内存百分比TIME+ — 进程使用的CPU时间总计,单位1/100秒COMMAND — 进程名称(命令名/命令行)
3. free
命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存
|实例|说明|
|—|—|
-b | 以Byte为单位显示内存使用情况。
-k | 以KB为单位显示内存使用情况。
-m | 以MB为单位显示内存使用情况。
-g | 以GB为单位显示内存使用情况。
-o | 不显示缓冲区调节列。
-s<间隔秒数> | 持续观察内存使用状况。
-t | 显示内存总和列。
-V | 显示版本信息。
[root@SF1150 service]# free total used free shared buffers cachedMem: 32940112 30841684 2098428 0 4545340 11363424-/+ buffers/cache: 14932920 18007192Swap: 32764556 1944984 30819572第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是2098428KB,已用内存是30841684KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
4. vmstat
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果。在学习vmstat命令前,我们先了解一下Linux系统中关于物理内存和虚拟内存相关信息。物理内存和虚拟内存区别:我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。要深入了解linux内存运行机制,需要知道下面提到的几个方面:首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。其次,linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不用担心什么,只要知道是怎么一回事就可以了。最后,交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。因此,合理规划和设计linux内存的使用,是非常重要的。虚拟内存原理:在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。1.命令格式:vmstat [-a] [-n] [-S unit] [delay [ count]]vmstat [-s] [-n] [-S unit]vmstat [-m] [-n] [delay [ count]]vmstat [-d] [-n] [delay [ count]]vmstat [-p disk partition] [-n] [delay [ count]]vmstat [-f]vmstat [-V]2.命令功能:用来显示虚拟内存的信息3.命令参数:-a:显示活跃和非活跃内存-f:显示从系统启动至今的fork数量 。-m:显示slabinfo-n:只在开始时显示一次各字段名称。-s:显示内存相关统计信息及多种系统活动数量。delay:刷新时间间隔。如果不指定,只显示一条结果。count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。-d:显示磁盘相关统计信息。-p:显示指定磁盘分区统计信息-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)-V:显示vmstat版本信息。4.使用实例:实例1:显示虚拟内存使用情况命令:vmstat输出:复制代码[root@localhost ~]# vmstat 5 6procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 3029876 199616 690980 0 0 0 2 3 2 0 0 100 ... 0 0 0 3029752 199616 690980 0 0 0 5 1003 33 0 0 100 0 0 说明:字段说明:Procs(进程):r: 运行队列中进程数量b: 等待IO的进程数量Memory(内存):swpd: 使用虚拟内存大小free: 可用内存大小buff: 用作缓冲的内存大小cache: 用作缓存的内存大小Swap:si: 每秒从交换区写到内存的大小so: 每秒写入交换区的内存大小IO:(现在的Linux版本块的大小为1024bytes)bi: 每秒读取的块数bo: 每秒写入的块数系统:in: 每秒中断数,包括时钟中断。cs: 每秒上下文切换数。CPU(以百分比表示):us: 用户进程执行时间(user time)sy: 系统进程执行时间(system time)id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。wa: 等待IO时间备注: 如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。如果pi,po 长期不等于0,表示内存不足。如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。命令:vmstat 5 5表示在5秒时间内进行5次采样。将得到一个数据汇总他能够反映真正的系统情况。实例2:显示活跃和非活跃内存命令:vmstat -a 2 5输出:复制代码[root@localhost ~]# vmstat -a 2 5procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free inact active si so bi bo in cs us sy id wa st 0 0 0 3029752 387728 513008 0 0 0 2 3 2 0 0 100 ... 0 0 0 3029752 387728 513076 0 0 0 0 1003 32 0 0 100 0 0[root@localhost ~]# 说明:使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同。字段说明:Memory(内存):inact: 非活跃内存大小(当使用-a选项时显示)active: 活跃的内存大小(当使用-a选项时显示)实例3:查看系统已经fork了多少次命令:vmstat -f输出:[root@SCF1129 ~]# vmstat -f 12744849 forks[root@SCF1129 ~]#说明:这个数据是从/proc/stat中的processes字段里取得的实例4:查看内存使用的详细信息命令:vmstat -s输出:复制代码[root@localhost ~]# vmstat -s 4043760 total memory ... 1351868832 boot time 367291 forks 说明:这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat。实例5:查看磁盘的读/写命令:vmstat -d输出:[root@localhost ~]# vmstat -ddisk- ------------reads------------ ------------writes----------- -----IO------ total merged sectors ms total merged sectors ms cur secram0 0 0 0 0 0 0 0 0 0 0ram1 0 0 0 0 0 0 0 0 0 0ram2 0 0 0 0 0 0 0 0 0 0ram3 0 0 0 0 0 0 0 0 0 0... sda 33381 6455 615407 63224 2068111 1495416 28508288 15990289 0 10491hdc 0 0 0 0 0 0 0 0 0 0fd0 0 0 0 0 0 0 0 0 0 0md0 0 0 0 0 0 0 0 0 0 0[root@localhost ~]# 复制代码说明:这些信息主要来自于/proc/diskstats.merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作.实例6:查看/dev/sda1磁盘的读/写命令:输出:[root@SCF1129 ~]# df文件系统 1K-块 已用 可用 已用% 挂载点/dev/sda3 1119336548 27642068 1034835500 3% /tmpfs 32978376 0 32978376 0% /dev/shm/dev/sda1 1032088 59604 920056 7% /boot[root@SCF1129 ~]# vmstat -p /dev/sda1sda1 reads read sectors writes requested writes 18607 4249978 6 48[root@SCF1129 ~]# vmstat -p /dev/sda3sda3 reads read sectors writes requested writes 429350 35176268 28998789 980301488[root@SCF1129 ~]#说明:这些信息主要来自于/proc/diskstats。reads:来自于这个分区的读的次数。read sectors:来自于这个分区的读扇区的次数。writes:来自于这个分区的写的次数。requested writes:来自于这个分区的写请求次数。实例7:查看系统的slab信息命令:vmstat -m输出:复制代码[root@localhost ~]# vmstat -mCache Num Total Size Pagesip_conntrack_expect 0 0 136 28ip_conntrack 3 13 304 13ip_fib_alias 11 59 64 59ip_fib_hash 11 59 64 59AF_VMCI 0 0 960 4....kmem_cache 137 137 2688 1复制代码这组信息来自于/proc/slabinfo。slab:由于内核会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry,这些对象如果每次构建的时候就向内存要一个页(4kb),而其实只有几个字节,这样就会非常浪费,为了解决这个问题,就引入了一种新的机制来处理在同一个页框中如何分配小存储区,而slab可以对小对象进行分配,这样就不用为每一个对象分配页框,从而节省了空间,内核对一些小对象创建析构很频繁,slab对这些小对象进行缓冲,可以重复利用,减少内存分配次数。
5. mpstat
6. iostat
7. sar
8. chkconfig
关机和查看系统信息的命令(3 个)
1. shutdown
2. halt
3. init
- 常用dos命令&Linux命令
- 常用linux命令-netstat命令
- 常用Linux命令
- linux常用开发命令
- 常用LINUX命令--(1)
- 常用的Linux命令
- Linux常用系统配置命令
- linux 常用网络命令
- 常用Linux命令
- 常用linux命令
- 常用linux命令大全
- linux 常用几个命令
- Linux常用简单命令
- 常用linux命令
- 常用的 Linux 命令
- Linux常用解压命令
- 常用linux命令[tar]
- linux常用svn命令
- 计算平方
- 观察者模式
- ScheduledFuture
- 紫书章六例题六 小球下落 (UVA 679) (直接模拟超时,找规律)
- windows安装MySQL
- 常用linux命令
- 蓝桥杯Date日期排列
- C#之转义字符
- 格式化字符串漏洞利用 六、特殊案例
- PAT乙级(Basic Level)练习题 >母牛的故事
- 算法题-n-1的位数
- ES集群理解和安装
- 响铃:留给云计算服务企业的时间不多了,生态战成为终极一战
- 图像分割(三)——分水岭算法/边缘检测/直方图法