Linux/Unix tips

0

Grep, awk and xargs

grep: 过滤
awk:文本分析工具
xargs: 跟其他命令配合如使用,扩展名了

ps -ef | grep frank | grep soft_router | awk '{print $2}' | xargs kill

用grep还能直接过滤文本中的关键字,如下,详细内容在另一篇文章中介绍过《Install/Use Yangsuite by Docker

$ grep -rn 'ALLOWED_HOSTS' *
docker/yangsuite/production.py:13:if 'DJANGO_ALLOWED_HOSTS' in os.environ:
docker/yangsuite/production.py:14:    ALLOWED_HOSTS = os.getenv('DJANGO_ALLOWED_HOSTS', 'localhost').split()
docker/yangsuite/production.py:16:    ALLOWED_HOSTS = 'localhost'
docker/docker-compose.yml:11:        - DJANGO_ALLOWED_HOSTS=localhost

Tar and Zip

tar -cvf test-tar.tar nvgen_traces     >>> create test folder to zip file
tar -xvf test-tar.tar     >>> extract tar file
zip -r 661-yang.zip yang
unzip 661-yang.zip

Find command

$find ~ -name "*.txt" -print
$find /(查找范围) -name '查找关键字' -type d   <<<查找目录

http://blog.csdn.net/windone0109/article/details/2817792
http://www.qnx.com/developers/docs/6.4.1/neutrino/utilities/f/find.html
http://blog.csdn.net/ldl22847/article/details/761111

Split和Cat

split分割文件,cat合并文件

$ split -C 1000M fullk9-R-XRV9000-731.tar fullk9-R-XRV9000-731.tar
$ cat fullk9-R-XRV9000-731.tar.xa* > fullk9-R-XRV9000-731.tar

GREP常用Option:

-c:只输出匹配行的计数。
-i:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。

$more size.txt | grep -inv 'test' <<<查找不包含“test”的匹配项的行
$more size.txt | grep -inv 'test' >>xxx  <<<过滤后的信息重定向到一个文件中,xxx是你的文件名
$grep -E '10G|VID' file  <<<查找包含10G或包含VID的行,-E是扩展模式,同等于egrep
$grep -rn 'ALLOWED_HOSTS' *  <<<查找在此目录中包括子目录中的所有文件,如果包含关键字,打印出来,非常实用的命令

update:-A和-B分别是后几行,前几行

[root@localhost ~]# more test.cfg |grep 0/0/0/0
interface HundredGigE0/0/0/0
 interface HundredGigE0/0/0/0

[root@localhost ~]# more test.cfg |grep 0/0/0/0 -A 2
interface HundredGigE0/0/0/0
 ipv4 address 25.1.1.2 255.255.255.0
 load-interval 30
--
 interface HundredGigE0/0/0/0
  circuit-type level-2-only
  point-to-point
[root@localhost ~]# more test.cfg |grep 0/0/0/0 -B 2
 shutdown
!
interface HundredGigE0/0/0/0
--
  !
 !
 interface HundredGigE0/0/0/0
[root@localhost ~]# more test.cfg |grep 0/0/0/0 -B 2 -A 2
 shutdown
!
interface HundredGigE0/0/0/0
 ipv4 address 25.1.1.2 255.255.255.0
 load-interval 30
--
  !
 !
 interface HundredGigE0/0/0/0
  circuit-type level-2-only
  point-to-point

Pattern正则表达式主要参数:

\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ – ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
. :所有的单个字符。
* :有字符,长度可以为0。

文本输出太多,可以用下面命令,然后左划线过滤:

在命令后面加 | more. 可以每屏按键后翻。想退出按 q
命令后面加| less ,可以前后翻。想退出按 q

加路由并查看路由表:

$sudo route add -net 10.10.10.0/24 192.168.255.131
Password:
add net 10.10.10.0: gateway 192.168.255.131
$ netstat -r
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            hsrp-10-140-0-0.ci UGSc           31        0     en0
10.10.10/24        192.168.255.131    UGSc            0        0  vmnet8

