/proc和/sys
- /proc存放内核参数 基本只读,但是/proc/sys可读写
- /sys 某些目录可读写,可以写入某些参数修改硬件的工作属性
sysctl命令
- 修改/proc/sys属性
- sysctl net.ipv4.ip_forword=1
- 配置文件
- /etc/sysctl.conf
- net.ipv4.ip_forword=1
- /etc/sysctl.conf
Linux Permission
umask
- 文件
- 默认文件权限 = 0666 - umask值,如果文件默认会有x权限则权限自动+1
- 目录
- 默认目录权限= 0777 - umask值
common r,w,x
- 文件
- r,w,x 可读,可写,可执行
- 目录
- r 可以ls列出其中文件
- w 可以在此目录创建文件
- x 可以进入此目录
4. 注意 必须能进入此目录才有列出此目录的权限,也就是说只有r或者w权限什么都干不了。目录的权限基于x
UID,GID and S Permission
Linux Modules
modules file
- /lib/modules/$kernel_version/modules/*.ko
lsmod
- read /proc/modules
modprobe(rmmod insmod)
-
conf file
- /etc/modules 此文件写开机载入的内核模块
- kernel modules to load at boot time
- /etc/modprobe/*.conf 黑名单等
- /etc/modules 此文件写开机载入的内核模块
-
manual
- man modprobe modprobe.d modules
modinfo
depmod
Linux Process
signal
- 手册
- man 7 signal
GRUB2
Vmlinz
- 手册
- man dracut.cmdline
- 所属包:dracut-core
- man dracut.cmdline
Initrd
privot_root
Systemd
systemd和 unix system V release 4
- systemd
- 手册
- man bootup(systemd)
- 所属包:systemd package
- man bootup(systemd)
- 手册
- unix system V release 4
- 手册
- man boot
- 所属包:manpages package
- man boot
- 手册
systemd
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
http://www.jinbuguo.com/systemd/systemd.service.html
-
配置文件存放
- system mod (–system)
- /lib/systemd/system
- units of installed packages
- /run/systemd/system
- Runtime units
- /lib/systemd/system
- Units of installed packages
- /lib/systemd/system
- user mode (–user)
- system mod (–system)
-
相关手册
-
systemd.directives
-
systemd-system.conf
-
systemd.unit(配置文件的通用选项Unit和Install) --大小写敏感
-
[Unit] Requires= ;此单元必须依赖的其他选项,依赖被停止,此单元也要被停止 Requisite= ;在此单元启动时,这些单元必须已经启动成功了,不会启动那些没成功启动的依赖,此单元直接陷入失败状态。 Wants= ;此单元被启动时,这里列的单元尽可能的启动 After= Before=file-system.target ;在f-s.t之前启动 ;强制指定单元先后运行的顺序 BindsTo= ;依赖比Requires更强,只要BindTo的单元停止或者崩溃,此单元也会被停止。 [Install]
-
-
systemd.service
-
一个典型的配置---传统的服务 #This man page lists the common configuration options of all the unit types [Unit] Description="Mysql Service" [Service] ;Type=oneshot ;以quit状态运行(可停止的一次性服务) ;RemainAfterExit=yes Type=forking ;以running状态运行 RemainAfterExie=yes ExecStart=+/usr/local/mysql/support-files/mysql.server start ExecStop=+/usr/local/mysql/support-files/mysql.server start [Install] WantedBy=multi-user.target #http://www.jinbuguo.com/systemd/systemd.service.html#
-
-
-
systemd 服务的4种状态
- enabled:已建立启动链接
- disabled:没建立启动链接
- static:该配置文件没有
[Install]
部分(无法执行),只能作为其他配置文件的依赖 - masked:该配置文件被禁止建立启动链接
dynamic linked library
ldconfig
-
ldconfig
-
ldconfig的作用
- 将.so文件载入cache中
-
手册
- man ldconfig
- man ld.so
-
配置文件
- /etc/ld.so.conf
-
其他文件
-
/etc/ld.so.cache(记录载入高速缓存的so)
- 使用ldconfig -p读取
-
-
-
.so 和 .a的含义
gcc’s enviroment variables
gcc
ld-linux
- 手册
- man ld-linux
- 变量
- LD_ASSUME_KERNEL
- LD_ASSUME_KERNEL can be used to cause the dynamic linker to assume that it is running on a system with a different kernel ABI version
- LD_BIND_NOW
- LD_LIBRARY_PATH
- LD_PRELOAD
- LD_ASSUME_KERNEL
Network
network
- ifconfig(没有配置文件改内核得) 和ip
- netplan
- ifup/ifdown(利用ip等基础工具进行工作)
- 配置文件
- /etc/network/interfaces
- 定义网络接口
- /run/network/ifstate
- 当前网络状态
- /etc/network/interfaces
- 手册
- man ifconfig
- man interfaces
- 配置文件
- /etc/resolv.conf
- 其他信息
- systemd-resolve --status
- 其他信息
- route
- ss和netstat
iptables/netfilter
-
iptables
-
地址转换-----一次地址转换需要一次目标地址转换和一次源地址转换。
- 目标地址转换( 刚进入路由就要改目标地址,否则就会直接做出路由决策,做出路由决策就会使得此包进入此机进程(然后可能就会丢弃))
- 源地址转换(出去路由的时候更改)
-
5个hook函数
- prerouting
- route
- input
- output
- forword
- postrouting
-
5个规则链
- PREROUTING
- ROUTE
- INPUT
- OUTPUT
- FORWORD
- POSTROUTING
-
几个功能(表)
- filter
- INPUT
- OUTPUT
- FORWORD
- nat
- PREROUTE
- (OUTPUT)
- POSTROUTE
- mangle(拆开 修改 再封装,改ttl值等)
- PREROUTING
- INPUT
- OUTPUT
- FORWORD
- POSTROUTING
- raw(不做任何修改)
- PROROUTING
- OUTPUT
- filter
-
规则链上的表优先次序
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sxpi6zTd-1617889122355)(picture/image-20200419122401301.png)]
-
匹配标准
- 通用匹配(只依赖iptables自身)
- 扩展匹配(需要使用/lib/iptables/*.so 扩展模块)
- 隐含扩展 (不需要明确指定具体使用模块)
- 显示扩展 (需要指明使用哪个模块)
-
String process
sed 流编辑器
- sed总使用方式(sef 是一个行编辑器 vim 是一个全屏编辑器 )
- sed [option]’ AddressCommand’ filename 单引号不是必须的
- Address(匹配行)的几种表示方法:
- 默认为文本文件中所有行
- 1,100 匹配1到100行
- 匹配特定的行
- 1 匹配第一行
- $ 匹配最后一行
- $-1 匹配倒数第二行
- 3, +34 表示从第3行一直到第3行以后的34行
- /^root/ 以root 开头的行 // 之间的为正则表达式 // 不可省略
- /root/,/$/匹配第一个以root开头的行到最后一个空白行之间的行
- Command
- = 打印 匹配到的行的行号
- d 删除模式空间中匹配到的行
- p 显示模式空间中匹配到的行
- a\hello 在匹配到的行后插入一行 hello
- a\hello\nhello linux 表示插入2行了
- i\hello 在匹配的行前插入hello
- r $filename 将文件内容添加到匹配到的行
- w $filename 将模式空间的内容重新保存到filename文件中
- s/partten/string/modifier 查找并替换 前2个//之间表示要查找什么 后2个斜线表示要替换为什么
- 默认情况下 每行只替换第一次被匹配到的字符
- 如果需要全部替换 需要加修饰符(modifier)
- 修饰符 g 表示全局替换
- 修饰符 i 表示查找时忽略字符大小写
- 如果需要全部替换 需要加修饰符(modifier)
- partten 可以用正则表达式 但是string 不行(但string 中可以使用&引用pattern)
- string 中可以使用& 引用 partten
- 还可以使用后向引用 s/\(partten\)/\1string/ \1 \(\) 就是后向引用
- /// 这甚至也不是必须的可以换成 ###, @@@等(一般的特殊字符 字母是不行的)选项
- 默认情况下 每行只替换第一次被匹配到的字符
- -r
- 选项
- -n,–quiet,–silent 使用静默模式 也就是不显示模式空间中的内容
- -i 直接修改源文件
- -e 可以指定多个 AddressCommand(这里也叫作他脚本)
- 比如 sed -e AddressCommand -e AddressCommand filename
- -f 指定一个含有AddressCommand的文件
grep 文本过滤器
awk 报告生成器
FS Filed Separater
OFS Output Filed Separater
RS Record Separater
ORS Output Record Separater
-
基本格式
- awk [options] ‘script’ files1 files2,…
- awk [options] 'Pattern {action} ’ files1 files2…
-
awk 基本原理
- awk在处理文本时 是一行行处理的
- 使用$0(整行) $1等引用这个分隔的字符
- awk在处理文本时 是一行行处理的
-
awk语言
-
内置函数
- print 简单的打印命令
- printf 强大的打印函数,支持格式化输出
- sub(reg,replace,string)
- 字符替换 string默认为$0 可省略
-
内置变量
-
记录变量
- FS Filed Separater
- 指定输入分隔符 和-F效果一样 默认为空白字符
- OFS Output Filed Separater
- RS Record Separater
- 指定输入换行符 默认为"\n"
- ORS Output Record Separater
- FS Filed Separater
-
数据变量
- NR The Number of Input Record
- awk 已经处理的行数
- 如果awk传入了多个文件 则为多个文件的行数和
- awk 已经处理的行数
- FNR
- 记录当前这一文件被awk处理的总行
- NF Number Of Field
- 统计正在处理的当前行有多少字段
- 注意
- $NF表示第NF个字段的值 其他变量类似
- ARGV
- ARGC
- FILENAME
- ENVIRON
- NR The Number of Input Record
-
用户字定义变量
-
方法1
- 在命令行中使用-v选项
-
方法2
-
在BEGIN中 设置变量
-
#可以验证awk 是一行行处理的 awk 'BEGIN{z="hello"} {print z}' /etc/passwd
-
-
-
-
awk 操作符/赋值操作符/比较操作符
- 赋值操作符
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M7Ie6V3w-1617889122358)(image/image-20210408204314391.png)]
- 比较操作符
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6S0jq3A5-1617889122360)(image/image-20210408204301604.png)]
- 赋值操作符
-
awk 模式类型
-
正则表达式 /regular expression/
-
awk -F: '/^r/{print $1}' /etc/passwd
-
-
表达式
-
awk -F: '$3>500 {print $1,$3}' /etc/passwd
-
awk -F: '$7~"bash"{print $1,$3,$7}' /etc/passwd
-
-
Ranges 指定匹配范围
-
awk -F: '1,7{print $1}' /etc/passwd
-
awk -F: '/^r/,/^m/{print $1}' /etc/passwd
-
-
BEGIN/END 特殊模式,只在awk 命令运行之前和结束之后运行一次
-
awk -F: 'BEGIN{print "user passwd"} END{print "thanks you"}{print $1,$2}' /etc/passwd
-
-
Empty 空模式
- 匹配任意行
-
-
awk 常见Action
- Expression
- Control Statement
- Compound Statement
- Input Statement
- Output Statement
-
awk 数组
-
从1开始
-
可以设置非数值
-
#统计shell的使用次数 awk -F: '{shell[$NF]++ }END{for(i in shell) {print i,shell[i]}}' /etc/passwd
-
-
-
-
-
选项
- -F 指定分隔符
-
举例
-
awk '.*main.* {print $1}' hello.c
-
#BEGIN 为PATTERN awk -F ":" 'BEGIN{OFS="#"} {print $1,$2,$2}' /etc/passwd
-
cut 剪切
paste
- 主要功能
- 以列合并文件
- 选项
- -d
sort
- 主要功能
- 以行排序文本
uniq
- 主要功能
- 以行去重
shuf
- 主要功能
- 以行打乱文本
Shell Logic Process
-
example
-
for i in `seq 1 20`; do echo $i done
-
for i in {1..20..1};do echo $i done
-
Bash Conf
-
what is login shell
- A login shell is one whose first character of argument zero is a -(su - ), or one started with the --login option.
- man bash /INVOCATION
- other : login command ( begin session on the system)
- A login shell is one whose first character of argument zero is a -(su - ), or one started with the --login option.
-
interactive login shell configure file(ubuntu)
- systemwide
- /etc/profile—>…—>/etc/bash.bash.logout
- personal
- ~/.bash_profile + ~/.bash_login + ~/.profile —> ~/.bash_logout
- in that order, and reads and executes command from the first one that exists and is readable
- ~/.bash_profile + ~/.bash_login + ~/.profile —> ~/.bash_logout
- systemwide
-
interactive per-interactive-shell configure file
- systemwide
- /etc/bash.bashrc
- personal
- ~/.bashrc
- systemwide
-
login shell 与你输入密码登录还是不输入密码没有关系
Bash解析器引号
-
在命令后面的参数加双引号
-
会使得shell不解析* 等glob 扩展
-
测试使用的c语言—注意: c 语言需要使用strcmp 比较字符串是否相等。
-
#include <stdio.h> #include <string.h> int main(int argc,char * argv[]){ if (strcmp("a*c",argv[1]) == 0){ printf("%s",argv[1]); } return 0; }
- 注意如果shell没有解析到参数(当前文件夹下没有符合a*c的文件) 则会将a*c直接传入程序。
- 转移符号? 双引号嵌套??
- 双引号嵌套shell也会解析内部的双引号
- 转移符号? 双引号嵌套??
- 注意如果shell没有解析到参数(当前文件夹下没有符合a*c的文件) 则会将a*c直接传入程序。
-
双引号里面的shell变量, 反引号执行命令等是可以被shell解析的
-
加了双引号的参数,shell会解析转义符号
-
shell会解析嵌套双引号内的内容
-
-
-
会使得命令知道这是一个整体参数。
- 如果某个参数里面有空格就会很有效。
-
不解析各种展开
-
-
在命令后面的参数增加单引号
- 加了单引号的参数,shell不解析shell’变量 ,不解析反引号执行命令,shell不解析global 扩展
- 加了单引号的参数,shell不解析转义符号。
- 不解析各种展开
Bash 展开
花括号展开
- 字符串
echo a{d,c} e
- ade ace
- 序列表达式
- 序列表达式格式
- {X…Y[…INCR]} INCR为步进的值
- X,Y为数字时 INCR默认为1或者-1
echo {01..100}
- 当X,Y以0开头时,shell会将生成结果保持相同的宽度(不够以0填充)
- X,Y为单个字母时 INCR默认为1或者-1
echo {a..z}
- 注意此时X,Y必须同时为小写字母或者同时为大写字母
- X,Y为数字时 INCR默认为1或者-1
- {X…Y[…INCR]} INCR为步进的值
- 其他
- 花括号展开在其他展开之前进行,任何对于其他展开有特殊意义的字符都被保留
- 序列表达式格式
波浪线展开
shell参数展开
Bash的几种Shell脚本调用
- source scriptName == . scriptName
- 脚本文件内容在当前shell中执行
- ./scriptName == bash scriptName
- 脚本文件内容在子shell中执行
- ((command))
- 调用子shell执行
Bash的 PS系列变量
-
PS0 每次命令执行后 输出的提示
-
PS1 命令提示
-
PS2 行连接的时候的提示
-
默认为>
-
举例
-
echo \ #执行之后 就会显示行连接符
-
-
-
PS3 选择时的提示
-
默认为#?
-
举例
-
PS3="Chose Your Selection: " select var in {"a","b"}; do echo $var ; done 1) a 2) b Chose Your Selection:
-
-
-
PS4 debug的时候的提示
-
举例
-
export PS4="debug line" bash -x bash.sh # 执行set 也会出现PS4那一串
-
-
Bash 数组
-
#数组的定义 RS=("192.168.31.1" "192.168.31.2") #数组的引用 ${RS[0]} #得到数组所有元素 好像没啥区别 ${RS[*]} ${RS[@]} #数组的数量 # #号表示得到数组的某些长度信息 #获得数组第一个元素的字符长度 #默认情况下 如果RS不加index 表示数组的第一个元素 ${#RS[0]} == ${#RS} == 12 字符串的数量 #获得数组的长度 ${#RS[*]} 或者 ${#RS[@]}
Linux 系统中的提示
motd message of the day
- /etc/issue
- /etc/issue.net
- /etc/motd
- /etc/update-motd.d/*
- /etc/update-motd/10-uname会脚本输出内核等信息
- run-parts命令可以立即执行这里面的脚本
- /etc/update-motd/10-uname会脚本输出内核等信息
- /etc/update-motd.d/*
- /etc/ssh/sshd_config
- PrintMotd no
- PrintlastLog no
- bash conf echo
- /etc/profile.d/ wifi-check.sh
Linux 日志信息
Desktop Env
X11
xorg
- 配置文件
- /etc/X11/xorg.conf
- /etc/X11/xorg.conf-4
- /etc/xorg.conf
- /usr/etc/xorg.conf
- /usr/lib/X11/xorg.conf
- 配置文件目录
- /etc/X11/xorg.conf.d
- /etc/X11/xorg.conf.d-4
- /etc/xorg.conf.d
- /usr/etc/xorg.conf.d
- /usr/lib/X11/xorg.conf.d
Xfce
- 包
- 配置文件
hostname
- 立即修改,重启失效
- hostname string
- 持续修改,重启生效
- edit /etc/hostname
- 立即生效
- hostname -F /etc/hostname
Shell Script
-
获取文件行数
-
# $的含义为匹配最后一行, =的含义为打印行号 sed -n '$=' filename
-
awk 'END{print NR}' filename
-
awk {'print NR}' filename | tail -n1
-
wc -l filename
-
-
查找某个文件夹下面的文件是否包含某个字符串
-
find . -type f | xargs grep "someString"
-
//这个由于参数是一个个的传入grep 所以grep不会列出文件名。不建议使用,而且还会fork多次grep find . -type f | xargs grep "someString"
-
-
-
循环指定次数
-
for i in `seq 1 20`; do echo $i done
-
//分别为开始位置 结束位置 步增 //不支持使用变量 for i in {1..20..1};do echo $i done
-
//支持使用变量 for((i=1;i<=20;i++));do echo $i done
-
-
sh 判断
-
比较数值
-
#这里UID是readonly 变量所以可以使用。 不建议在自定义的变量上使用这种数值比较 容易自定义变量没有赋值 造成语法错误 if [ 0 -eq $UID ]; then echo "you are root user" fi # -ne -gt -lt -
-
-
-
find 查找除了某些文件夹下的文件
-
#缺点 sh无法设置扩展匹配 #如果使用bash,首先开启扩展 shopt -s extglob find ./!(sys|proc) -name sshd_config #注意find 的-name 不支持正则 只支持global 建议加上单引号
2. ```shell #缺点 命令太长 find . -path ./sys -prune -path ./proc -prune -o -name com.termux #prune的含义为如果此文件为目录 不进入此目录 #这里整个命令的含义为只搜寻./sys 和./proc目录 但是不进入这2个目录。 #然后其他的path 执行-o(or的意思) 后面的搜索com.termux的操作。
-
3. ```shell
find . -name com.termux ! -path ./sys -path ./proc
-
统计某个字符出现的次数
-
someString | sort | uniq -c #uniq 的作用是报告重复行
-
-
生成随机数|字母|
-
echo $RANDOM
-
Shell 判断
- test (也叫 [ ) 外置命令
- 字符串的比较
- [ String1 = String2 ]
- 数值的比较
- -eq /
- 字符串的比较
- [[ 内置命令
- 特点
- 参数不会进行展开
- 可以匹配表达式
- 特点
SSH
- private key
- ~/.ssh/config 设置特定域名的特定私钥
- ssh-keygen
- ssh-keygen -A
- 可以生成缺少的/etc/ssh/ssh_host_rsa_key等私钥文件
- ssh-keygen -A
Git操作
-
远程仓库
- git remote add/rename/set-url
-
push && pull
-
branch
1.