操作系统笔记
加解密
证书,令牌,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的私钥进行解密。
对称加密:只用一个密钥就可以加解密, DES, RC4都是对称加密算法,DES密钥太短,不够安全,所以出来了AES
非对称加密:需要用两个密钥:公钥和私钥,用其中一个加密,另外一个解密
图灵试验的设想,即,隔墙对话,你将不知道与你谈话的,是人还是电脑
计算机硬件的速度
进程和线程的区别
- 进程是cpu资源分配的最小单位,线程是cpu调度的最小单位
- 进程是一个资源的容器,为进程里的所有线程提供共享资源,是对程序的一种静态描述
- 线程是计算机最小的调度和运行单位,是对程序的一种动态描述
进程的状态转换(理论)
编码
如果只是论一个汉字占用的字节数,那么 UTF-8 占用3个字节, UTF-16 占用2个字节, 另外还有一个结束符,UFT-8是3个字节,UTF-16是2个字节
并发编程问题
原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行。cpu优化会导致这个问题
可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。其实就是cpu高速缓存一致性问题
有序性即程序执行的顺序按照代码的先后顺序执行。指令重排会导致该问题
命令
查看进程占用端口:netstat -anp | grep pid
ip a 可以查看所有网卡的ip地址
安装deb文件: sudo dpkg -i xxx.deb
sudo less /etc/shadow,查看所有用户
ls -l /proc/进程号 可以查看进程是使用哪条命令启动的
找出当前目录下最大的文件的命令:find ./ -type f -exec du -h {} ; | sort -hr | head -1
.gz文件用gzip -d解压
dd可以查看一个程序依赖的动态库
查看ubuntu版本号, less /etc/issue
压缩文件
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
- 用awk,一定是用单引号,不能用双引号
docker ps -a | grep "Exited" | awk '{ print $7; }'
- 把monkey用户的主群组改成xxx
usermod -g xxx monkey,
- 在gnome桌面中,查询使用的theme:
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))
}
- 修改Linux可监控文件的个数
不然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
修改iptable后,生效用:iptables-restore < /etc/iptables.up.rules
查看Iptable: iptable -L -n
开放一个端口
sudo iptables -A INPUT -p tcp --dport 4500 -j ACCEPT
- 保存:iptables-save > /etc/iptables.up.rules
AB
-v verbose
-n 多少个request
-c 并发数
-t 共测试多少秒
-p post请求接的参数文件,存json
-T post传输数据格式(application/json)
- get请求
ab -v -n 1000 -c 2 -t 30 http://127.0.0.1:8001/user/getpurchaseconfig?ud=56ce758be7926c7f94e1dc71
- post请求
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