$ netstat -in
Name  Mtu   Network       Address            Ipkts Ierrs    Opkts Oerrs  Coll
lo0   16384 <link#1>                         64058     0    64058     0     0

关闭防火墙

[root@frank ~]# systemctl stop firewalld.service 
[root@frank ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. 
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

2020-07-07 更新:关闭ubuntu 防火墙

最近拿ubuntu做测试,发现ipv6流量被防火墙block了。。。花了很长时间才找到原因,由于是测试的是SRv6,所以怀疑内核不稳定,同事还尝试升级了内核。。。按理说ubuntu默认应该是关闭防火墙的。。。用下面命令关闭ubuntu的防火墙:

[root@frank ~]# ufw disable 
[root@frank ~]# ufw status

临时开启httpserver,remote直接wget即可

下面的方法只能单进程,简单测试没问题,但没法上生产,如果需要更好的性能,可以安装“caddy”

$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

or

$ python -m http.server <port>

私钥和公钥

加密算法分两种,对称加密和非对称加密。非对称加密需要更多资源,速度慢,但相对更安全;对称加密速度快,但不太安全;这里简单总结下非对称加密,非对称加密有很多算法,如常见的RSA,Diffie-Hellman,DSA

非对称算法计算完后会生成两把钥匙,公钥和私钥。顾名思义,公钥即可以分发给所有人的;而私钥只是自己保留的;对不同秘钥加密会有不同的应用场景

之前在学安全认证时总结过一些,可以参考 http://www.zhaocs.info/security-vpn-theory.html

公钥加密,私钥解密

主要用于数据加密

私钥加密,公钥解密

主要用于数字签名,因为私钥可视为不可泄露,代表个人或机构的,所以如果公钥可以解密,那么可以证明数据分发者没有被篡改

SSH举例

过程主要是Server端拿Client的公钥加密随机数并发给Client;Client用私钥解密,并md5随机数和SessionKey并发给Server;Server 收到后用同样算法计算并对比Client发来的信息,如果匹配,通过认证

经过查找,这篇 图解SSH原理 总结的很好!建议直接跳转查看;所以在这里只实操,不涉及理论。为了防止文章失效,我做了截屏保留,放到这里:

客户端生成公钥私钥

client:~ frank$ cd .ssh
client:.ssh frank$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/frank/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): <<< 真实环境建议增加密码
Enter same passphrase again: 
Your identification has been saved in /Users/frank/.ssh/id_rsa.
Your public key has been saved in /Users/frank/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3zinN8lMY79WaSRDzbaBLQsT4KSlb9MDwrQfFc9FK+o frank@client
The key's randomart image is:
+---[RSA 3072]----+
|       . +.+o *o |
|      o B .oo+.*.|
|       * +  +++.o|
|        + + .+.o |
|        S= +  + .|
|        ..oo=  o.|
|          +Eo+.. |
|           +* o  |
|          .. o.. |
+----[SHA256]-----+
client:.ssh frank$ ls -l
total 120
-rw-r--r--  1 frank  staff    751 May 11  2020 config
-rw-------  1 frank  staff   2610 Feb 24 11:59 id_rsa <<< 私钥
-rw-r--r--  1 frank  staff    578 Feb 24 11:59 id_rsa.pub <<< 公钥
-rw-------  1 frank  staff  23022 Feb 23 19:25 known_hosts
-rw-r--r--@ 1 frank  staff  23377 Feb 22 21:00 known_hosts.old

拷贝的Server端

client:.ssh frank$ scp -P xxxxx id_rsa.pub root@x.x.x.x:~/.ssh/authorized_keys
root@x.x.x.x's password: 
id_rsa.pub  

登录Server端改权限

authorized_keys”必须是“0600”,如果有更多的client,直接用命令追加公钥即可:

