操作系统-linux-个人笔记
文件权限
12位四列,每列3位
第一列标记文件类型
- -:普通文件
- d:目录文件
- b:块设备
- c : 字符设备
- l :符号链接文件
- p:管道文件pipe
- s:套接字文件socket
后面3列分为文件所有者权限,文件所属组用户(所有者可以不在所属组中)权限和其他用户权限
每个用户可以设置r
读,w
写和x
执行权限
Ubuntu无gui配置ip
- 配置静态ip
|
|
|
|
- 配置DNS解析器
|
|
|
|
- 重启网络
|
|
Ubuntu配置清华镜像源
验证ca证书出错时的解决办法
- 将
/etc/apt/sources.list
配置源从https改为http apt update
+apt install apt-transport-https ca-certificates
- 将配置改回来
wireshark
监听某个网卡上的数据包,lo是回环地址
添加过滤器:选择表达式,设置你要过滤的字段和过滤值,或者直接在过滤栏里面输入ip.src之类的字段,条件之间使用逻辑运算符连接&&、||、!
图形化界面
- ubuntu几种运行级:# 0 - 停机(千万不能把initdefault 设置为0 )# 1 - 单用户模式 # 2 - 多用户,没有 NFS # 3 - 完全多用户模式(标准的运行级) # 4 - 没有用到 # 5 - X11 (xwindow) # 6 - 重新启动 (千万不要把initdefault 设置为6 )
- 多用户字符模式下有6个默认tty,使用ctrl+alt+Fn切换,init 5会默认占用一个tty进行登录(通常时F1的tty),当登录一个用户时再占用另一个tty
- Linux本身没有图形界面,Linux现在的图形界面系统只是Linux下的应用程序
- X是协议,不是具体的某个软件,它用于实现图形化界面,X协议主要由X应用程序和X服务器组成,X应用程序告诉服务器如何在屏幕上画图,XFree86是X服务器程序
- WM(Window Manager,窗口管理器)的作用就是窗口的最大化、最小化、移动、关闭等。而这些不是X服务器来负责完成的。WM有GNOME和KDE。
- X客户端程序
- KDE、GNOME、QT和GTK直接关系:QT基础上实现的窗口管理器叫KDE,在GTK基础上实现的窗口管理器叫GNOME。KDE和GNOME并不只是窗口管理器,同时提供了桌面、菜单等等
命令:
- init n:以n启动级重启主机
- startx:打开默认窗口管理器
- xinit:打开图形化界面,基于X server
- twm,gnome-session,startkde:分别启动X服务器自带的twm窗口管理器、gnome窗口管理器或KDE窗口管理器
- systemctl set-default xxx:设置默认启动级,graphical.target对应5,multi-user.target对应3
systemctl是systemd命令组的主命令,systemd是为了取代传统init的启动方式,详见linux常见命令systemd
开机启动脚本
三种开机启动设置方法
/etc/rc.d/rc.local
文件将会在开机时运行,所以可以在这个文件里面运行你要运行的脚本crontab
添加@reboot
时间标记的条目- systemd方式,在
/etc/systemd/system/
中添加Unit配置文件比如命名为auto_run_script.service
,并编辑
|
|
然后运行命令
|
|
ubuntu卸载firefox,安装chrome
卸载firefox
|
|
安装chrome
去官网下载或者直接wget deb包,然后dpkg -i安装
|
|
chrome不支持自动更新,如果要升级则把安装chrome步骤再做一遍
IO模型
阻塞与非阻塞
阻塞:调用方等待被调用方响应
非阻塞:不等待
同步与异步
同步:被调用方处理完后才响应
异步:被调用方收到请求后先返回已收到,处理完后通过回调方式通知调用方
5种IO模型
- 阻塞IO
- 非阻塞IO:轮询
- (阻塞同步)IO复用
- (非阻塞异步)信号驱动IO
- (非阻塞异步)异步IO
select,poll和epoll
IO多路复用的三种方式
select | poll | epoll | |
---|---|---|---|
操作方式 | 遍历 | 遍历 | 回调 |
底层实现 | 数组 | 链表 | 哈希表 |
IO效率 | 每次调用都进行线性遍历,时间复杂度为O(n) | 每次调用都进行线性遍历,时间复杂度为O(n) | 事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪fd放到rdllist里面。时间复杂度O(1) |
最大连接数 | 1024(x86)或 2048(x64) | 无上限 | 无上限 |
fd拷贝 | 每次调用select,都需要把fd集合从用户态拷贝到内核态 | 每次调用poll,都需要把fd集合从用户态拷贝到内核态 | 调用epoll_ctl时拷贝进内核并保存,之后每次epoll_wait不拷贝 |
配置代理
分为用户代理和所有用户的代理配置
用户代理通常是在用户主目录里面添加配置文件,所有用户代理通常是在etc目录里面修改配置文件
ubuntu配置代理
.bashrc
|
|
另外安装完证书后,系统设置里面也要使用你宿主机的地址和代理端口号
注意主机防火墙的问题
对于连接到charles的虚拟机还需要安装证书
当配置的代理服务器需要身份验证时配置为以下形式:
|
|
kali
kali使用proxychains4或者proxychains,仅需要配置proxychains4.conf即可。
使用代理运行程序时将命令放到proxychains4后面即可。
|
|
输入法切换快捷键
win+space
启动主机转发功能
仅对本次开机开启
|
|
长期开启
修改/etc/sysctl.conf中net.ipv4.ip_forward为1
配置环境变量
基本都是在配置文件中添加:export PATH=$PATH:xxx
- 用户级别环境变量定义文件:
~/.bashrc
、~/.profile
(部分系统为:~/.bash_profile
) - 系统级别环境变量定义文件:
/etc/bashrc
、/etc/profile
(部分系统为:/etc/bash_profile
)、/etc/environment
job和进程
job相对于shell,进程相对于操作系统
shell执行的命令就是job,一个job就是一个进程,但是该进程可能有多个子进程,子进程不属于job且不能被当前shell看见,所以一个job对应一个进程组
job分为后台作业和前台作业(占用输入输出)
作业的操作:
- ctl+z:暂停前台(终端窗口中)正在运行job
- ctl+c:终止前台(终端窗口中)正在运行job
- jobs: 显示当前所有的job,包括正在运行的和暂停的
- fg+N : 让暂停的job在前台运行,N=jobs 命令查询的的job号
- bg+N : 让暂停的job在后台运行,N=jobs 命令查询的的job号
- kill %N : 终止job(与kill 进程不一样,这里有%),N=jobs 命令查询的的job号
僵尸进程和孤儿进程
僵尸进程:fork后,子进程结束,父进程没有调用wait或waitpid来获取子进程状态信息,子进程的进程描述符仍保存在系统中,会占用进程号
孤儿进程:fork后,父进程结束,子进程成为孤儿进程且被init进程收养,孤儿进程没有什么危害
解决僵尸进程的方法
- 父进程wait或waitpipd
- 子进程结束时给父进程发送信号,父进程信号处理函数中调用wait或waitpid
/proc/stat
linux里一切皆文件
这个目录的文件存储进程信息,top就是通过读取该文件夹的文件来显示进程信息
将已经运行的程序添加到nohup
将进程添加到nohup可以在退出当前shell后继续运行
stackoverflow 如何将已经运行的进程置于 nohup 下?
有两种方式
- bash下:disown -h [job-spec],需要提前使用ctrl+z将进程放到后台
- unix下:nohup -p pid
查看进程的信号处理
|
|
linux namespace
命名空间和cgroups是软件容器化(想想 Docker)新趋势所依赖的两种主要内核技术
- cgroups是一种计量和限制机制,它们控制您可以使用多少系统资源(CPU、内存)
- 另一方面,命名空间限制了可以看到的内容
Linux 内核提供了 6 种命名空间:pid、net、mnt、uts、ipc和user。本文只关注网络命名空间。
网络命名空间
网络命名空间为命名空间内的所有进程提供全新的网络堆栈。这包括网络接口、路由表和iptables 规则。
创建命名空间:ip netns add ns1
,创建命名空间后,ip 命令会在/var/run/netns下为其添加一个绑定挂载点。
列出系统中可用的命名空间:ls /var/run/netns
或ip netns
命名空间中执行命令:ip netns exec ns1 [command]
命名空间中的接口可以启动和关闭:ip link set dev lo up
和ip link set dev lo down
通过veth 对将命名空间与根命名空间进行通信。创建一个veth 对。接口v-eth1将保留在根网络命名空间内,而其对等节点v-peer1将移至ns1命名空间
|
|
为两个接口设置 IPv4 地址并启动它们
|
|
修改路由表,将根命名空间作为默认路由
|
|
主机启动ipv4转发并修改防火墙iptable
|
|
之后命名空间ns1就可以ping通外网了
结论
网络命名空间以及 Linux 内核提供的其他容器化技术是一种轻量级的资源隔离机制。附加到网络名称空间的进程可以看到自己的网络堆栈,同时不会干扰系统网络堆栈的其余部分。
系统log
/var/log/messages,系统调用的log
查看系统信息
|
|
启动程序和自动恢复程序
启动程序有两种方式
- 新建子shell来非阻塞启动程序:
sh xxx.sh
- 直接调用阻塞式启动程序:
./xxx.sh
将一个程序写到一个死循环shell里面,由于是阻塞式调用,程序死后会自动重启
|
|
查看进程信息
|
|
-l查看软连接的dst
CPU负载load和CPU利用率usage
这两个值都是定期采样(sample)统计得到的。在某个时间点,cpu状态是离散的,要么是忙,要么是闲,不可能是32%程度的忙,所以只能是一个时间段内,采样统计得到这样的值。
- cpu usage:采样点(忙) / 总采样点(忙+闲) * 100%
- cpu load:(runnable process等待队列长度 + 正在被执行的process)在采样时间内的平均值