操作系统笔记

加解密

证书,令牌,ukey,用户不能随意改变,属于强身份验证。用户名密码属于弱身份验证凯撒密码的基本思想是:把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。- RSA算法:RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 这里假设我是A,github是B,我构建好密钥对后,把公钥填到github上的配置里面 消息发送方A在本地构建密钥对,公钥和私钥; 消息发送方A将产生的公钥发送给消息接收方B; B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信; 反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。如果要建立更安全的加密消息传递模型,需要消息发送方和消息接收方各构建一套密钥对,并分别将各自的公钥暴露给对方,在进行消息传递时,A通过B的公钥对数据加密,B接收到消息通过B的私钥进行解密,反之,B通过A的公钥进行加密,A接收到消息后通过A的私钥进行解密。

进程和线程的区别

进程的状态转换(理论)

编码

如果只是论一个汉字占用的字节数,那么 UTF-8 占用3个字节, UTF-16 占用2个字节, 另外还有一个结束符,UFT-8是3个字节,UTF-16是2个字节

并发编程问题

命令

tar -cvzf a.tar.gz a.log b.log 
z参数是压缩的意思,tar本来不带压缩功能
zip -r images.zip images/
tar -xvf a.tar.gz
zip -d images.zip
docker ps -a | grep "Exited" | awk '{ print $7; }'
usermod -g xxx monkey,
gsettings get org.gnome.desktop.interface gtk-theme 
修改
/usr/share/themes/<YOUR_THEME>/gtk-2.0/gtkrc
把下面的背景色修改下,就可以改terminator的标签页底色了
style "notebook_bg" {
  bg[NORMAL] = shade (1.02, @bg_color)
  bg[ACTIVE] = shade (0.97, @bg_color)
  fg[ACTIVE] = mix (0.8, @fg_color, shade (0.97, @bg_color))
}
不然gulp watch的时候会报"Error: watch ENOSPC"的错误,
echo fs.inotify.max_user_watches=582222 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

命令行复制文件内容

cat ~/.ssh/id_rsa.pub | xclip -selection c

xargs

将输出指定名字,在后面的命令中使用

docker ps | grep agenda | awk '{print $1}' | xargs -I % echo %

cron

查看cron任务:crontab -l

编辑:crontab -e

语法:

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

创建分区

sudo fdisk /dev/xvdb
分配文件系统
mkfs.ext4 /dev/xvdb1
映射到某个目录
mount /dev/xvdb1 /mnt/disk

创建swap:

建一个5G的SWAP文件,
sudo dd if=/dev/zero of=swap.img bs=1024 count=5000000
sudo mkswap swap.img
sudo swapon swap.img
在/etc/sysctl.conf 文件里添加如下参数:
vm.swappiness=10
表示,当内存低于10%时,用SWAP

ubuntu配置Mondb用服务启动:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
sudo nano /etc/apt/sources.list
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
sudo apt-get update
sudo apt-get install mongodb-10gen
另外,得让db目录的文件所属用户都为:mongodb:mongodb
sudo chown -R mongodb:mongodb /mnt/db

键盘延时

xset  q    查看当前键盘重复键延时,
 xset  r  rate 200 20
 xset  r   rate   delay  rate

tmux 打开变成一个小屏幕

tmux attach -d

iptable

sudo iptables -A INPUT -p tcp --dport 4500 -j ACCEPT

AB

-v verbose
-n 多少个request
-c 并发数
-t 共测试多少秒
-p post请求接的参数文件,存json
-T post传输数据格式(application/json)
ab -v -n 1000 -c 2 -t 30 http://127.0.0.1:8001/user/getpurchaseconfig?ud=56ce758be7926c7f94e1dc71
ab -v -w -n 1000 -c 2 -t 30 -p test.json -T "application/json" http://127.0.0.1:8001/user/login

rinetd

转发端口到云Mongo

修改某个用户的密码

passwd mm

curl

curl发post请求:

curl --data 'param=xxx&&parm2=xxx' http:/xxx.com

输出响应时间:

curl -v  -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" https://public.baofoo.com/cutpayment/api/backTransRequest

ssh

/etc/ssh/sshd_config里面有允许让SSHD监听80端口,会导致我的服务不能用80端口启动,注释掉这一行即可

防止ssh卡死:

This is what I have in my ~/.ssh/config.
To enable it for all hosts use:
Host *
  ServerAliveInterval 240
Also make sure to run chmod 600 ~/.ssh/config, because the config file must not be world-readable.

lsof

由于权限问题,还要用sudo试试

fuser 80/tcp 能查看哪些进程占用了80端口

lsof -i:80

top

M :能按内存排序

e: 能让下面的进程的内存展示在K-M-G-T-P之间切换

E:能让顶部总的内存展示在K-M-G-T-P之间切换

PR是优先值,NI是nice值,越小优先级越高,

tac

tac可以从底部开始读一个文件

awk

匹配一行里面,同时出现多个字符串,用awk:

awk '/abc/&&/def/'

iftop

进入iftop画面后的一些操作命令(注意大小写)
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。

grep

匹配多个关键字, 或

grep -E 'api|test'

grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行 grep -B 5 foo file 显示foo及前5行 grep -A 5 foo file 显示foo及后5行

rsync 复制文件

rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude

去除cache缓存

echo 1 > /proc/sys/vm/drop_caches