工作中,linux下经常用到一些操作,以下为记录。以ubuntu为主。1、查看 当前目录大小 du -shm ./* #按照m显示或 du -shk ./* #按照k显示也可排序 du -shm ./*|sort -n2、修改ubuntu 激活root账号 sudo passwd root 禁用:sudo passwd -l root3、重启动网路 /etc/init.d/networking restart4、tcpdump抓包tcpdump -X host 10.57.220.195 and port 80 -tttt|grep http5、挂载移动硬盘mount -t vfat /dev/sdb1 /mnt //注意有时侯 用fdisk -l看不出是那个sda 还是sdb,最好插入u盘后,用dmesg,特别是vmvare虚拟机上//dmesg-->fdisk -l --> mount -t vfat /dev/sdb1 /mnt //挂载windows共享目录mount -t cifs //192.168.0.10/test /var/www/test1 -o domain=GC,username=test,password=1234566、编译java 注意 CLASSPATH是要文件的不是单纯路径,配置时候可以在.bashrc内 ,也可javac时候指定.建议在.bashrc内。注意指定-classpath类路径会覆盖CLASSPATH环境变量中指定的值。也就是.bashrc定义的CLASSPATH。 javac ./com/sun/HelloWorld.java注意编译时候的路径必须和package 对应,java源文件要要放到相应目录下,如上, 必须在com/sun下运行时候同理要和路径匹配,如 java com.sun.HelloWorld。com.sun和/com/sun对应。又如 经常报错 ”找不到或无法加载主类“ 主要是没按照包结构进行本来是:java -cp ./dist/GameGate.jar gamegate.GameGate。因为主类 GameGate 在gamegate保内。如果 java -cp ./dist/GameGate.jar GameGate 则会报上面错误。点击(此处)折叠或打开package gamegate;public class GameGate { private static final int PORT = 8889; public static void main(String[] args) { } }-----------------------------------------------------------------------生成jar包javac ./gamesrv/LuaEngine/*.javajar cvf LuaEngine.jar ./gamesrv/LuaEngine/*.class使用import gamesrv.LuaEngine.*;代码参考http://dl.vmall.com/c08nc8eb4x7、创建svn用户#若有分支放在最上层passwd文件,统一管理htpasswd -c /home/svn/passwd user 修改svn密码htpasswd /home/svn/passwd user vi authz [groups] # harry_and_sally = harry,sally # harry_sally_and_joe = harry,sally,&joe admin = lhy [documents:/] @admin = rwwindows下SVN如何更换用户TortoiseSVN-->Settings-->SavedData.把“Authentication data”这一项Clear就可以了linux 指定账号 checkout svn --username=test co http://192.168.1.10/test .8、ubuntu下apt源设置文件/etc/apt/sources.list 把需要的源连接加到上面文件内,然后执行apt-get update解决错误 How to Solve NO_PUBKEY 07DC563D1F41B9071)apt-get install debian-keyring2)gpg --keyring /usr/share/keyrings/debian-keyring.gpg -a --export 07DC563D1F41B907 |apt-key add -apt-get install默认安装的目录 dpkg -L 软件包名 在/var/cache/apt/archives找的你安装程序的包 用gdebi-gtk可以查看具体安装在什么位置9、创建用户useradd -m zhang3 -d /home/zhang3 -s /bin/bash10、pkg-config使用比如安装库在/usr/local/proto(一般是在configure --prefix 指定的)export PKG_CONFIG_PATH=/usr/local/proto/lib/pkgconfigpkg-config --libs protobuf pkg-config --cflags protobuf结合编译器 g++ `pkg-config --cflags protobuf` client.cpp Chat.pb.cc -o cli `pkg-config --libs protobuf`11、myslq数据库操作1)安装: apt-get install mysql-server mysql-client2)服务器设置:修改 my.conf bind-address = 10.57.220.198 #不要是127.0.0.13)执行 ./mysqld_safe --user=mysql & mysqld_safe 详细参数查看资料4)服务器授权远程以root 访问。常见1045错误(远程登录权限错误) 在本地直接执行(mysql默认本地可登录) shell>mysql (或者mysql -uroot) 然后 mysql>grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; //注意要区分大小写root mysql>flush privileges; #123456为 root密码执行grant之前,有时候必须先插入user表 root记录,如下mysql>INSERT INTO `user` VALUES ('%','root','*196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);GRANT ALL PRIVILEGES ON *.* TO root@"%";远程登录错误 有时候 是没有在my.cnf设置 bind-address = 10.57.220.198 #不要是127.0.0.15)字符集问题 查看 mysql> status; 修改my.conf,增加default-character-set=utf8后就全部修改为utf8。 可在用status查看 [client] port = 3306 default-character-set=utf8 [mysqld] default-character-set=utf8 5.5版本后要用 character-set-server=utf8 collation-server=utf8_general_ci6)连接mysql -h110.110.110.110 -uroot -p7)、修改root密码update mysql.user set password=PASSWORD("Amtf.@)!#") where user='root';8)快速登录 /etc/my.cnf[mysqld]skip-name-resolve #增加9)忘记密码(mysql Access denied for user root@localhost错误)# /etc/init.d/mysql stop# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &# mysql -u root mysqlmysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';mysql> FLUSH PRIVILEGES;mysql> quit# /etc/init.d/mysql restart# mysql -uroot -pEnter password:12、samba配置实现windows下用账号密码登陆。文件创建的用户和组便会按照登陆用户的名称和组属性创建,而不是nobody1)smb.conf配置vi /etc/samba/smb.conf点击(此处)折叠或打开[global]workgroup = ubuntugroup netbios name = LinuxSir05server string = Linux Samba Server TestServersecurity = share[ubuntugroup]path = var/www/public = yeswritable = yesvalid users = cehuaforce user = cehuaforce group = cehuaavailable = yesbrowseable = yescreate mode = 0775directory mode = 07752)设置账号密码smbpasswd -a wwm注意wwm 必须先用useradd创建3)、windows设置dos cmd下net use \\10.57.220.20\ubuntugroup /user:wwm4)windows访问 \\10.57.220.20\ubuntugroup 有时候没有写权限,此时重启动服务器下samba即可。杀掉 smbd进程 ,然后sevice smbd start 13、杀死进程方法1ps -ef|grep test|grep -v grep|awk '{print "kill -9 " $2}' |sh方法2:kill -9 `ps aux|grep test |awk '{print $2}'`方法3:ps aux|grep test |awk '{print $2}'|xargs kill -914、lvs-dr配置参考 http://blog.chinaunix.net/space.php?uid=52437&do=blog&id=3182417 基于keepalived 的配置参考 http://blog.chinaunix.net/space.php?uid=52437&do=blog&id=318857615、ubuntu安装内核源码 sudo apt-get install linux-source 会自动安装当前版本内核的源代码到 /usr/src16、服务管理 chkconfigapt-get install chkconfig1)查看chkconfig -l2) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 3) 即时生效,重启后失效 开启: service iptables start 关闭: service iptables stop 4)、添加服务 chkconfig --add iptables5)、删除服务chkconfig --del iptables6)、打开端口iptables -I INPUT -p tcp --dport 3306 -j ACCEPT /etc/init.d/iptables save //一定要保存service iptables restart iptables文件 /etc/sysconfig/iptables#对外只开放80-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT#限制源ip访问,其中-A RH-Firewall-1-INPUT -s 106.2.220.66 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 17、mysql (集群)cluster配置 参考http://blog.chinaunix.net/space.php?uid=52437&do=blog&id=319176518、查找并删除删除后缀为a的文件find out/ -name '*.o' -o -name '*.a' | xargs rm -rf19、Linux Shell常用快捷键shell下各种操作指令说明http://blog.chinaunix.net/uid-52437-id-3360884.html20、目标文件分析常用指令1) nm a.out 列出符号和对应地址 或者 nm -s a.out 或者 objdump -t2)列出指定 段 objdump -j name a.out 注意,不能单独使用-j或者--section,例如"objdump -j.text a.out"是不会运行成功的。 而应该:objdump -j.got.plt -S a.out 21、过滤打包tar -cvzf Server.tar.gz * --exclude="*/.svn"22、dns配置错误1: ping: unknown host解决:vi /etc/resolv.confsearch localdomainnameserver 202.98.96.68nameserver 61.139.2.6923、git相关1)安装apt-get install git-core2)初始化一个 repository mkdir ~/git_data/ cd git_data mkdir repository cd repository git init --bare myprj3)、初始化提交 cd ~mkdir initial.commitcd initial.commitgit init git remote add origin /home/wwm/git_data/repositories/myprj//添加文件 test.txttouch test.txtgit add test.txt git commit -m "initial commit" git push origin master 4)、使用ssh 方式:git clone wwm@10.57.220.48:git_data/myprj mycopy git方式安装git-daemonsudo apt-get install git-daemon-run修改vi /etc/sv/git-daemon/run特别注意base-path 和 --export-all点击(此处)折叠或打开#!/bin/shexec 2>&1echo 'git-daemon starting.'exec chpst -ugitdaemon \ "$(git --exec-path)"/git-daemon --verbose --reuseaddr \ --base-path=/home/wwm/git_data/repositories --export-allgit-daemon相关操作:(git协议)关闭:sudo sv down git-daemon 启动:sudo sv up git-daemon 客户端访问 git clone git://10.57.220.48/myprj24、查找最大文件当前目录下,在js文件中找到前20个最大find . -name "*.js" -type f -printf "%k %p\n"| sort -rn | head -n 20 25.抓取备份网站 wget -m -l 2 -k -c --exclude-directories=".git" http://abc.com m表示要镜像网站, -l表示递归深度;-k表示把绝对链接转为相对,c表示接着下载没下载完的文件详细 man wget吧-c 断点续传-r 递归下载-nd 不递归创建目录-np 不搜索上一层目录-k 脱机浏览时用此项-L 递归时不进入其它主机-p 下载网页所需的所有文件-A 指定要下载文件样式列表-i 后跟一个文件指明要下载的URL举例点击(此处)折叠或打开#!/bin/bashwhile read src_url des_filedo wget -c "$src_url" -O $des_file".mp3"donemusic.txt点击(此处)折叠或打开http://ws.stream.qqmusic.qq.com/C100003JSgjW44Fpye.m4a?fromtag=46 故乡是北京 http://ws.stream.qqmusic.qq.com/C100001qo6Nh3XrYkj.m4a?fromtag=46 重整河山待后生26、批量替换文件中的内容把 当前路径下js文件中所有AAA 替换成BBBfind . -name "*.js" |xargs perl -pi -e 's|AAA|'BBB'|g'也可用ultraedit 中的文件内容替换来进行,举例如下a.js文件,其内有var COMM = require('../Common/common.js').GetInstance();查找:(require.)§?\/(.?)替换为:$1$2注意要选择perl正则表达式引擎结果varCOMM=require(′common.js′).GetInstance();也可在linux下直接find.?name"?.js"|xargsperl?pi?e′s/(require\(.)§?\/(.+.)§?\/(.?)替换为:$1$2注意要选择perl正则表达式引擎结果varCOMM=require(′common.js′).GetInstance();也可在linux下直接find.?name"?.js"|xargsperl?pi?e′s/(require\(.)§?\/(.+;?)/$1$2/g'此类批量处理方式,在重构代码中有很大的好处,可大大提高效率。基础还是要熟练使用perl补充:更加完美形式 find . -type f -name "*" -print0 |xargs -0 -n 30 perl -pi -e 's|AAAAA|'BBBBB'|g' -print0 xargs -0 处理有空格文件名或路径;-n 30 处理 参数过多问题,使得xargs 按照30一批处理26、统计多个文件内,某个单词出现的次数查找txt文件中 world文件出现的次数find . -name "*.txt"|xargs awk 'BEGIN {num = 0} {i = 1;while(i26、统计小例子 1)统计文件中出现次数最多的前10个单词 cat words.txt | sort | uniq -c | sort -k1,1nr | head -10 参考http://blog.sina.com.cn/s/blog_5dce657a01012ddi.html 说明: sort: 对单词进行排序 uniq -c: 显示唯一的行,并在每行行首加上本行在文件中出现的次数 sort -k1,1nr: 按照第一个字段,数值排序,且为逆序 head -10: 取前10行数据 2)统计重复文件的数量 find . -name "*.js"|awk -F '/' '{print $NF}'|sort|uniq -c | sort -k1,1nr | awk '$1>1 {print $2,$1}' 说明:$NF最后一个域名 $1>1 是条件方式表示相同文件大于127、常用find指令 从含svn中复制文件 find /home/work -name "*" |grep -v ".svn"|xargs cp -R --target-directory=.28、cassandra 资源限制设置(open file) vi /etc/security/limits.conf 如cassandra配置要求点击(此处)折叠或打开* soft nofile 32768* hard nofile 32768root soft nofile 32768root hard nofile 32768* soft memlock unlimited* hard memlock unlimitedroot soft memlock unlimitedroot hard memlock unlimited* soft as unlimited* hard as unlimitedroot soft as unlimitedroot hard as unlimited另外,要执行sysctl -w vm.max_map_count=13107229、简单vsftp配置 1)、准备 apt-get install vsftpd vi /etc/shells 添加/bin/false 2)、创建文件touch /etc/vsftpd.chroot_list #用于限制目录访问touch /etc/vsftpd.user_list #用于开发能访问的ftp账号注意 ftpusers 内账号是限制访问的 3)、创建ftp目录和组mkdir /home/ftp addgroup ftpchown ftp:ftp /home/ftp 4)、配置vsftpd.conf文件#访问路径指定增加两行anon_root=/home/ftplocal_root=/home/ftp去掉注释:chroot_local_user=YESchroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list#写权限local_umask=022local_enable=YESwrite_enable=YES5)、添加访问用户adduser --shell /bin/false --home /home/ftp testusermod -aG ftp test同时修改 vsftpd.user_list 6)、service vsftpd restart30、流量测试工具 ntop安装:sudo apt-get install ntop操作:sudo /etc/init.d/ntop restart(stop,start)观察:http://192.168.1.128:3000/31、查看进程开始运行时间ps -p pid -o lstart #pid是进程号for pid in $(pgrep node); do echo -n "${pid} " ; ps -p ${pid} -o lstart | grep -v "START" ; done 其中 node 表示是程序32、nginx+php-fpm 在centos下安装 1)、安装nginx 准备:wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm sudo yum install nginx sudo chkconfig --level 345 nginx on 2)、安装php-fpm sudo yum --enablerepo=remi install php php-fpm (核心组价) sudo yum --enablerepo=remi install php-gd php-mysql php-mbstring php-xml php-mcrypt sudo chkconfig --level 345 php-fpm on 3)、配置 location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME /home/www$fastcgi_script_name; include fastcgi_params; }4)、php测试 vi info.php phpinfo(); ?> 33、ubuntu下svn server建立1)、sudo apt-get install subversion2)、创建svn目录(存放所有项目,既是根目录) sudo mkdir /home/svn3)、创建项目 test sudo svnadmin create /home/svn/test4)、修改配置 svnserver.conf文件打开下面四个(去掉前面#,注意前面不要有空格)anon-access = readauth-access = writeauthz-db = authzpassword-db = passwdpasswd文件[users] # sally = sallyssecret#按照样式添加即可test = abcdauthz文件按照样式添加即可,如下[/]wwm = rw5)重启动svnserver sudo svnserve -d -r /home/svn注意路径是根目录34、linux cache增加过大点击(此处)折叠或打开sync #防止丢失数据#To free pagecachesudo echo 1 > /proc/sys/vm/drop_caches #To free dentries and inodes sudo echo 2 > /proc/sys/vm/drop_caches#To free pagecache, dentries and inodessudo echo 3 > /proc/sys/vm/drop_cachessudo echo 0 > /proc/sys/vm/drop_caches不过系统在内存不够时候,会自动释放。 35、导出svn脚本呢。可方便备份通过分析日志时间进行备份如./exportSvn home/svn/projects 2014-04-03 表示2014-04-03以后更新的将被导出 点击(此处)折叠或打开#!/bin/bash#cmd example#./exportSvn home/svn/projects 2014-04-03#example#svn log -l 1 file:///home/svn/projects/lordServer/|awk '{print $5,$6}'headtag=$1;#timetag="2000"timetag=$2filelist=`ls -a $1`for file in $filelistdo if [ "$file" == "." ] || [ "$file" == ".." ] then continue fi tmp=`svn log -l 1 file:///$headtag$file|awk '{print $5,$6}'` if [ "$tmp" == " " ] then continue fi if [[ "$tmp" then continue fi echo $file,$tmp tmp=" svn export file:///"$headtag$file" ./"$file $tmpdone以下脚本压缩当前导出的各个项目目录点击(此处)折叠或打开#!/bin/shfilelist=$(ls)echo "hello"for file in $filelistdo if [ -d $file ] then #tar -cvzf "/home/tmp/"$file.tar.gz $file tar -cvzf $file.tar.gz $file echo $file fidone36、根据监听端口查进程比如查 8089端口 1)sudo netstat -anp|grep 8089tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN 5086/nginx2)使用ps查看进程情况 ps -ef|grep 5086root 5086 1 0 Apr02 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 37、直接用shell向mysql导入数据点击(此处)折叠或打开cat test.dat |awk '{print "insert into tt(a, b) values(\"" $1 "\", \"" $2 "\")" }'|while read linedo mysql -h172.28.14.110 -uroot -p123456 -D test -e "${line}" #echo $linedonetest.dat点击(此处)折叠或打开hello wwmgood yyyy111 22238、监控脚本mon.sh 下面是一个列子,其他可稍作修改点击(此处)折叠或打开#!/bin/bashcur_path=`pwd`;check() { id=`ps aux|grep node|grep $cur_path|awk {'print $2'}`; echo $id if [ x"$id" = x ] ; then run_path=$cur_path"/gameServer.js"; #此处可自行修改 nohup node $run_path >/dev/null 2>&1 & echo "restarted"; else echo "runing"; fi}while truedo check; sleep 2 donestart.sh点击(此处)折叠或打开cur_path=`pwd`;id=`ps aux|grep mon.sh|grep $cur_path|awk {'print $2'}`;echo $idif [ x"$id" = x ] ; then nohup $cur_path/mon.sh >/dev/null 2>&1 & else echo "runing";fistop.sh点击(此处)折叠或打开#!/bin/bashcur_path=`pwd`;kill -9 `ps -ef|grep mon.sh|grep -v grep|grep $cur_path|awk {'print $2'}`kill -1 `ps -ef|grep node|grep -v grep|grep $cur_path|awk {'print $2'}`39、windowns下清理.svn文件目录点击(此处)折叠或打开import urllib2 import urllib import os import shutil def walk_dir(homedir,topdown=True): for root, dirs, files in os.walk(homedir, topdown): #for name in files: #if name=='.svn': #print(os.path.join(name)) #os.remove(os.path.join(name)) for name in dirs: if name=='.svn': print('Delete '+os.path.join(root,name)) shutil.rmtree(os.path.join(root,name),ignore_errors=False) homedir = os.getcwd() walk_dir(homedir)40、FFmpeg 给视频增加黑边这个办法可以保持图片不拉伸变形前提下,改变图片尺寸使用FFmpeg给视频增加黑边需要用到 pad 这个滤镜,具体用法如下: -vf pad=1280:720:0:93:black按照从左到右的顺序依次为: “宽”、“高”、“X坐标”和“Y坐标”,宽和高指的是输入视频尺寸(包含加黑边的尺寸),XY指的是视频所在位置。比如一个输入视频尺寸是1280x534的源,想要加上黑边变成1280x720,那么用上边的语法可以实现,93是这样得来的,(720-534)/2。如果视频原始1920x800的话,完整的语法应该是: -vf 'scale=1280:534,pad=1280:720:0:93:black'先将视频缩小到1280x534,然后在加入黑边变成1280x720,将1280x534的视频放置在x=0,y=93的地方,FFmpeg会自动在上下增加93像素的黑边。注:black可以不写,默认是黑色看如下列子:1)ffmpeg -i 5bd502731afe6d075b352a793d605a8b.mp4 -y -f image2 -ss 00:00:03 -vframes 1 -vf 'scale=iw:640,pad=1280:640:640-iw/2:0:black' a.png2)ffmpeg -i 5bd502731afe6d075b352a793d605a8b.mp4 -y -f image2 -ss 00:00:03 -vframes 1 -vf 'scale=iw:ih,pad=1280:ih:640-iw/2:0:black' a.png 这个是保持高度,宽度增加黑边了41、去掉首行awk 'FNR!=1 { print } 比如cat a.csv |awk 'FNR!=1 { print }'42、批量替换 sed -i "s/AAA/"BBB"/g" `grep -rl "AAA" *` sed -i "s/data-hi=\"hi-[0-9]*\" data-cc=\"[0-9]*\"/""/g" `grep -rl "data-hi=\"hi-[0-9]*\" data-cc=\"[0-9]*\"" *`首先用grep "data-hi=\"hi-[0-9]*\" data-cc=\"[0-9]*\"" *43、统计单词中的字母出现次数echo "13041041493" |awk -F"0" '{print NF-1,$0}'|sort -k1,1nrcat f.txt |awk -F"0" '{print NF-1,$0}'|sort -k1,1nr44、对比两个文本文件找出不同行命令如下:grep -vwf file1 file2统计file1中没有,file2中有的行。不是求差别,差别用diff。就是找file1没有的