那些记不住的Linux知识点

/proc和/sys

  1. /proc存放内核参数 基本只读,但是/proc/sys可读写
  2. /sys 某些目录可读写,可以写入某些参数修改硬件的工作属性

sysctl命令

  1. 修改/proc/sys属性
    1. sysctl net.ipv4.ip_forword=1
  2. 配置文件
    1. /etc/sysctl.conf
      1. net.ipv4.ip_forword=1

Linux Permission

umask

  1. 文件
    1. 默认文件权限 = 0666 - umask值,如果文件默认会有x权限则权限自动+1
  2. 目录
    1. 默认目录权限= 0777 - umask值

common r,w,x

  1. 文件
    1. r,w,x 可读,可写,可执行
  2. 目录
    1. r 可以ls列出其中文件
    2. w 可以在此目录创建文件
    3. x 可以进入此目录
      4. 注意 必须能进入此目录才有列出此目录的权限,也就是说只有r或者w权限什么都干不了。目录的权限基于x

UID,GID and S Permission

Linux Modules

modules file

  1. /lib/modules/$kernel_version/modules/*.ko

lsmod

  1. read /proc/modules

modprobe(rmmod insmod)

  1. conf file

    1. /etc/modules 此文件写开机载入的内核模块
      1. kernel modules to load at boot time
    2. /etc/modprobe/*.conf 黑名单等
  2. manual

    1. man modprobe modprobe.d modules

modinfo

depmod

Linux Process

signal

  1. 手册
    1. man 7 signal

GRUB2

Vmlinz

  1. 手册
    1. man dracut.cmdline
      1. 所属包:dracut-core

Initrd

privot_root

Systemd

systemd和 unix system V release 4

  1. systemd
    1. 手册
      1. man bootup(systemd)
        1. 所属包:systemd package
  2. unix system V release 4
    1. 手册
      1. man boot
        1. 所属包:manpages package

systemd

http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

http://www.jinbuguo.com/systemd/systemd.service.html

  1. 配置文件存放

    1. system mod (–system)
      1. /lib/systemd/system
        1. units of installed packages
      2. /run/systemd/system
        1. Runtime units
      3. /lib/systemd/system
        1. Units of installed packages
    2. user mode (–user)
  2. 相关手册

    1. systemd.directives

    2. systemd-system.conf

    3. systemd.unit(配置文件的通用选项Unit和Install) --大小写敏感

      1. [Unit]
        Requires=  ;此单元必须依赖的其他选项,依赖被停止,此单元也要被停止
        Requisite=  ;在此单元启动时,这些单元必须已经启动成功了,不会启动那些没成功启动的依赖,此单元直接陷入失败状态。
        Wants=    ;此单元被启动时,这里列的单元尽可能的启动
        After=  
        Before=file-system.target  ;在f-s.t之前启动
        ;强制指定单元先后运行的顺序
        BindsTo= ;依赖比Requires更强,只要BindTo的单元停止或者崩溃,此单元也会被停止。
        [Install]
        
    4. systemd.service

      1. 一个典型的配置---传统的服务
                 #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#
        
  3. systemd 服务的4种状态

    1. enabled:已建立启动链接
    2. disabled:没建立启动链接
    3. static:该配置文件没有[Install]部分(无法执行),只能作为其他配置文件的依赖
    4. masked:该配置文件被禁止建立启动链接

dynamic linked library

ldconfig

  1. ldconfig

    1. ldconfig的作用

      1. 将.so文件载入cache中
    2. 手册

      1. man ldconfig
      2. man ld.so
    3. 配置文件

      1. /etc/ld.so.conf
    4. 其他文件

      1. /etc/ld.so.cache(记录载入高速缓存的so)

        1. 使用ldconfig -p读取
  2. .so 和 .a的含义

gcc’s enviroment variables

gcc

ld-linux

  1. 手册
    1. man ld-linux
  2. 变量
    1. LD_ASSUME_KERNEL
      1. 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
    2. LD_BIND_NOW
    3. LD_LIBRARY_PATH
    4. LD_PRELOAD

Network

network

  1. ifconfig(没有配置文件改内核得) 和ip
  2. netplan
  3. ifup/ifdown(利用ip等基础工具进行工作)
    1. 配置文件
      1. /etc/network/interfaces
        1. 定义网络接口
      2. /run/network/ifstate
        1. 当前网络状态
    2. 手册
      1. man ifconfig
      2. man interfaces
  4. /etc/resolv.conf
    1. 其他信息
      1. systemd-resolve --status
  5. route
  6. ss和netstat

iptables/netfilter

  1. iptables

    1. 地址转换-----一次地址转换需要一次目标地址转换和一次源地址转换。

      1. 目标地址转换( 刚进入路由就要改目标地址,否则就会直接做出路由决策,做出路由决策就会使得此包进入此机进程(然后可能就会丢弃))
      2. 源地址转换(出去路由的时候更改)
    2. 5个hook函数

      1. prerouting
      2. route
        1. input
        2. output
      3. forword
      4. postrouting
    3. 5个规则链

      1. PREROUTING
      2. ROUTE
        1. INPUT
        2. OUTPUT
      3. FORWORD
      4. POSTROUTING
    4. 几个功能(表)

      1. filter
        1. INPUT
        2. OUTPUT
        3. FORWORD
      2. nat
        1. PREROUTE
        2. (OUTPUT)
        3. POSTROUTE
      3. mangle(拆开 修改 再封装,改ttl值等)
        1. PREROUTING
        2. INPUT
        3. OUTPUT
        4. FORWORD
        5. POSTROUTING
      4. raw(不做任何修改)
        1. PROROUTING
        2. OUTPUT
    5. 规则链上的表优先次序

      1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sxpi6zTd-1617889122355)(picture/image-20200419122401301.png)]
    6. 匹配标准

      1. 通用匹配(只依赖iptables自身)
      2. 扩展匹配(需要使用/lib/iptables/*.so 扩展模块)
        1. 隐含扩展 (不需要明确指定具体使用模块)
        2. 显示扩展 (需要指明使用哪个模块)

String process

sed 流编辑器

  1. sed总使用方式(sef 是一个行编辑器 vim 是一个全屏编辑器 )
    1. sed [option]’ AddressCommand’ filename 单引号不是必须的
  2. Address(匹配行)的几种表示方法:
    1. 默认为文本文件中所有行
    2. 1,100 匹配1到100行
    3. 匹配特定的行
      1. 1 匹配第一行
      2. $ 匹配最后一行
      3. $-1 匹配倒数第二行
    4. 3, +34 表示从第3行一直到第3行以后的34行
    5. /^root/ 以root 开头的行 // 之间的为正则表达式 // 不可省略
    6. /root/,/$/匹配第一个以root开头的行到最后一个空白行之间的行
  3. Command
    1. = 打印 匹配到的行的行号
    2. d 删除模式空间中匹配到的行
    3. p 显示模式空间中匹配到的行
    4. a\hello 在匹配到的行后插入一行 hello
      1. a\hello\nhello linux 表示插入2行了
    5. i\hello 在匹配的行前插入hello
    6. r $filename 将文件内容添加到匹配到的行
    7. w $filename 将模式空间的内容重新保存到filename文件中
    8. s/partten/string/modifier 查找并替换 前2个//之间表示要查找什么 后2个斜线表示要替换为什么
      1. 默认情况下 每行只替换第一次被匹配到的字符
        1. 如果需要全部替换 需要加修饰符(modifier)
          1. 修饰符 g 表示全局替换
          2. 修饰符 i 表示查找时忽略字符大小写
      2. partten 可以用正则表达式 但是string 不行(但string 中可以使用&引用pattern)
        1. string 中可以使用& 引用 partten
        2. 还可以使用后向引用 s/\(partten\)/\1string/ \1 \(\) 就是后向引用
      3. /// 这甚至也不是必须的可以换成 ###, @@@等(一般的特殊字符 字母是不行的)选项
    9. -r
  4. 选项
    1. -n,–quiet,–silent 使用静默模式 也就是不显示模式空间中的内容
    2. -i 直接修改源文件
    3. -e 可以指定多个 AddressCommand(这里也叫作他脚本)
      1. 比如 sed -e AddressCommand -e AddressCommand filename
    4. -f 指定一个含有AddressCommand的文件

grep 文本过滤器

awk 报告生成器

FS Filed Separater

OFS Output Filed Separater

RS Record Separater

ORS Output Record Separater

  1. 基本格式

    1. awk [options] ‘script’ files1 files2,…
    2. awk [options] 'Pattern {action} ’ files1 files2…
  2. awk 基本原理

    1. awk在处理文本时 是一行行处理的
      1. 使用$0(整行) $1等引用这个分隔的字符
  3. awk语言

    1. 内置函数

      1. print 简单的打印命令
      2. printf 强大的打印函数,支持格式化输出
      3. sub(reg,replace,string)
        1. 字符替换 string默认为$0 可省略
    2. 内置变量

      1. 记录变量

        1. FS Filed Separater
          1. 指定输入分隔符 和-F效果一样 默认为空白字符
        2. OFS Output Filed Separater
        3. RS Record Separater
          1. 指定输入换行符 默认为"\n"
        4. ORS Output Record Separater
      2. 数据变量

        1. NR The Number of Input Record
          1. awk 已经处理的行数
            1. 如果awk传入了多个文件 则为多个文件的行数和
        2. FNR
          1. 记录当前这一文件被awk处理的总行
        3. NF Number Of Field
          1. 统计正在处理的当前行有多少字段
          2. 注意
            1. $NF表示第NF个字段的值 其他变量类似
        4. ARGV
        5. ARGC
        6. FILENAME
        7. ENVIRON
      3. 用户字定义变量

        1. 方法1

          1. 在命令行中使用-v选项
        2. 方法2

          1. 在BEGIN中 设置变量

            1. #可以验证awk 是一行行处理的
              awk 'BEGIN{z="hello"} {print z}' /etc/passwd
              
      4. awk 操作符/赋值操作符/比较操作符

        1. 赋值操作符
          1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M7Ie6V3w-1617889122358)(image/image-20210408204314391.png)]
        2. 比较操作符
          1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6S0jq3A5-1617889122360)(image/image-20210408204301604.png)]
      5. awk 模式类型

        1. 正则表达式 /regular expression/

          1. awk -F: '/^r/{print $1}' /etc/passwd
            
        2. 表达式

          1. awk -F: '$3>500 {print $1,$3}' /etc/passwd
            
          2. awk -F: '$7~"bash"{print $1,$3,$7}' /etc/passwd
            
        3. Ranges 指定匹配范围

          1. awk -F: '1,7{print $1}' /etc/passwd
            
          2. awk -F: '/^r/,/^m/{print $1}' /etc/passwd
            
        4. BEGIN/END 特殊模式,只在awk 命令运行之前和结束之后运行一次

          1. awk -F: 'BEGIN{print "user passwd"} END{print "thanks you"}{print $1,$2}' /etc/passwd
            
        5. Empty 空模式

          1. 匹配任意行
      6. awk 常见Action

        1. Expression
        2. Control Statement
        3. Compound Statement
        4. Input Statement
        5. Output Statement
      7. awk 数组

        1. 从1开始

        2. 可以设置非数值

          1. #统计shell的使用次数
            awk -F: '{shell[$NF]++ }END{for(i in shell) {print i,shell[i]}}' /etc/passwd
            
  4. 选项

    1. -F 指定分隔符
  5. 举例

    1. awk '.*main.* {print $1}' hello.c
      
    2. #BEGIN 为PATTERN
      awk -F ":" 'BEGIN{OFS="#"} {print $1,$2,$2}' /etc/passwd
      

cut 剪切

paste

  1. 主要功能
    1. 以列合并文件
  2. 选项
    1. -d

sort

  1. 主要功能
    1. 以行排序文本

uniq

  1. 主要功能
    1. 以行去重

shuf

  1. 主要功能
    1. 以行打乱文本

Shell Logic Process

  1. example

    1. for i in `seq 1 20`; do 
      	echo $i
      done
      
    2. for i in {1..20..1};do
          echo $i
      done
      

Bash Conf

  1. what is login shell

    1. A login shell is one whose first character of argument zero is a -(su - ), or one started with the --login option.
      1. man bash /INVOCATION
    2. other : login command ( begin session on the system)
  2. interactive login shell configure file(ubuntu)

    1. systemwide
      1. /etc/profile—>…—>/etc/bash.bash.logout
    2. personal
      1. ~/.bash_profile + ~/.bash_login + ~/.profile —> ~/.bash_logout
        1. in that order, and reads and executes command from the first one that exists and is readable
  3. interactive per-interactive-shell configure file

    1. systemwide
      1. /etc/bash.bashrc
    2. personal
      1. ~/.bashrc
  4. login shell 与你输入密码登录还是不输入密码没有关系

Bash解析器引号

  1. 在命令后面的参数加双引号

    1. 会使得shell不解析* 等glob 扩展

      1. 测试使用的c语言—注意: c 语言需要使用strcmp 比较字符串是否相等。

        1. #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;
          }
          
          1. 注意如果shell没有解析到参数(当前文件夹下没有符合a*c的文件) 则会将a*c直接传入程序。
            1. 转移符号? 双引号嵌套??
              1. 双引号嵌套shell也会解析内部的双引号
        2. 双引号里面的shell变量, 反引号执行命令等是可以被shell解析的

        3. 加了双引号的参数,shell会解析转义符号

        4. shell会解析嵌套双引号内的内容

    2. 会使得命令知道这是一个整体参数。

      1. 如果某个参数里面有空格就会很有效。
    3. 不解析各种展开

  2. 在命令后面的参数增加单引号

    1. 加了单引号的参数,shell不解析shell’变量 ,不解析反引号执行命令,shell不解析global 扩展
    2. 加了单引号的参数,shell不解析转义符号。
    3. 不解析各种展开

Bash 展开

花括号展开

  1. 字符串
    1. echo a{d,c} e
      1. ade ace
  2. 序列表达式
    1. 序列表达式格式
      1. {X…Y[…INCR]} INCR为步进的值
        1. X,Y为数字时 INCR默认为1或者-1
          1. echo {01..100}
            1. 当X,Y以0开头时,shell会将生成结果保持相同的宽度(不够以0填充)
        2. X,Y为单个字母时 INCR默认为1或者-1
          1. echo {a..z}
            1. 注意此时X,Y必须同时为小写字母或者同时为大写字母
    2. 其他
      1. 花括号展开在其他展开之前进行,任何对于其他展开有特殊意义的字符都被保留

波浪线展开

shell参数展开

Bash的几种Shell脚本调用

  1. source scriptName == . scriptName
    1. 脚本文件内容在当前shell中执行
  2. ./scriptName == bash scriptName
    1. 脚本文件内容在子shell中执行
  3. ((command))
    1. 调用子shell执行

Bash的 PS系列变量

  1. PS0 每次命令执行后 输出的提示

  2. PS1 命令提示

  3. PS2 行连接的时候的提示

    1. 默认为>

    2. 举例

      1. echo \ 
        #执行之后 就会显示行连接符
        
  4. PS3 选择时的提示

    1. 默认为#?

    2. 举例

      1. PS3="Chose Your Selection: "
        select var in {"a","b"}; do  echo $var ; done
        1) a
        2) b
        Chose Your Selection: 
        
  5. PS4 debug的时候的提示

    1. 举例

      1. export PS4="debug line"
        bash -x bash.sh
        # 执行set 也会出现PS4那一串
        

Bash 数组

  1. #数组的定义
    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

  1. /etc/issue
    1. /etc/issue.net
  2. /etc/motd
    1. /etc/update-motd.d/*
      1. /etc/update-motd/10-uname会脚本输出内核等信息
        1. run-parts命令可以立即执行这里面的脚本
  3. /etc/ssh/sshd_config
    1. PrintMotd no
    2. PrintlastLog no
  4. bash conf echo
    1. /etc/profile.d/ wifi-check.sh

Linux 日志信息

Desktop Env

X11

xorg

  1. 配置文件
    1. /etc/X11/xorg.conf
    2. /etc/X11/xorg.conf-4
    3. /etc/xorg.conf
    4. /usr/etc/xorg.conf
    5. /usr/lib/X11/xorg.conf
  2. 配置文件目录
    1. /etc/X11/xorg.conf.d
    2. /etc/X11/xorg.conf.d-4
    3. /etc/xorg.conf.d
    4. /usr/etc/xorg.conf.d
    5. /usr/lib/X11/xorg.conf.d

Xfce

  1. 配置文件

hostname

  1. 立即修改,重启失效
    1. hostname string
  2. 持续修改,重启生效
    1. edit /etc/hostname
  3. 立即生效
    1. hostname -F /etc/hostname

Shell Script

  1. 获取文件行数

    1. # $的含义为匹配最后一行, =的含义为打印行号
      sed -n '$=' filename
      
    2. awk 'END{print NR}' filename
      
    3. awk {'print NR}' filename | tail -n1
      
    4. wc -l filename
      
  2. 查找某个文件夹下面的文件是否包含某个字符串

    1. find . -type f | xargs grep  "someString"
      
      1. //这个由于参数是一个个的传入grep 所以grep不会列出文件名。不建议使用,而且还会fork多次grep
        find . -type f | xargs grep "someString"
        
  3. 循环指定次数

    1. for i in `seq 1 20`; do 
       echo $i
      done
      
    2. //分别为开始位置 结束位置 步增
      //不支持使用变量
      for i in {1..20..1};do
          echo $i
      done
      
    3. //支持使用变量
      for((i=1;i<=20;i++));do
       echo $i
      done
      
  4. sh 判断

    1. 比较数值

      1. #这里UID是readonly 变量所以可以使用。 不建议在自定义的变量上使用这种数值比较 容易自定义变量没有赋值 造成语法错误
        if [ 0 -eq $UID ]; then 
        	echo "you are root user"
        fi
        # -ne -gt -lt -
        
  5. find 查找除了某些文件夹下的文件

    1. #缺点 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
  1. 统计某个字符出现的次数

    1. someString | sort | uniq -c 
      #uniq 的作用是报告重复行
      
  2. 生成随机数|字母|

    1. echo $RANDOM
      
      

Shell 判断

  1. test (也叫 [ ) 外置命令
    1. 字符串的比较
      1. [ String1 = String2 ]
    2. 数值的比较
      1. -eq /
  2. [[ 内置命令
    1. 特点
      1. 参数不会进行展开
      2. 可以匹配表达式

SSH

  1. private key
    1. ~/.ssh/config 设置特定域名的特定私钥
  2. ssh-keygen
    1. ssh-keygen -A
      1. 可以生成缺少的/etc/ssh/ssh_host_rsa_key等私钥文件

Git操作

  1. 远程仓库

    1. git remote add/rename/set-url
  2. push && pull

  3. branch
    1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值