文件编辑操作命令
-----------------------------------------------------------------
在vi中查找字符串的方法如下:
1、命令模式下输入“/字符串”,例如“/Section 3”。
2、如果查找下一个,按“n”即可。
要自当前光标位置向上搜索,请使用以下命令:
/pattern Enter
其中,pattern表示要搜索的特定字符序列。
要自当前光标位置向下搜索,请使用以下命令:
?pattern Enter
按下 Enter键后,vi 将搜索指定的pattern,并将光标定位在 pattern的第一个字符处。
参考资料地址:http://www.server110.com/linux/201404/10603.html
---------------------------------------------------------------------------------------
按下Insert键,可以见到窗口左下角有“Insert”字样,表示当前为插入编辑状态,这时从键盘输入的内容将插入到光标位置;再按下Insert键,左下角将有“Replace”字样,表示当前为替换编辑状态,这时从键盘输入的内容将替换光标位置的内容。
参考自;http://product.pconline.com.cn/itbk/software/linux/1311/3759019.html
--------------------------------------------------------------------------------------------
编辑文件后,先按esc,
a.若用户就是不想保存被修改后的文件而要强行退出Vi时,可使用命令 :q!
Vi放弃所作修改而直接退到shell下;
b.输入命令 :wq,Vi将先保存文件,然后退出Vi返回到shell。
c.连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;
若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell;
d.输入命令 :w
Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用w命令时,可以再给编辑文件起一个新的文件名。 :w newfile此时Vi将把当前文件的内容保存到指定的newfile中,而原有文件保持不变。若newfile是一个已存在的文件,则Vi在显示窗口的状态行给出提示信息:
File exists (use ! to override)
此时,若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令
:w! newfile
否则可选择另外的文件名来保存当前文件。
e.输入命令 :q
系统退出Vi返回到shell。若在用此命令退出Vi时,编辑文件没有被保存,则Vi在显示窗口的最末行显示如下信息:
No write since last change (use ! to overrides)
其它常见命令
1.移动文件夹的命令:cp -r /usr/local/www/vhosts /var/ftp/pub
2.切换用户
inux系统中用户切换的命令为su,语法为:su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
参数说明
-f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell。
-l , –login:加了这个参数之后,就好像是重新登陆一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。如果没有指定USER,缺省情况是root。
-m, -p ,–preserve-environment:执行su时不改变环境变数。
-c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。
–help 显示说明文件
–version 显示版本资讯
USER:欲变更的使用者账号,
ARG: 传入新的Shell参数。
2. su [user] 和 su - [user]的区别:su [user]切换到其他用户,但是不切换环境变量,su - [user]则是完整的切换到新的用户环境。
3.搜索文件
find . -maxdepth 1 -name "@*"
这个命令意思是,查找当前目录下以@开头的文件或者目录,搜索深度为一级也就是只在当前目录找,不进入子目录,如果你要从/目录开始找就:
find / -maxdepth 1 -name "@*"
如果想搜全盘,就把-maxdepth 1 去掉
4.自动安装软件
yum的命令形式一般是如下:yum [options] [command] [package ...]
其中的[options]是可选的,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。[command]为所要进行的操作,[package ...]是操作的对象。(参考自:http://blog.csdn.net/wuwenxiang91322/article/details/20076985)
比如:
yum install zabbix20-server zabbix20-agent zabbix20-web-mysql nmap httpd policycoreutils-python net-snmp net-snmp-utils
zabbix20-server zabbix20-agent zabbix20-web-mysql nmap httpd policycoreutils-python net-snmp net-snmp-utils
5.压缩解压文件
.tar
解压:tar zxvf FileName.tar
压缩:tar czvf FileName.tar DirName
.gz
解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
tar zcvf oicqzone.tar.gz oicqzone --exclude oicqzone/data
tar zcvf oicqzone.tar.gz oicqzone --exclude oicqzone/data1 --exclude oicqzone/data2 --excludeoicqzone/ data3
前面一句是压缩打包文件夹oicqzone为oicqzone.tar.gz,不包含oicqzone文件夹下的data文件夹。
后面一句是压缩打包文件夹oicqzone为oicqzone.tar.gz,不包含oicqzone文件夹下的data1 data2 data3文件夹。
linux 的tar 命令打包制定目录下的所有文件,却不想包含目录,举例:
tar -czvf /test/data.tar.gz */ 中间是你打包的文件名,最后“*/”表示将/some/file/中的文件全部打包
.bz2
解压1:bzip2 -d FileName.bz2 解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rar
解压:rar a FileName.rar
压缩:r ar e FileName.rar
解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp rar_static /usr/bin/rar
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
》解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp lha /usr/bin/
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
--------------------------------------------------------------------------------
自动安装jdk
Oracle官网上下载jdk,需要点击accept licence的才能下载,使用下面的命令,直接可以下载。
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.rpm
然后运行如下命令自动安装jdk:
rpm -ivh jdk-7u71-linux-x64.rpm
--------------------------------------------------------------------------
安装ant
1、从http://ant.apache.org 上下载tar.gz版ant
2、复制到/usr下
3、tar -vxzf apahce-ant-1.9.2-bin.tar.gz 解压
4、chown -R yjdabc apahce-ant-1.9.2 改变权限
chown -R :users apahce-ant-1.9.2
chmod -R +x apahce-ant-1.9.2
5、vi /etc/profile 修改系统配置文件
#set Ant enviroment
export ANT_HOME=/usr/apache-ant-1.9.2
export PATH=$PATH:$ANT_HOME/bin
6、source /etc/profile 立刻将配置生效
7、ant -version 测试ant是否生效
执行:
ant -buildfile /usr/demo/build.xml init
表示运行build.xml 中名字为init的target
------------------------------------------------------------------
防火墙
/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT #开启8000端口
/etc/rc.d/init.d/iptables save #保存配置
/etc/rc.d/init.d/iptables restart #重启服务
查看端口是否已经开放
/etc/init.d/iptables status
如果linux不使用iptables(centos 7默认的 firewall),而是使用firewall进行端口开放:
firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
防火墙白名单设置:
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.86.6.202" port protocol="tcp" port=9952 accept"
firewall-cmd --reload
---------------------------------------------------------------
netstat -apn|grep 80
tcp 0 0 10.65.42.27:80 172.22.142.20:62771 ESTABLISHED6426/lighttpd
为上面标红显示
kill -9 6426
--------------------------------------------------
linux下生成ssh密钥对(使用默认的路径)
cd ~/.ssh
ssh-keygen -t rsa -C "test@emal.com"
接下来点击enter键默认方式生成
---------------------------------------------------------------
查找文件
2.查找文件名中包含某字符(如"elm")的文件
find /home/lijiajia/ -name '*elm*'
find /home/lijiajia/ -name 'elm*'
find /home/lijiajia/ -name '*elm'
3.根据文件的特征进行查询
find /home/lijiajia/ -amin -10 #查找在系统中最后10分钟访问的文件
find /home/lijiajia/ -atime -2 #查找在系统中最后48小时访问的文件
find /home/lijiajia/ -empty #查找在系统中为空的文件或者文件夹
find /home/lijiajia/ -group cat # 查找在系统中属于groupcat 的文件(试了,命令不对。)
find /home/lijiajia/ -mmin -5 # 查找在系统中最后5 分钟里修改过的文件
find /home/lijiajia/ -mtime -1 #查找在系统中最后24 小时里修改过的文件
find /home/lijiajia/ -nouser #查找在系统中属于作废用户的文件(不明白是什么意思)
find /home/lijiajia/ -amin 10 #查找在系统中最后10分钟访问的文件
find /home/ftp/pub -user lijiajia #查找在系统中属于lijiajia这个用户的文件
(PS:以上都是在 /home/lijiajia/文件夹下进行的操作)
-------------------------------------------------------------------------------------------
进程操作
通过进程名查看进程情况
ps -ef | grep openfire
通过pid看端口
netstat
-antup |
grep
2711
通过进程名关闭所有进程
kill -9 $(ps -ef | grep openfire | grep -v grep | gawk '$0 !~/grep/ {print $2}' | tr -s '\\n' ' ')
-------------------------------------------------------------
rpm操作
查找
<span style="color:#333333">通过 rpm -q <关键字> 可以查询到rpm包的名字</span>
卸载
然后 调用 rpm -e <包的名字> 删除特定rpm包
如果遇到依赖,无法删除,使用 rpm -e --nodeps <包的名字> 不检查依赖,直接删除rpm包
如果恰好有多个包叫同样的名字,使用 rpm -e --allmatches --nodeps <包的名字> 删除所有相同名字的包, 并忽略依赖
------------------------------------------------------------
查看文件夹大小:
du -h --max-depth=1
参考自《Linux下查看文件和文件夹大小》
-------------------------------------------------------------
设置文件夹权限:
[root@localhost ~]# chmod 777 /home/user 注:仅把/home/user目录的权限设置为rwxrwxrwx
[root@localhost ~]# chmod -R 777 /home/user 注:表示将整个/home/user目录与其中的文件和子目录的权限都设置为rwxrwxrwx
-----------------------------------------------------------------
TCP链接查询
查看哪些IP连接本机
netstat -an
查看TCP连接数
1)统计80端口连接数
netstat -nat|grep -i "80"|wc -l
2)统计httpd协议连接数
ps -ef|grep httpd|wc -l
3)、统计已连接上的,状态为“established
netstat -na|grep ESTABLISHED|wc -l
4)、查出哪个IP地址连接最多,将其封了.
netstat -na|grep ESTABLISHED|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n
netstat -na|grep SYN|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n
摘录自《http://blog.csdn.net/he_jian1/article/details/40787269》
-----------------------------------------------------------------------------------
文件描述符数
1. 系统最大打开文件描述符数:/proc/sys/fs/file-max
查看
$ cat /proc/sys/fs/file-max
186405
设置
a. 临时性
# echo 1000000 > /proc/sys/fs/file-max
b. 永久性:在/etc/sysctl.conf中设置
fs.file-max = 1000000
2. 进程最大打开文件描述符数:user limit中nofile的soft limit
a. 查看
$ ulimit -n
1700000
2. 设置
a. 临时性:通过ulimit -Sn设置最大打开文件描述符数的soft limit,注意soft limit不能大于hard limit(ulimit -Hn可查看hard limit),另外ulimit -n默认查看的是soft limit,但是ulimit -n 1800000则是同时设置soft limit和hard limit。对于非root用户只能设置比原来小的hard limit。
查看hard limit:
$ ulimit -Hn
1700000
设置soft limit,必须小于hard limit:
$ ulimit -Sn 1600000
2. 永久性:上面的方法只是临时性的,注销重新登录就失效了,而且不能增大hard limit,只能在hard limit范围内修改soft limit。若要使修改永久有效,则需要在/etc/security/limits.conf中进行设置(需要root权限),可添加如下两行,表示用户chanon最大打开文件描述符数的soft limit为1800000,hard limit为2000000。以下设置需要注销之后重新登录才能生效:
chanon soft nofile 1800000
chanon hard nofile 2000000
设置nofile的hard limit还有一点要注意的就是hard limit不能大于/proc/sys/fs/nr_open,假如hard limit大于nr_open,注销后无法正常登录。可以修改nr_open的值:
# echo 2000000 > /proc/sys/fs/nr_open
3. 查看当前系统使用的打开文件描述符数
[root@localhost bin]# cat /proc/sys/fs/file-nr
5664 0 186405
其中第一个数表示当前系统已分配使用的打开文件描述符数,第二个数为分配后已释放的(目前已不再使用),第三个数等于file-max。
4. 总结:
a. 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
b. 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
c. nofile的soft limit不能超过其hard limit
d. nofile的hard limit不能超过/proc/sys/fs/nr_open
-----------------------------------------------------------------------------------
linux资源排查(cpu、内存、io)
查看某进程内存情况
1:使用 ps -ef|grep xxx 命令查找需要查看的进程,xxx是进程名字
2:top -p pid 查看程序的情况
3:ps -aux | grep process_name
4:cat /proc/pid/status
这里会打印出当前进程详细的情况,其中,内存是 VmRSS。
linux磁盘操作
1.查看linux分区格式挂载点:
df -hT
2.磁盘挂载
mount /dev/xvdb1 /mnt 挂载新分区,然后执行 df -h 查看分区
具体参考:《Linux 硬盘挂载》
tcpdump
tcpdump -i any -s0 host 192.168.1.45 -w "/user/local/packet/tcpdump.cap" & > /dev/null
- 抓取所有经过 eth1,目的网络是 192.168,但目的主机不是 192.168.1.200 的 TCP 数据
# tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
- 只抓 SYN 包
# tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'
- 抓 SYN, ACK
# tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0'
- 抓 DNS 请求数据
# tcpdump -i eth1 udp dst port 53
-同时不抓多个ip
tcpdump -i any -s0 port 5222 and not host 10.200.110.17 and not host 10.200.110.15 and not host 10.86.199.52 -w "/home/uc/packet/im_cap.cap" & > /dev/null
-------------------------------------------
转自:http://151wqooo.blog.51cto.com/2610898/1162118
如果你想在当前目录下 查找"hello,world!"字符串,可以这样:
grep -rn "hello,world!" *
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
下面是一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
后续补充...