[root@server ~]# cd .ssh
[root@server .ssh]# ls -l
total 4
-rw-r--r-- 1 root root 578 Feb 24 13:04 authorized_keys.pub
[root@server .ssh]# chmod 0600 authorized_keys.pub
[root@server .ssh]# ls -l
total 4
-rw------- 1 root root 578 Feb 24 13:04 authorized_keys.pub
[root@server .ssh]#cat /root/.ssh/other_client_rsa.pub >> /root/.ssh/authorized_keys

关闭默认22端口和密码认证

[root@server ~]# diff /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
18d17
< Port xxxxx
44c43
< PubkeyAuthentication yes
---
> #PubkeyAuthentication yes
66c65
< PasswordAuthentication no
---
> PasswordAuthentication yes
[root@server ~]# systemctl restart sshd.service

建立连接

client:.ssh frank$ ssh -i id_rsa -p xxxxx root@x.x.x.x
Last login: Wed Feb 24 13:46:16 2021 from 64.104.125.227
[root@server ~]# 

2020-02 安装并打开流量监控

[root@nso ~]# yum -y install iftop
[root@nso ~]# iftop
interface: ens192
IP address is: 10.75.37.87
MAC address is: 00:50:56:80:32:2c
              12.5Kb         25.0Kb         37.5Kb         50.0Kb   62.5Kb
+-------------+--------------+--------------+--------------+--------------
nso                     => xxx                    3.47Kb  3.19Kb  3.19Kb
                        <=                          416b    624b    624b 
nso                     => yyy                        0b    566b    566b 
                        <=                            0b   1.66Kb  1.66Kb
nso                     => gateway                  672b    504b    504b
                        <=                          672b    504b    504b










--------------------------------------------------------------------------
TX:             cum:   2.12KB   peak:   4.rates:   4.12Kb  4.23Kb  4.23Kb
RX:                    1.38KB           4.47Kb     1.06Kb  2.77Kb  2.77Kb
[root@nso ~]#          3.50KB           8.80Kb     5.19Kb  7.00Kb  7.00Kb

2020-02 安装并使用NSF的cache

针对服务器用NSF搭建的环境,跨广域网挂载非常慢,而且每次都经理很通过的下载,如何解决类似问题?我们可以开启cache,这样第二次打开后就不会有问题了,下面是安装和配置:

[root@nso ~]# yum install -y cachefilesd
[root@nso ~]# cat /etc/cachefilesd.conf

安装后我们要找到NSF的挂载点,然后在NSF中设置cache,可以通过安装lsof这个工具来找到挂载点

[root@nso ~]# sudo yum install lsof

安装后打开lsof并触发一个automount的挂载点,我们可以找到相应的挂载服务器,找到后去automount文件给相应的服务器加上cache标识,如下:

[root@nso ~]# more /etc/auto.indirect |grep /abc/xyz
xxx -rw,hard,intr,quota,fsc frank-server:/abc/xyz

fcs是cache的标识,默认没有,就是要对这个挂载点开启cache;frank-server就是 NSF server的hostname;/abc/xyz就是从lsof中查到的挂载点的真正位置信息;xxx就是/auto目录下自动挂载的目录名称

2021-04 添加别名

由于要做混合组网测试,需要频繁登录设备,所以Linux做Terminal Server,为了避免反复输入“telnet x.x.x.x xxxx”,所以添加了别名,这样登录就方便很多了,直接修改用户profile文件即可“~/.bashrc

[root@localhost ~]# more ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

alias TG26='telnet 172.16.211.154 32897'
alias PR11='telnet 172.16.211.154 32907'
alias PR12='telnet 172.16.211.154 32908'
本文出自 Frank's Blog

版权声明:


本文链接:Linux/Unix tips
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接
你可以留言,或者trackback 从你的网站

留言哦

blonde teen swallows load.xxx videos