tail -f 查看多个日志文件(功能增强)
tail -f sys-info.log sys-error.log |awk '/^==> / {a=substr(0, 5, length-8); next}{print a":"0}'
tail -f sys-info.log sys-error.log
希望日志的每一行都能出现文件名
alias tfm='tail -100f /home/app/manager/info.log'
alias tfm2='tail -100f /Users/nljt/logs/manager/info.log'
- tail -f file1 file2 原生命令。
当监控文件发生变化的时候,会自动输出,并在输出之前,先打印一行如下标识。但这个表示只出现在文件改变后输出的第一行,并不会每行都有。
- CTRL + R:搜索命令历史
| 命令 | 描述 | |
|---|---|---|
| cat -A $FILE | 显示 $FILE 文件的所有内容 | |
| sort file1.txt file2.txt file3.txt > final_sorted_list.txt | 一次性将所有文件排序 | |
| ls - l | sort -nr -k 5 | 按指定的第 5 列进行排序 |
| sort --key=1,1 --key=2n distor.txt | 对第 1 列进行排序(默认按字母表顺序),对第 2 列进行数值排序 | |
| sort foo.txt | uniq -c | 查找重复的行并显示该行重复的次数 |
| cut -f 3 distro.txt | 剪切第 3 列 | |
| cut -c 7-10 | 剪切 7 - 10 字符 | |
| cut -d ':' -f 1 /etc/password | 分隔符 : | |
| sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distro.txt | 按第 3 列第 7 个字符、第 3 列第 1 个字符和第 3 列第 4 个字符排序 | |
| paste file1.txt file2.txt > newfile.txt | 合并两个文件 | |
| join file1.txt file2.txt | 按公共字段连接两个文件 |
参考
sudo su是切root权限需要当前用户密码即切换到root
su切换用户:默认切root用户需要root密码。
- sudo su mah : root用户切换其他用户不需要密码
linux watch总结-监控命令
指令:需要周期性执行的指令。
(1)重复执行 uptime 命令,默认每隔 2s 执行一次。
watch uptime
watch -n 1 -d netstat -ant # 命令:每隔一秒高亮显示网络链接数的变化情况
watch -n 1 -d 'pstree|grep http' # 每隔一秒高亮显示http链接数的变化情况。 后面接的命令若带有管道符,需要加''将命令区域归整。
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l' # 实时查看模拟攻击客户机建立起来的连接数
watch -d 'ls -l|grep scf' # 监测当前目录中 scf' 的文件的变化
watch -n 10 'cat /proc/loadavg' # 10秒一次输出系统的平均负载
watch uptime
watch -t uptime
watch -d -n 1 netstat -ntlp
watch -d 'ls -l | fgrep goface' # 监测goface的文件
watch -t -differences=cumulative uptime
watch -n 60 from # 监控mail
watch -n 1 "df -i;df" # 监测磁盘inode和block数目变化情况
(2)查看当前目录文件 log 的变化。
watch -d "ls -l | grep log"
注意,当监测的命令中包含管道,需要使用引号将其括起来。
(3)每 10s 查看一次系统的平均负载。
watch -n10 cat /proc/loadavg
(4)每隔 1s 高亮显示网络连接数的变化情况。
watch -n1 -d netstat -ant
du -sh:查看当前目录总大小。
du -sh *:查看当前目录所有子目录大小。
du -ach *:查看当前目录和所有子目录大小,最后一行会显示当前目录的总大小,不包括隐藏文件。
例一:列出当前目录中所有以“t”开头的目录的详细内容,可以使用如下命令:
ls -l t*1
例二:递归列出当前目录下的所有文件(包括隐藏文件)的绝对路径
find $PWD | xargs ls -ld
linux alias总结-linux别名:
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls $ls_option --color'
alias ll='ls $ls_options -l --color'
alias l='ls $ls_options -l --color'
alias vi="vim"
alias cdp='cd ..' #回到上级parent目录
alias cdpp='cd ../..'
alias cdppp='cd ../../..'
alias cdpppp='cd ../../../..'
alias grep='grep -i --color' #用颜色标识,更醒目;忽略大小写
alias grep='grep --color=auto'
alias wgetall='wget -c -r -k -np -L'
alias psgrep='ps -ef | grep' #搜索进程
alias netgrep='netstat -npl| grep' #netstat -tlnp|grep 查看端口
alias psg='\ps aux | grep -v grep | grep --color' # 查看进程信息
alias netp='netstat -tulan |grep' # 查看服务器端口连接信息
alias lvim="vim -c "normal '0"" # 编辑vim最近打开的文件
alias tf='tail -f ' # 快速查看文件末尾输出
alias nginx='/export/servers/nginx/sbin/nginx' #nginx别名
#多级目录跳转
alias ..="cd .."
alias ...="cd ../.." # 快速进入上上层目录
alias ....="cd ../../.."
#alias rm='rm -rf' #慎重使用
# 自动在文件末尾加上 .bak-日期 来备份文件,如 bu nginx.conf
bak() { cp "$@" "$@.bak"-`date +%y%m%d`; echo "`date +%Y-%m-%d` backed up $PWD/$@"; }
# 级联创建目录并进入,如运行: mkdirs a/b/c
mkdirs() { mkdir -p $1 && cd $1 && pwd ; }
# 查看去掉#注释和空行的配置文件,如 nocomm /etc/squid/squid.conf
alias nocomm='grep -Ev '''^(#|$)''''
#试用alias别名
alias aplog='tail -f /export/data/tomcatRoot/admin.plus.jd.com/logs/catalina.out'
alias cda='cd /export/data/tomcatRoot/admin.plus.jd.com'
alias cdcs='cd /export/data/tomcatRoot/cooperate.soa.plus.jd.com'
alias cds='cd /export/data/tomcatRoot/soa.plus.jd.com'
alias cdw='cd /export/data/tomcatRoot/worker.plus.jd.com'
alias rsadmin='/export/home/tomcat/domains/admin.plus.jd.com/server1/bin/stop.sh && /export/home/tomcat/domains/admin.plus.jd.com/server1/bin/start.sh && aplog'
alias rscsoa='/export/home/tomcat/domains/cooperate.soa.plus.jd.com/server1/bin/stop.sh && /export/home/tomcat/domains/cooperate.soa.plus.jd.com/server1/bin/start.sh && csplog'
alias rssoa='/export/home/tomcat/domains/soa.plus.jd.com/server1/bin/stop.sh && /export/home/tomcat/domains/soa.plus.jd.com/server1/bin/start.sh && splog'
alias rsworker='/export/home/tomcat/domains/worker.plus.jd.com/server1/bin/stop.sh && /export/home/tomcat/domains/worker.plus.jd.com/server1/bin/start.sh && wplog'
alias splog='tail -f /export/data/tomcatRoot/soa.plus.jd.com/logs/catalina.out'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
别名作用范围:
1.所有用户:vim /etc/bashrc 中加入命令重新登录即永久生效
2.当前用户:vi ~/.bashrc 增加alias命令,想要即可生效: source ~/.bashrc
3.临时设置,重启后无效,直接执行 alias vi='vim'命令。
alias cdcs='cd /export/data/tomcatRoot/cooperate.soa.plus.jd.com'
alias cslog='tail -100f /export/data/tomcatRoot/cooperate.soa.plus.jd.com/logs/catalina.out'
alias rsadmin='./export/home/tomcat/domains/admin.plus.jd.com/stop.sh && ./export/home/tomcat/domains/admin.plus.jd.com/start.sh && tail -f /export/data/tomcatRoot/admin.plus.jd.com/logs/catalina.out'
programmerauthor.github.io/2020/01/08/… 配置文件
Mac下命令总结:
blog.csdn.net/zhao_liwei/… 待测试
blog.csdn.net/weixin_4371… 不要这么配置
- alias -p #alias 查看当前所有别名
2.设置别名:
alias vi="vim"
alias la="ls -al –color=auto"
2.去掉别名,请用unalias aliasname
#常用的alias seanlook.com/2014/03/09/…
alias转移字符:
注意:这里 转移符号 是一个反斜杠
alias hello="curl 'qyapi.weixin.qq.com/cgi-bin/web…' -H 'Content-Type: application/json' -d '{"msgtype": "text","text": {"content": "夕会内容","mentioned_mobile_list":["17319791447","17600203495","18811175655"]}}'"
www.cnblogs.com/ptw-share/p… linux常用命令技巧,linux命令技巧
tail [+ / - num ] [行数] 文件
- 从文件开始处算起
- 从文件末尾处算起
后可接 |grep 按关键字查找,多个关键字可用多个|grep,如:
|grep a |grep b
stop.sh脚本
#!/bin/bash
export CATALINA_HOME=/export/servers/tomcat8.0.30
export CATALINA_BASE=/export/Instances/ebs.web/server1
CATALINA_BASE/conf/server.xml
ps -aef | grep java|grep "/ebs"| grep -v grep | sed 's/ [ ]*/:/g' |cut -d: -f2|kill -9 cat
su无需root密码将普通用户切换至root权限 【linux su】
设置方法:
1、将需要su的用户(appuser)加入wheel组, usermod -G wheel appuser
2、将/etc/pam.d/su 里面的注释去掉,授权su命令给wheel组的用户 auth sufficient pam_wheel trust.so use_uid
那么wheel组里面的所有用户都可以通过su直接切换到root权限下,而不需要输入密码,类似的操作sudo也可以完成。
s10-Linux技巧:
1、ll -i upload ,ll upload -i 这两个命令一样【参数命令可以写在后面】
chmod index.html +x(不能执行) 和chmod +x index.html ,多数命令是可以执行的,有些是不可以的。
2、cd ~ [~代表当前用户主目录(一个目录)]
cd - 上一个目录
linux mv 更改文件名+移动文件+文件夹,移动并且改名
1.对文件或目录重新命名
- mv 操作文件时是移动并且重命名。 【分为源目录-目标目录是否一致,文件名是否一致】
如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。
3.将文件从一个目录移到另一个目录中
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中
如果移动的目标位置已经存在同名的文件,则同样会提示是否覆盖,因为 mv 命令默认执行的也是 "mv -i" 的别名
实际demo:
cloud.tencent.com/developer/a…
| 命令格式 | 运行结果 |
|---|---|
| mv source_file(文件) dest_file(文件) | 移动并改名:- 目标目录与原目录一致,将源文件名 source_file 改为目标文件名 dest_file |
- 目标目录与原目录不一致, 指定了新文件名,效果就是:移动 + 重命名。mv /home/bunian/a.txt /home/bunian/test/c.txt | | mv source_file(文件) dest_directory(目录) | 移动目录:将文件 source_file 移动到目标目录 dest_directory 中 | | mv source_directory(目录) dest_directory(目录) | 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory | | mv source_directory(目录) dest_file(文件) | 出错 |
移动某个文件到当前目录=. mv ../test.cpt .
- 在/tmp 文件夹 mv a.txt /abc.txt 【后面加文件相当于移动到某个文件内】 执行完成后,/tmp 下面的a.txt 消失,/ 目录下的 abc.txt内容变为:123456
- mv testMv/Bookmarks.bak的副本3 Book.bak #文件移动到当前目录文件。 =移动并改名
- mv ex3 new1 将文件ex3改名为new1
- mv test testMv #test目录下所有文件包括test文件夹 移动到testMv目录下 【级联目录移动】
-
- mv /usr/men/* . 将目录/usr/men中的所有文件移到当前目录
- mv -f cangls /tmp
#就算 /tmp/ 目录下已经存在同名的文件,由于"-f"选项的作用,所以会强制覆盖 - mv -vn bols cangls lmls /tmp/、
"lmls"->"/tmp/lmls"
#再向 /tmp/ 目录中移动同名文件,如果使用了 "-n" 选项,则可以看到只移动了 lmls,而同名的 bols 和 cangls 并没有移动("-v" 选项用于显示移动过程) - 将 /home/bunian/sza/file 目录里边的所有文件&文件夹 挪到 /home/bunian/sza
mv /home/bunian/sza/file/* /home/bunian/sza
语法:
mv 【选项】 源文件 目标文件
- -f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
- -i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
- -n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
- -v:显示文件或目录的移动过程;
- -u:若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级;
- sudo -i #直接切换到root
- passwd 修改当前用户密码。
| grep屏蔽展示自己这一行 | ps -aux|grep chat.js| grep -v grep用ps -def | grep查找进程很方便,最后一行总是会grep自己用grep -v参数可以将grep命令排除掉 | | ---------------------- | ----------------------------------------------------------------------------------------------- | | 后台启动nohup &linux nohup | &用途:在后台运行,一般两个一起用nohup command & | | | | | | | | | |
linux配置host:
1.vi 编辑后直接生效。
cat /etc/hosts
Linux面试题-运维面试题:
此处为语雀内容卡片,点击链接查看:www.yuque.com/mafirst-mu6…
Linux操作系统主要就是一些配置文件(/etc)和命令行工具(/bin /sbin /usr/bin /usr/sbin),企业应用,进行监控、管理等等。
1.重要的命令:find,sed,awk,正则……
2.工具:gnu下的著名软件 gcc,gdb,vi,make……
3.unix编程,编译等。xwin开发方式,gtk,qt……
4.文件系统,/dev下的设备(会用),/var下重要的东西,/etc 下的配置(常用服务配置apache, ftpd, sshd, xinetd, squid, natd, named),系统启动顺序,配置相应服务等……
5.c,python,php等高级语言……
Linux书籍:www.cnblogs.com/notepi/arch… www.cnblogs.com/xiangzi888/…
1、入门篇:《LINUX权威指南》
2、《Linux与Unix Shell 编程指南》
3、应用编程:《unix环境高级编程》 + 《TCP/IP详解》 《Linux程序设计》《深入理解Linux内核》《深入理解LINUX网络内幕》
traceroute www.baidu.com 可用来查看数据包在提交到远程系统或者网站时候所经过的路由器的IP地址、跳数和响应时间。同样你必须链接到互联网才能使用这个命令。
常用命令:
history 列出最近执行过的 几条命令及编号 history|grep sshtb
more——分屏显示文件内容——more filename
find——使用匹配表达式查找文件——find . -name “*.c” -print open——使用默认的程序打开文件——open filename(open . 打开当前目录)
diff——比较并显示两个文件的差异——diff file1 file2
sed————非交互方式流编辑器——sed “s/red/green/g” filename
grep——在文件中按模式查找——grep “^[a-zA-Z]” filename
awk——在文件中查找并处理模式——awk ‘{print 111}’ filename
sort——排序或归并文件——sort -d -f -u file1
uniq——去掉文件中的重复行——uniq file1 file2
========================================================================================
linux下清空文件内容:
: > filename #其中的 : 是一个占位符, 不产生任何输出. > filename (文件大小被截为0字节)
echo /dev/null > filename cat /dev/null > filename (文件大小被截为0字节)
Linux top总结:top命令:
load average: 1.15, 1.42, 1.44 load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
可用内存计算: 第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存: 2320648+455544 +4217456 = 6.6GB。
时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
linux vim总结-linux vi总结
jingyan.baidu.com/article/482… 基础入门图解
1.vimtutor命令。vimtutor是vim使用入门教程。25到30分钟就可以入门。
vim + :打开文件,定位到最后一行。
[root@hsp ~]# vim + a.txt
vim三种模式:
- 命令模式(默认):刚进入vim的时候,默认就是 命令模式,可以复制行,删除行等。
- 输入模式: 按下『i, I, o, O, a, A, r, R』 可以输入内容。
- 末行模式: 输入『 : / ? 』 在最下边,除编辑模式,可以输入诸多管理员命令。
索索技巧: /用于搜索 按n想下继续搜索,N向上继续搜索。 ?word向上搜索
- 然後設置 ic 選項(ic就是英文忽略大小寫Ignore Case的首字母縮寫詞),即
輸入︰
:set ic
末行模式下:
: w filename (输入 「w filename」将文章以指定的文件名filename保存)
ZZ:保存并退出。
se nu 显示行号。
2.命令模式移动鼠标:
移动光标上下左右,也可以用上下左右键头。
行首行尾:
③行内跳转
0:绝对行首
^:行首第一个非空白字符
$:绝对行尾(=Shift+4)
④行间跳转
#G:跳转到第#行
G:最后一行
6.翻屏:
命令模式下
Ctrl+f:向下翻一屏
Ctrl+b:向上翻一屏
Ctrl+d:向下翻半屏
Ctrl+u:向上翻半屏
移动到文件最后一行: shift+g 移动到第一行gg
shift+a(进入编辑模式并且移动到行尾)
删除一行dd 删除n行:ndd 【10d 删除当前行开始的10行。】
在命令行模式中,可以直接输入ZZ保存内容。(不常用)
撤销和重做
u 撤销(Undo)
U 撤销对整行的操作
Ctrl + r 重做(Redo),即撤销的撤销。
执行shell命令
:!command
:!ls 列出当前目录下文件
:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。
:suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。
tomcat虚拟目录配置: server.xml 和
- 数据war包目录和 tomcat目录区分开
export CATALINA_HOME=/export/servers/tomcat8.0.30
export CATALINA_BASE=/export/home/tomcat/domains/ebs.plus.jd.com/server1
虚拟目录配置路径:/export/home/tomcat/domains/ebs.plus.jd.com/server1/conf/Catalina/localhost/ROOT.xml 需要修改docBase为你要部署应用的data目录,如下:
nginx配置:
1.nginx目录配置: cat /export/servers/nginx/conf/domains/ebs.plus.jd.com
sbin:下执行./export/servers/nginx/sbin/nginx -s reload 配置生效
server { listen 80; server_name ebs.plus.jd.com; #root /export/data/tomcatRoot/plus-cardadmin.plus.jd.com/; access_log /export/servers/nginx/logs/ebs.plus.jd.com/ebs.plus.jd.com_access.log main; error_log /export/servers/nginx/logs/ebs.plus.jd.com/ebs.plus.jd.com_error.log warn; location / { proxy_set_header Host proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:9019; } }
监控java线程数:
ps -eLf | grep java | wc -l
Linux端口占用:
#--查看哪个进程(29850,netstat -anp |grep 58094)占用58094端口
netstat -tlnp|grep 58094
tcp 0 0 :::58094 :::* LISTEN 29850/java
ps -ef|grep 29850 --查看29850进程在哪个目录下,是否可以关闭进程或kill -9 29850
#返回端口占用的进程id:7577
netstat -tlnp|grep 8000|awk '{print $7}'|awk -F '/' '{print $1}'
awk '{print $7}' 这句 得到的结果是 7577/python,然后使用-F 参数重新设定分隔符 取出第一个字段
监控java线程数:
ps -eLf | grep java | wc -l
监控网络客户连接数:linux端口查看
netstat -n | grep tcp | grep 侦听端口 | wc -l
#查看端口现在运行的情况【有不准确性】
ls -i:port #某个端口
ls -i:port1-port2 #
ls -i:1-1024 #查看端口1-1024运行情况
windows端口占用
- 第一步:cmd打开命令行窗口,执行命令:netstat -aon|findstr “1099”查找占用端口的进程。
-
第二步:根据pid,继续执行命令:taskkill -f -pid 12704关闭该进程。
监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l
top视图交互命令:
f或者F :从当前显示中添加或者删除项目。
F:选择显示的列。每一列都有一个对应字母a-z
f: 按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列(小写字母不显示列,大写字母则显示列-带有*号),最后按回车键确定。
o或者O :调整列显示顺序和列数据排序,例如内存CPU降序升序
o:按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
O:然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。设置完按回车返回界面。
i:忽略闲置和僵死进程。这是一个开关式命令。
q: 退出程序。
默认排序大写字母-更容易控制升序降序:
M : 根据驻留内存大小进行排序。
P:根据CPU使用百分比大小进行排序。
T: 根据时间/累计时间进行排序。
h 或?: 帮助
d’ 或‘s’: 设置显示的刷新间隔,输入了1,top将会每秒刷新。top命令默认在一个特定间隔(3秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。
linux ps总结:
ps -f -u root 所属用户的进程。多个用户名可以用逗号分隔。
ps -f -p 3150,7298,6544 指定多个进程id
ps aux --sort=-pcpu,+pmem '--sort排序进程列表,字段前面还可以跟上'-'或者'+'的前缀来相应地表示递减和递增排序。-pcpu:消耗cpu递减,+pmem:消耗内存递增
ps aux --sort=-pcpu | head -5 显示前5名最耗cpu多的进程
ps -o pid,uname,comm -C apache2 显示父进程的子进程,从apache进程fork出来的进程。 -o:结果显示列
ps --ppid 2359 使用apache2主进程的pid列出了所有的apache2的子进程
linux du,linux df文件夹和文件大小统计:
[yayug@yayu ~]$ df -h -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 3.9G 300M 3.4G 8% /
/dev/sda7 100G 188M 95G 1% /data0
/dev/sdb1 133G 80G 47G 64% /data1
/dev/sda6 7.8G 218M 7.2G 3% /var
/dev/sda5 7.8G 166M 7.2G 3% /tmp
/dev/sda3 9.7G 2.5G 6.8G 27% /usr
tmpfs 2.0G 0 2.0G 0% /dev/shm
[root@bsso yayu]# du -h --max-depth=1 work/testing --指定深入目录的层数
27M work/testing/logs
35M work/testing
linux执行sh文件:sh和./有什么区别?
2种方式:
./export/servers/zookeeper/zookeeper-3.4.12/bin/zkCli.sh sh /export/servers/zookeeper/zookeeper-3.4.12/bin/zkCli.sh
一、直接./加上文件名.sh,如运行hello.sh为./hello.sh【hello.sh必须有x权限】
二、直接sh 加上文件名.sh,如运行hello.sh为sh hello.sh【hello.sh可以没有x权限】
先 cd /bin,再 sh a.sh 它就报找不到路径。 ./执行确可以
sh a.sh,表示我使用sh来解释这个脚本,楼上已经演示了,可以不要执行权限;
如果我直接运行./a.sh,首先你会查找脚本第一行是否指定了解释器,如果没指定,那么就用当前系统默认的shell(大多数linux默认是bash),如果指定了解释器,那么就将该脚本交给指定的解释器
比如a.run文件内容是这个:因为文件中指明是python解析
#!/usr/bin/python print("This is Python script")
那么你如果运行./a.run,结果就是输出一行文字,但是如果你运行sh a.run,会报错(默认bash解析)
[feishu@localhost tmp] sh a.run a.run: line 2: syntax error near unexpected token "This is Python Script"' a.run: line 2: print("This is Python Script")'
如果你写的是一个shell脚本,而且脚本第一行没申明shell解释器,那么使用./a.sh和sh a.sh并没有什么区别
Linux top总结:top命令:
www.cnblogs.com/ggjucheng/a… linux top
www.jb51.net/LINUXjishu/… Linux 内存机制详解宝典
top //每隔5秒显式所有进程的资源占用情况
top -d 2 //每隔2秒显式所有进程的资源占用情况
top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
负载 load average: 1.15, 1.42, 1.44 load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果除以逻辑CPU的数量,结果高于5系统在超负荷运转。
可用内存计算: 第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存: 2320648+455544 +4217456 = 6.6GB。
时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
linux ps总结:
ps -f -u root 所属用户的进程。多个用户名可以用逗号分隔。
ps -f -p 3150,7298,6544 指定多个进程id
ps aux --sort=-pcpu,+pmem '--sort排序进程列表,字段前面还可以跟上'-'或者'+'的前缀来相应地表示递减和递增排序。-pcpu:消耗cpu递减,+pmem:消耗内存递增
ps aux --sort=-pcpu | head -5 显示前5名最耗cpu多的进程
ps -o pid,uname,comm -C apache2 显示父进程的子进程,从apache进程fork出来的进程。 -o:结果显示列
ps --ppid 2359 使用apache2主进程的pid列出了所有的apache2的子进程
(3)linux恢复删除文件 linux恢复文件
测试通过:
1.如果有其他的程序在使用这个文件,其他的地方删除了,是可以找到的,有可能恢复后的文件有乱码
当系统中的某个文件被意外删除了,只要这个时候系统中有进程正在访问这个文件,那么可以通过lsof 从/proc目录下恢复文件的内容
假如/var/log/messages文件被删了,恢复这个文件的方法:
首先使用lsof 查看当前是否有进程打开/var/log/messages文件,
#lsof |grep /var/log/messages
[root@localhost ~]# rm /var/log/messages
rm:是否删除普通文件 "/var/log/messages"?y
[root@localhost ~]# lsof |grep /var/log/messages
rsyslogd 5925 root 1w REG 8,2 4369 266184 /var/log/messages (deleted)
从上面的信息可以看到PID 5925(syslogd)打开文件的文件描述符为1,同时发现/var/log/messages已经被删除了。
因此可以通过/var/log/messages文件描述符来查看文件信息。
cat /pro/5925/fd/1 [root@localhost ~]# cat /proc/5925/fd/1 May 1208:04:11 localhost kernel: hpet1: lost 3 rtc interrupts May 1208:04:11 localhost kernel: hpet1: lost 6 rtc interrupts May 1208:04:11 localhost kernel: hpet1: lost 1 rtc interrupts May 1209:25:33 localhost kernel: usb 2-2.1: USB disconnect, device number 10 May 1209:25:33 localhost kernel: eth0: link down May 1209:25:33 localhost kernel: usb 2-2.1: new full speed USB device number 11 using uhci_hcd May 1209:25:33 localhost kernel: usb 2-2.1: New USB device found, idVendor=0e0f, idProduct=0008 May 1209:25:33 localhost kernel: usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 May 1209:25:33 localhost kernel: usb 2-2.1: Product: Virtual Bluetooth Adapter May 1209:25:33 localhost kernel: usb 2-2.1: Manufacturer: VMware May 1209:25:33 localhost kernel: usb 2-2.1: SerialNumber: 000650268328 May 1209:25:33 localhost kernel: usb 2-2.1: configuration #1 chosen from 1 choice
最后通过重定向的方法恢复被删除的/var/log/messages
cat /pro/5925/fd/1 >/var/log/messages
linux top视图交互命令:
f或者F :从当前显示中添加或者删除项目。
F:选择显示的列。每一列都有一个对应字母a-z
f: 按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列(小写字母不显示列,大写字母则显示列-带有*号),最后按回车键确定。
o或者O :调整列显示顺序和列数据排序,例如内存CPU降序升序
o:按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
O:然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。设置完按回车返回界面。
i:忽略闲置和僵死进程。这是一个开关式命令。
q: 退出程序。
默认排序大写字母-更容易控制升序降序:
M : 根据驻留内存大小进行排序。
P:根据CPU使用百分比大小进行排序。
T: 根据时间/累计时间进行排序。
h 或?: 帮助
d’ 或‘s’: 设置显示的刷新间隔,输入了1,top将会每秒刷新。top命令默认在一个特定间隔(3秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。
linux du,linux df文件夹和文件大小统计:linux文件大小
[yayug@yayu ~]$ df -h -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 3.9G 300M 3.4G 8% /
/dev/sda7 100G 188M 95G 1% /data0
/dev/sdb1 133G 80G 47G 64% /data1
/dev/sda6 7.8G 218M 7.2G 3% /var
/dev/sda5 7.8G 166M 7.2G 3% /tmp
/dev/sda3 9.7G 2.5G 6.8G 27% /usr
tmpfs 2.0G 0 2.0G 0% /dev/shm
[root@bsso yayu]# du -h --max-depth=1 work/testing --指定深入目录的层数
27M work/testing/logs
35M work/testing
查看linux文件目录的大小和文件夹包含的文件数
du -sh xmldb //当前目录下某个文件夹或文件的大小(统计每个目录的容量)
du -smh * | sort -n //统计当前目录大小,并按大小排序
du -sk * | sort -n
du -sk * | grep guojf //看一个人的大小
du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字
查看此文件夹有多少文件 ///* 有多少文件
du xmldb/
du xmldb///* |wc -l
linux定时任务at,batch,cron总结
1、at可以使用的options还有:
#at -d 作业号 //删除计划任务
#at -l //列出计划任务
默认情况下,任何用户都可以使用at服务,但这样是不安全的。
如果系统中存在at.allow,则只有列在文件中的用户才可以使用at服务。
如果系统中存在at.deny,则列在文件中的用户不可以使用at服务,其他用户可以
2、batch
3、crond :
它不同于以上命令的原因就是它是一个“周期性”执行的命令,就是循环执行。另外crond 是一个服务,所以我们在使用之前要检查其是否正在运行
#service crond status //检测crond服务是否运行的命令
crontab –e //开始编辑定义自己的任务执行计划
crond -r //删除自己定义的执行计划
crond -l // 列出定义的计划任务
crond -e redhat //帮助redhat用户制定任务计划
4、anacron:crond有一个缺点就是它是为服务器设计的命令,所以它默认就是认为系统会7X24小时开机,如果在计划的时间点关机了任务就不会执行。
anacron配置:
Period 超出时间
delay 开机后延迟多久执行
job-identifier 任务描述
command 要执行的命令
linux日志:
1、目录 /var/log
dmesg(包括了所有内核层缓冲区的消息),secure(记录要求用户认证的连接请求),
messages(系统级信息),和 wtmp(记录了所有用户的登录、登出)
linux rm总结-慎重使用删除:
*rm -rf .txt logs 级联删除文件和目录 不使用-r只能删除目录下的文件,不能级联删除子目录
删除当前目录下所有 *.txt文件,除了test.txt
rm ls *.txt|egrep -v test.txt
或者 rm ls *.txt|awk '{if($0 != "test.txt") print $0}'
或者 rm find . -name *.txt | egrep -v ‘(test.txt|fff.txt|ppp.txt)'
#删除时排除多个文件
rm ls *.txt|egrep -v '(test.txt|fff.txt|ppp.txt)'
"rm -rf 文件名 删除文件后 磁盘空间并没有变化", 这种无效日志类的文件,我也遇到过, 操作后发现空间还是持续被占用,除非重启进程才可以!
后来想到一个骚操作: echo "" > 文件名 # 这样操作(覆盖文件内容)后空间被释放了
11 */4 * * * /bin/bash /home/logdelete_vm.sh > /dev/null 2>&1 & 每4个小时清理一次日志
linux grep+linux egrep+linux fgrepf:grep、fgrep 和 egrep 命令
grep 命令一次只能搜索一个指定的模式;
egrep 命令检索扩展的正则表达式(包括表达 式组和可选项);在 grep提供的正则表达式元字符集的基础上增加了更多的元字符。不过,egrep 不支持 grep 的()标记匹配字符和{}重复的功能。
fgrep 命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
egrep支持元字符总结:
[a-z]+A 【+ 匹配1个或多个前一字符】 [a-z]+ove’ 匹配跟在一或多个小写字母后面的ove。将找出move,love等
[a-z]?A 【? 匹配0个或1个前一字符】 lo?ve’ 匹配后面跟一个或不跟字母o的l.将找到love或lve
[a-z]|[a-z] a|b 匹配a或b ‘love|hate’ 匹配love和hate这两个表达式之一
abc(d|e) () 字符组 ‘love(able|ly)(ov)+’ 匹配loveable或lovely加上ov的一次或多次出现
grep [-acinv] [--color=auto] '搜寻字符串' filename
grep --color "plusxq12" logs/catalina.out
tail -1000 logs/catalina.out | grep --color "plusxq12" #最后1000行日志中搜索字符串并显示颜色
Linux安装软件的方式有几种:
1、Redhat和Fedora的软件安装命令是rpm
2、ubuntu中的apt的命令
3、yum 适用系统:CentOS+Fedora+Redhat RHEL
linux安装软件
Linux Nginx安装
/usr/local/etc/nginx/ nginx安装本地mac
Linux rabbitMq
juejin.cn/post/684490… linux安装rabbitMq
单独下载此文件 rabbitmq-server-generic-unix-3.8.0.tar.xz,并拷贝到 brew 的目录下
$ brew --cache /Users/everlose/Library/Caches/Homebrew
$ cp /Users/everlose/Downloads/rabbitmq-server-generic-unix-3.8.0.tar.xz /Users/everlose/Library/Caches/Homebrew
1.1.1 Rocketmq总结
- 顺序消息是否支持集群消费和广播消费?
- 顺序消息暂时仅支持集群消费模式,不支持广播消费模式。
// 顺序消息消费失败进行重试前的等待时间,单位(毫秒),取值范围: 10毫秒~30,000毫秒。
properties.put(PropertyKeyConst.SuspendTimeMillis,"100");
// 消息消费失败时的最大重试次数。
properties.put(PropertyKeyConst.MaxReconsumeTimes,"20");
// 每次获取最大消息数量
properties.setProperty(PropertyKeyConst.MAX_BATCH_MESSAGE_COUNT, String.valueOf(mqConfig.getSyncAccountStatusLimit()));
properties.setProperty(PropertyKeyConst.ConsumeThreadNums, String.valueOf(1));
// 集群订阅方式(默认)。 所发送消息n条m个节点只消费一次。
// properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.CLUSTERING);
// 广播订阅方式。 n条消息 被n个节点都消费一次。
// properties.put(PropertyKeyConst.MessageModel, PropertyValueConst.BROADCASTING);
Linux yum总结
blog.csdn.net/wuwenxiang9… www.cnblogs.com/chuncn/arch…
1、基本参数:
-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)
check Check for problems in the rpmdb
check-update 检查是否有软件包更新
clean 删除缓存的数据
deplist 列出软件包的依赖关系
distribution-synchronization Synchronize installed packages to the latest available versions
downgrade downgrade a package
erase 从系统中移除一个或多个软件包
groupinfo 显示组的详细信息
groupinstall 向系统中安装一组软件包
grouplist 列出可安装的组
groupremove 从系统中移除一组软件包
help 显示用法信息
history Display, or use, the transaction history
info 显示关于软件包或组的详细信息
install 向系统中安装一个或多个软件包【yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断】
list 列出一个或一组软件包
load-transaction load a saved transaction from filename
makecache 创建元数据缓存
provides 查找提供指定内容的软件包
reinstall 覆盖安装一个包
repolist 显示已配置的仓库
resolvedep 判断哪个包提供了指定的依赖
search 在软件包详细信息中搜索指定字符串
shell 运行交互式的 yum 外壳
update 更新系统中的一个或多个软件包
upgrade 更新软件包同时考虑软件包取代关系
version Display a version for the machine and/or available repos.
软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
适用系统: Redhat RHEL, CentOS & Fedora。 类似ubuntu中的apt
2、Yum 有以下特点:
- 可以同时配置多个资源库(Repository)
- 简洁的配置文件(/etc/yum.conf)
- 自动解决增加或删除rpm包时遇到的倚赖性问题
3、yum命令总结
yum-y install httpd mlocate 安装httpd和mlocate。 注意: 字符 y 表示绕过执行下载和安装前的确认提示。如果需要提示,你可以不用它。
例如,在 64 位系统上,yum install package将安装包的x86_64版本,而 yum install package.x86(如果有的话)将安装 32 位的。
自动搜索最快镜像插件: yum install yum-fastestmirror
安装yum图形窗口插件: yum install yumex
查看可能批量安装的列表: yum grouplist --显示已安装的组+Installed Language Groups:+有效的组:
yum groupinstall "Games and Entertainment" --包名带有空格加双引号,因为linux下面遇到空格会认为文件名结束了
yum --exclude=package kernel* update 升级所有软件包,除了升级内核
yum provides httpd 想知道httpd这个软件是干吗的
yum clean all 清理空间: 每安装一个软件包,YUM都是先下载一个RPM软件包然后再安装,安装完不会自动删除,占很多空间的。
4、yum配置文件: 通常在/etc/yum.conf
yum的一切配置信息在yum.con的配置文件中,这是整个yum系统的重中之重。
#yum search log 将搜索安装的软件库中名字和摘要与该词(log)类似的软件,而
#yum search all log 也将在包描述和网址中寻找寻找相同的关键字。
一旦搜索返回包列表,您可能希望在安装前显示一些信息。这时 info 选项派上了用场: yum info logwatch
当你知道一个可执行文件的名称,如 ps2pdf,但不知道那个包提供了它?你可以通过 yum whatprovides “/[executable]”找到: #yum whatprovides “/ps2pdf”
5、yum安装:
@1、下载yum.rpm包,rpm -ivh yum-* 注意:yum和yum-fastestmirror相互依赖,所以同时安装即可。
@2、下载yum的配置源
wget docs.linuxtone.org/soft/lemp/C… 下载到 /etc/yum.repos.d/ 目录下面
6、yum配置:
Linux RPM:又名RPM包管理器,原意是 RedHat 软件包管理器)
rpm -Uvh package.rpm -Uvh 表明如果这个包没有安装就安装它,如果已存在就尝试更新。 这里-U表示更新、-v表示显示详细输出,用-h显示进度条。相当于rpm -qa |grep package.rpm + rpm -ivh package.rpm
rpm -qa 列出所有安装的软件包
rpm –e 删除软件包
linux cp总结:
单独cp命令只复制文件,cp -r =复制文件+目录, 规则:如果目标目录有则覆盖。
参数:
-a :相当于 -pdr 的意思; # 如果想要将文件的所有属性都一起复制,可以加上 -a。 cp -a /var/log/wtmp wtmp_2
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination !
-v :显示命令执行细节
- cp /usr/java/tomcat6.0.29/* /home/ubuntu/Desktop/apache-tomcat-6.0.29 复制目录下的所有文件(不包括子目录)到某个目录( apache-tomcat-6.0.29 没有则自动创建 *)下 /
- [root@mah01 mah]# cp test/* test1
cp: omitting directory test/upload 这个提示表示只是复制了test目录下的文件,而upload文件夹没有被复制
- cp ROOT/* .. 复制目录下的所有文件(不包括子目录)到上一级目录【级联使用-r/R】
cp -R /home/usera/* /mnt/temp 级联复制usera下的所有目录(包括子目录)到/mnt/temp目录
问题:但是这样有一个问题,/home/usera下的隐藏文件都不会被拷贝,子目录下的隐藏文件倒是会的
- cp -r /root/test . cp -r /root/test/ . 两个效果相同: 复制指定目录到当前目录\cp不提示是否覆盖已有文件,
\cp abc.txt /home \cp不提示是否覆盖已有文件,直接复制abc.txt 到/home 里面,不管/home 里面之前是否有这个文件都会直接覆盖,不再出现覆盖提示!
[root@linux tmp]# cp -i ~/.bashrc bashrc 把.bashrc 复制到 /tmp 下,并更名为 bashrc
[root@linux tmp]# cp -u ~/.bashrc /tmp/bashrc 若 ~/.bashrc 比 /tmp/bashrc 新才复制过来【未验证通过,提示是否覆盖 cp -uf t1/test.sql t2】
这个 -u 的特性,是在目标档案与来源档案有差异时,才会复制的。
所以,比较常被用于『备份』的工作当中喔! ^_^
linux ls ll特殊用法 ll /tmp 在当前目录可以查看某个目录列表而不用切换目录查看
[root@mah01 mah]# ll test 查看mah目录下(当前)test目录列表
ls -l | grep "^d" 只列出子目录 ls -l | grep "^-" 列出文件
ll打印出的内容颜色:
-
蓝色-->目录
-
绿色-->可执行文件
-
红色-->压缩文件
-
浅蓝色-->链接文件
-
灰色-->其他文件
linux ln软连接硬链接
linux软连接,linux硬链接
ln f1 f2 #创建f1的一个硬连接文件f2,f2和f1的inode节点相同,ll -i参数显示文件的inode节点信息
ln -s f1 f3 #创建f1的一个符号连接(软连接-快捷方式)文件f3
ln -s /export/home/tomcat/domains/soa.plus.jd.com/server1/bin/start.sh /export/data/tomcatRoot/soa.plus.jd.com/start.sh
ln -s /export/home/tomcat/domains/soa.plus.jd.com/server1/bin/stop.sh /export/data/tomcatRoot/soa.plus.jd.com/stop.sh
ln -s /export/home/tomcat/domains/ebs.plus.jd.com/server1/logs /export/data/tomcatRoot/ebs.plus.jd.com
ln -s /export/home/tomcat/domains/ebs.plus.jd.com/server1/bin/start.sh /export/data/tomcatRoot/ebs.plus.jd.com/start.sh
linux版本总结:linux发行版总结: www.cnbeta.com/articles/11…
1、分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。 商业版本以Redhat为代表,开源社区版本则以debian为代表
blog.csdn.net/educast/art… CentOS、Ubuntu、Debian三个linux比较异同
对于初学者,我们建议采用CentOS或Debian,这两种系统都能在配置较低的VPS上流畅运行。但是如果VPS配置太低(OPENVZ内存在128M以下,或者XEN架构内存在192M以下),建议采用Debian;否则建议采用CentOS,以获取更多的在线帮助与支持,让自己入门更轻松。
CentOS、Ubuntu、Debian三个linux都是非常优秀的系统,开源的系统,也分付费的商业版和free免费版本。
CentOS与Debian哪个好?
从安全上说CentOS>Debian
从性能下降说CentOS>Debian
硬件支持特别是虚拟化CentOS>Debian
默认内核配置性能测试Debian>CentOS
发开环境通用性Debian>CentOS
最后,如果你是开发者和狂热的性能追求者或者是VPS中的服务器建议用Debian,如果是VPS供应商、电子商务网站,要求很高的稳定性、安全性,则建议采用CentOS。
2、红旗linux、fedora、ArchLinux,OpenSUSE
OpenBSD、Solaris、IBM OS2
Slackware Linux,Gentoo Linux和FreeBSD是需要经过大量的学习后,才可以有效地加以利用的更先进的发行版。
Ubuntu(Ubuntu是基于Debian的发行版), Linux Mint 和PCLinuxOS 被认为是不必掌握其复杂性的Linux 新用户最容易上手的。
openSUSE , Fedora ,Debian GNU / Linux和Mandriva Linux操作系统可以分为“中间道路”的发行版。
Fedora:Fedora的方向,仍然主要由红帽公司控制。以社区为导向的分配给“Linux的爱好者”设计的核心。
我们使用 Debian 作为服务器软件,后来转向了CentOS,主要原因如下:
1、CentOS/RHEL的生命周期是7年,基本上可以覆盖硬件的生命周期,也就意味着一个新硬件安装以后,不用再次安装操作系统。要知道重新折腾一个生产机是很麻烦而且有风险的事情。
[2012.2.1]今天刚刚收到红帽子的通知邮件,RedHat 5, RedHat 6的生命周期,延长到10年,太牛叉了。这个对企业用户很重要。
而Debian的生命周期是不固定的,一般新版本发布以后,上个版本再维护18个月。而Debian的版本发布时间间隔不稳定,经常会延期。综合起来一个版本的生命周期一般在3~4年。
[2014.4.24]Debian 宣布对Squeeze(6.0),提供5年的LTS长期支持。 Ubuntu的LTS版生命周期是5年。
如果你选用了 Debian 或者 Ubuntu作为服务器,等生命周期过了以后,就没有安全补丁,你的服务器就会裸奔或者需要重新安装系统。
2、RedHat是一个值得尊敬的开源公司,长期以来Linux内核RedHat的贡献程度都是最多的。可以这么说,如果一个Linux方面的问题,RedHat搞不定,那么也很少有其他公司可以搞定了。
3、CentOS/RHEL对硬件的支持很好,主流硬件厂商早就将服务器拿过去测试,一般不存在硬件的兼容性问题。
而Debian就麻烦了,由于有版权上的考虑和代码纯洁性上的洁癖,一些硬件驱动和软件被删掉了,导致安装过程有问题。比如 Dell 服务器上,大量使用的网卡 BroadCom,就驱动不了,安装了以后,网络起不来。
4、大量商业软件,比如 Oracle ,都是针对 Redhat认证的,有大量的帮助文档和使用说明,有良好的技术支持。出了问题,也容易在网上找到类似的答案和经验。
5、CentOS 是RedHat的克隆版,如果需要可以随时平滑切换到 RedHat,从而享受RedHat的服务支持。要知道厂商的服务,是最后一道防火墙,如果你给一个大客户做方案,他们一般会倾向选用商业服务。万一出了什么问题,还有Redhat可以求助,或者有一个RedHat可以承担责任.
6、如果你是一个工程师,熟悉了 CentOS/RedHat ,找工作更加容易。如果你是一个企业老板,相对也容易招聘到熟悉CentOS/RedHat的工程师。RHCE的培训,也相对较完善,认同程度高。
7、CentOS/RHEL 的批量安装更加方便
在机房,使用kickstart + PXE安装,给客户,使用定制的kickstart光盘,一键安装,一般在5分钟左右就可以安装完。
CentOS ip地址配置:DNS配置
1、CentOS系统 修改DNS
修改对应网卡的DNS的配置文件
vi /etc/resolv.conf
修改以下内容
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
2、CentOS系统修改网关
修改对应网卡的网关的配置文件[root@centos]# vi /etc/sysconfig/network
修改以下内容
NETWORKING=yes(表示系统是否使用网络,一般设置为yes。如果设为no,则不能使用网络,而且很多系统服务程序将无法启动)
HOSTNAME=centos(设置本机的主机名,这里设置的主机名要和/etc/hosts中设置的主机名对应)
GATEWAY=192.168.1.1(设置本机连接的网关的IP地址。例如,网关为10.0.0.2)
3、CentOS系统修改IP地址
修改对应网卡的IP地址的配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改以下内容
DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址
BROADCAST=192.168.0.255 #对应的子网广播地址
HWADDR=00:07:E9:05:E8:B4 #对应的网卡物理地址
IPADDR=12.168.1.2 #如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0 #网卡对应的网络掩码
NETWORK=192.168.1.0 #网卡对应的网络地址
ONBOOT=yes #系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备
4、重新启动网络配置
service network restart或/etc/init.d/network restart
修改 IP 地址
即时生效:
ifconfig eth0 192.168.0.2 netmask 255.255.255.0
启动生效:
修改 /etc/sysconfig/network-scripts/ifcfg-eth0
修改网关 Default Gateway
即时生效:
route add default gw 192.168.0.1 dev eth0
启动生效:
修改 /etc/sysconfig/network
修改 DNS
修改/etc/resolv.conf
修改后可即时生效,启动同样有效
修改 host name
即时生效:
hostname centos1
启动生效:
修改/etc/sysconfig/network
CentOS系统中,我们就完成了DNS、网关、IP地址的修改,重新启动网络配置后,我们就可以看到效果了。
linux定时任务:crontab总结
www.cnblogs.com/peida/archi… corntab总结 s10
www.runoob.com/linux/linux… s7
at 命令是针对仅运行一次的任务
crontab 周期任务
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
创建任务 为了列出crontab文件,可以用:
- $ crontab -l 列出所有定时任务文件
- 编辑任务: crontab -e 编辑任务
/etc/crontab文件包括下面几行:
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
[root@localhost ~]#
实例1:每1分钟执行一次command
* * * * * command
实例2:每小时的第3和第15分钟执行
3,15 * * * * command
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
实例5:每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
* */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
实例13:每月的4号与每周一到周三的11点重启smb
0 11 4 * mon-wed /etc/init.d/smb restart
实例14:一月一号的4点重启smb
0 4 1 jan * /etc/init.d/smb restart
实例15:每小时执行/etc/cron.hourly目录内的脚本
01 * * * * root run-parts /etc/cron.hourly
run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行某个脚本名,而不是目录名了
创建任务
不妨创建一个名为 cron的文件,其中是用户名,例如, davecron。在该文件中加入如下的内容。
(put your own initials here)echo the date to the console every
15minutes between 6pm and 6am
0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console
$ crontab davecron
现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。
同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。
备份任务列表:对crontab文件做一备份:
HOME/mycron
这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。
4). 删除crontab文件:crontab -r
要删除crontab文件,可以用:
二、crond服务
安装crontab:
yum install crontabs
服务操作说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看crontab服务状态:
service crond status
手动启动crontab服务:
service crond start
查看crontab服务是否已设置为开机启动,执行命令:
ntsysv
加入开机自动启动:
chkconfig –level 35 crond on
crontab语法
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
说明:
-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
参数说明:
- -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
- -r : 删除目前的时程表
- -l : 列出目前的时程表
调度周期-时间格式如下:
f1 f2 f3 f4 f5 program
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
执行注意事项
- 新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
- 当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
- 千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
- 在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’。
脚本无法执行问题-环境变量问题
例如:20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh
如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。
解决方法:
- 1、所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。
- 2、在 shell 脚本开头使用以下代码:
- #!/bin/sh
- . /etc/profile
- . ~/.bash_profile3
在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,
linux运维工程师:
blog.jobbole.com/87542/ 运维10技能
blog.jobbole.com/22838/ 几种脚本语言简介
blog.jobbole.com/89975/ 李想十六年的创业分享
1、对工程师提出了新的挑战:去IOE、服务器集群、大数据、虚拟化、运维开发、网络安全;从企业内部网络环境组建到大型的云计算中心,网络是整个IT行业的基石。
达内Linux云计算课程涵盖Windows Server 2008系统管理、计算机网络、高级Cisco路由与交换技术、Linux系统管理、Linux网络服务、Linux安全应用、MySQL数据库管理、Linux Shell脚本编程、Linux高级运维、Linux集群与存储、Linux监控、Linux虚拟化、Python运维脚本开发、OpenStack云计算等热点技术及企业全真实战项目。
2、红帽认证: 红帽认证管理员(RHCSA),红帽认证工程师(RHCE),红帽认证架构师(RHCA)
职位要求:
1、数据库: 主流数据库安装使用配置编写。 MS SQL SERVER数据库、T-SQL语句、存储过程及数据库管理。
2、熟悉MongoDB、Redis、MySQL的使用
3、自动化脚本: 包括:shell/python编程。安装和配置自动化监控和维护服务。
4、系统实施运维能力。
5、系统灾备,容灾备份,
Linux命令帮助,linux帮助命令:获取Linux命令帮助的六种方法
-
你用man 或--help 或者info就可以 比如查看 adduser你就输入
-
man adduser 这个很全 而且有例子
-
adduser --help 这个告诉你一些常用参数
-
info adduesr
man命令语法
[]:可选内容
<>:必须给出内容
a|b|c:多选一
…:可以有多个
-abc 表示三个参数(或任何二个)的混合使用
linux查找命令:linux查找文件方法
which/type:根据PATH环境变量的设置去查找“执行文件”。也就是在一些特点的目录中查找。
whereis/locate 根据文件数据库来查找文件,而文件数据库的更新不是实时的,默认是每天一次,所以很可能才安装或卸载的就找不到。但是可以通过updatedb命令去手动更新整个数据库文件(这个命令是根据updatedb.conf配置文件的设置去执行的)。优点是比find快。
find 通过直接查找硬盘来查找文件。(我猜似乎可以找到所有的文件,在我这还未得到验证。)
Linux scp:主要是在不同的Linux系统之间(主机之间)来回copy文件
文件传输总结: www.cnblogs.com/wanqieddy/a…
- 使用scp、rsync或者rs/sz
MacBook上的rz和sz 配置起来比较麻烦 这里就不说了 - FinalShell下载地址 点击下载
- Termius官方免费版 点击下载 支持手机端的Android和iOS
- 跨平台:electerm是一款基于electron开发的SSH/SFTP客户端
Linux下scp的用法 :scp就是secure copy,基于ssh登录。一个在linux下用来进行远程拷贝文件的命令。
有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过简单的scp命令便可达到目的。
-
从远处复制文件到本地目录 scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
-
上传本地目录到远程机器指定目录 scp -r /opt/soft/mongodb root@192.168.120.204:/opt/soft/scptest
-
scp -r /home/administrator/test/ root@192.168.1.100:/root/ --拷贝目录/home/administrator/test/到远程ip+目录
-
scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root (然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了),复制目录加参数 -r 即可
-
scp root@172.19.2.75:/home/root/full.tar.gz /home/daisy/full.tar.gz --从远程主机复制文件到本机
-
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3 --远程地址支持域名 scp -r www.cumt.edu.cn:/home/root/o… /home/space/music/
-
scp /home/appserver/Product_Agent/dsf_boss3.0/logs/juli.2015-08-25.log root@192.168.0.248:/home/appuser root@192.168.0.248s password: --输入root密码 /root/.bashrc: line 5: return: echo: numeric argument required juli.2015-08-25.log 100% 14KB 14.3KB/s 00:00
-
-
[root@localhost appuser]# ll 总用量 20 drwxr-xr-x 3 root dev 4096 8月 13 17:12 develop -rw-r--r-- 1 root dev 14677 8月 28 14:26 juli.2015-08-25.log
-
一、将本机文件复制到远程服务器上
#scp /home/administrator/news.txt root@192.168.6.129:/etc/squid
/home/administrator/ 本地文件的绝对路径
news.txt 要复制到服务器上的本地文件
root 通过root用户登录到远程服务器(也可以使用其他拥有同等权限的用户)
192.168.6.129 远程服务器的ip地址(也可以使用域名或机器名)
/etc/squid 将本地文件复制到位于远程服务器上的路径
如图通过root用户登录远程服务器,输入yes表示同意建立ssh连接
按提示输入root用户的密码
如图所示建立连接后开始传输文件,显示百分比、实际时间和传送速度等信息
二、将远程服务器上的文件复制到本机
#scp remote@www.abc.com:/usr/local/sin.sh /home/administrator
remote 通过remote用户登录到远程服务器(也可以使用其他拥有同等权限的用户)
www.abc.com 远程服务器的域名(当然也可以使用该服务器ip地址)
/usr/local/sin.sh 欲复制到本机的位于远程服务器上的文件
/home/administrator 将远程文件复制到本地的绝对路径
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -P 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator -P port 注意是大写的P, port是指定数据传输用到的端口号
scp -p 1882 /home/appserver/Product_Agent/dsf_boss3.0/logs/juli.2015-08-25.log appuser@106.37.206.154:/home/appuser
scp -P 1882 appuser@106.37.206.154:/home/appuser/h.java /home/appuser
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。
linux文件传输: 不同的Linux之间copy文件常用有3种方法:
第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以在另外一台机器使用ftp的client程序来进行文件的copy。
第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。
第三种就是利用scp命令来进行文件复制。
三种方法,一是ftp,二是wget /fetch 三是,rsync。 大型数据迁移用rysync,其次用fetch/wget ,最次是ftp,最慢是ftp.
scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
linux命令总结-命令大全
[root@centos ~]# rpm -qa | grep vsftpd --先检查CentOS系统是否安装了FTP服务
[root@centos ~]#yum -y install vsftpd --安装vsftpd
[root@centos ~]#chkconfig vsftpd on
[root@centos ~]# ifconfig
inet addr后面的ip就是系统的ip地址
文字编辑器,比如nedit、kedit、emacs、vi等来编写我们的shell程序
cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut –b 5-9
file somefile: 得到文件类型
read var: 提示用户输入,并将输入赋值给变量。
linux定时任务,cron crontab 调度器的写法和crontab文件
linux zip总结
:-d 从 压缩文件内删除指定的文件
zip test1.zip test.MYI #压缩某个文件
压缩目录:
zip -r test.zip ./* zip report7063.zip report7063 -r (把-r写后面也可以) 将当前目录下的所有文件和文件夹全部压缩成test.zip文件,-r表示递归压缩子目录下所有文件 */
打包目录 #注意打包的目录结构和解压目录结构
zip test2.zip test2/* 打包test2下的文件,不包括文件夹
zip test2.zip test2 test2下的目录和文件都没有打包进去,想要打包全部用-r
打包时指定压缩率为8
zip test2.zip -8 test.MYI
zip -d test1.zip test.MYI 删除压缩文件test1.zip中的文件或目录,注意:不能删除某个子目录
zip -m test1.zip test. MYI 向压缩文件中test1.zip中添加test. MYI文件
zip -r DSF_MSS-3.0.0_$SVN_REVISION.zip * -x WEB-INF/classes/app-config.properties DSF_Merchant-3.0.0.war 打包时去除当前路径下的两个文件
zip test3.zip tests/* -x tests/ln.log tests 压缩文件时排除某个文件或目录(不压缩到zip中)
zip -r test.zip test -x test/conf.properties -D test/upload --这样不能保证压缩包中不包括upload目录内容。只是不建立该目录,目录下的文件是打包在zip里的
[root@mah01 mah]# zip -r test.zip test -x test/conf.properties -D test/upload
adding: test/upload/20151012/1444648118870.png (deflated 3%)
adding: test/upload/20151013/1444700086280.png (deflated 3%)
linux unzip www.hangge.com/blog/cache/…
unzip test.zip 将压缩文件text.zip在当前目录下解压缩。覆盖已有文件。
unzip -n test.zip -d /tmp 将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。 (-n 解 压缩时不要覆盖原有的文件)
unzip -o test.zip -d tmp/ (覆盖原先的文件)
unzip -v test.zip 查看压缩文件目录,但不解压。
[root@GitLab tmp]# unzip -v new.zip Archive: new.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 389 Defl:N 329 15% 10-01-2016 04:35 5f2f2930 gitlab_key_file20161001-2668-1eu44mv 7501 Stored 7501 0% 10-01-2016 06:43 d3deb9a3 RackMultipart20161001-8364-1ldbh6x 0 Stored 0 0% 09-25-2016 23:25 00000000 yum.log 323 Defl:N 211 35% 10-01-2016 03:28 4d9e15d3 yum_save_tx-2016-10-01-03-280Ma56P.yumtx -------- ------- --- ------- 8213 8041 2% 4 file
更新xxx.zip里面的yyy文件
zip -u xxx.zip yyy
解压xxx.zip里面的yyy文件
unzip xxx.zip yyy
unzip mydata.zip -d mydatabak 把/home目录下面的mydata.zip解压到mydatabak目录里面
解压当前目录下的所有zip文件
unzip "*.zip"
ls *.zip | xargs -n1 unzip
rz/sz安装和使用
linux rz,linux sz:rz/sz通过Zmodem协议传输数据。rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具
sz:将选定的文件发送(send)到本地机器,也可以是多个文件
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive),可以是多个文件
1、安装: Linux上rz/sz这两个小工具安装lrzsz-x.x.xx.rpm即可。
(1)编译安装
root 账号登陆后,依次执行以下命令:
cd /tmp
tar zxvf lrzsz-0.12.20.tar.gz && cd lrzsz-0.12.20
./configure && make && make install
上面安装过程默认把lsz和lrz安装到了/usr/local/bin/目录下,现在我们并不能直接使用,下面创建软链接,并命名为rz/sz:
cd /usr/bin
ln -s /usr/local/bin/lrz rz
ln -s /usr/local/bin/lsz sz
(2)yum安装
root 账号登陆后执行以下命令:
yum install -y lrzsz
2、语法: rz:rz -be
SecureCRT就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到当前目录 【xshell工具可以设置下载和上传目录】
注意:单独用rz会有两个问题:上传中断、上传文件变化(md5不同),解决办法是上传是用rz -be,并且去掉弹出的对话框中“Upload files as ASCII”前的勾选。
-b binary 用binary的方式上传下载,不解释字符为ascii
-e 强制escape 所有控制字符,比如Ctrl+x,DEL等
3、sz file1 file2 就是发文件到windows上(保存的目录是可以配置) 比ftp命令方便多了,而且服务器不用再开FTP服务了
sz dir/* 下载dir目录下的所有文件,不包含dir下的文件夹
Linux关机之前:
1、观察系统的使用状态:
who:看目前有谁在在线,
netstat -a 网绚的联机状态
ps -aux :执行的程序
linux定时关机,linux shutdown命令
[root@www ~]# shutdown -h now 立刻关机,其中 now 相当亍时间为 0 的状态
[root@www ~]# shutdown -h 20:25 系统在今天的 20:25 分会关机,若在 21:25 才下达此挃令,则隔天才关机
[root@www ~]# shutdown -h +10 系统再过十分钟后自劢关机
[root@www ~]# shutdown -r now 系统立刻重新启劢
[root@www ~]# shutdown -r +30 'The system will reboot' 再过三十分钟系统会重新启劢,幵显示后面的讯息给所有在在线的使用者
[root@www ~]# shutdown -k now 'This system will reboot' 仅发出警告信件的参数!系统幵丌会关机啦!吓唬人!
linux关机:
shutdown -h now + poweroff+init 0
shutdown 可以依据目前已启劢的朋务来逐次关闭各朋务后才关机;
halt 即能够在丌理会目前系统状况下, 迚行硬件关机的特殊功能!
2、Linux重启: sync; sync; sync; reboot
执行多个命令 &&来连接
chgrp testing install.log
chgrp: invalid group name ‘testing’ <== 发生错诨讯息啰~没找到这个群组
linux chown
[root@www ~]# chown bin install.log 将 install.log 的拥有者改为 bin 这个账号:
chown root:root install.log 将 install.log 的拥有者不群组改回为 root
chown .sshd install.log』 只修改群组
什么情况下修改档案拥有者和群主: 复制行为(cp)会复制执行者的属性与权限和原用户一致。
3、Linux 共有七种执行等级:
-
run level 0:关机
-
run level 3:纯文本模式
-
run level 5:吨有图形接口模式
-
run level 6:重新启劢
我推荐的发行版如下: linux发行版
1、UBUNTU 适合纯菜鸟,追求稳定的官方支持,对系统稳定性要求较弱,喜欢最新应用,相对来说不太喜欢折腾的开发者。
2、Debian,相对UBUNTU难很多的发行版,突出特点是稳定与容易使用的包管理系统,缺点是企业支持不足,为社区开发驱动。
3、Arch,追逐时尚的开发者的首选,优点是包更新相当快,无缝升级,一次安装基本可以一直运作下去,没有如UBUNTU那样的版本概念,说的专业点叫滚动升级,保持你的系统一定是最新的。缺点显然易见,不稳定。同时安装配置相对Debian再麻烦点。
4、Gentoo,相对Arch再难点,考验使用者的综合水平,从系统安装到微调,内核编译都亲历亲为,是高手及黑客显示自己技术手段,按需配置符合自己要求的系统的首选。
5、Slackware与Gentoo类似。
6、CentOS,社区维护的RedHat的复刻版本,完全使用RedHat的源码重新编译生成,与RedHat的兼容性在理论上来说是最好的。如果你专注于Linux服务器,如网络管理,架站,那么CentOS是你的选择。
7、LFS,终极黑客显摆工具,完全从源代码安装,编译系统。安装前你得到的只有一份文档,你要做的就是照文档你的说明,一步步,一条条命令,一个个软件包的去构建你的Linux,完全由你自己控制,想要什么就是什么。如果你做出了LFS,证明你的Linux功底已经相当不错,如果你能拿LFS文档活学活用,再将Linux从源代码开始移植到嵌入式系统,我敢说中国的企业你可以混的很好。