shell常见操作

扫码查看
工作中,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没有的
11-06 16:49
查看更多