工作中常用的linux操作整理

文件编辑操作命令

-----------------------------------------------------------------
在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

---------------------------------------------------------------

Linux 查看端口占用并杀掉

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  "[email protected]"

接下来点击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

 

 

-------------------------------------------

Linux查找含有某字符串的所有文件

转自: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 的行。

后续补充...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章