linux命令行工具进阶

文章目录


前言

本文记录了一些不经常用到,但在某个时刻需要用到的一些指令。

免密ssh登录到远程


提示:以下是本篇文章正文内容,下面案例可供参考

ssh免密登录,免密码登录,公私钥

在客户端执行 ssh-keygen -t rsa(或更安全的 ed25519 算法),默认在 ~/.ssh 目录生成 id_rsa(私钥)和 id_rsa.pub(公钥)。生成时可选择是否设置私钥密码增强安全性

使用 ssh-copy-id -i ~/.ssh/id_rsa.pub user@host 自动完成公钥追加到服务端 ~/.ssh/authorized_keys

查看与修改IP地址

复制代码
ifconfig <eth0> <ip> netmask <mask>

临时修改

永久修改

mount临时切换根文件系统

  1. 挂在新的根分区

    sh 复制代码
    mount /dev/dev /mnt
  2. 挂载必要的文件系统proc, sys, dev, run

    sh 复制代码
    mount --bind /dev   /mnt/dev
    mount --bind /sys   /mnt/sys
    mount --bind /proc  /mnt/proc
    mount --bind /run   /mnt/run
  3. 进入chroot环境

    sh 复制代码
    chroot /mnt
  4. 执行操作

    在chroot环境中,可以执行安装、修复等操作

  5. 退出chroot环境

    sh 复制代码
    exit
    umount /mnt/{proc,sys,dev,run}
    umount /mnt

永久切换根文件系统

switch_root /mnt /sbin/init

只有pid==1的进程才能调用该命令,切换rootfs并执行命令

loop文件

parted

sh 复制代码
# 创建gpt分区表 
parted -s <device> mklabel gpt

# 创建分区并添加label
parted -s <dev> mkpart primary 262144 1310720

# 命名分区label
parted <dev> name 1 recovery

parted -s <dev> mkpart recovery ext4 2097152s 3145727s

将文件挂载为loops设备
sudo losetup -fP <filename>
# 显示设备号
loop_file=$(losetup -j <filename>)

yes | sudo mkfs.ext4 ${loop_file}p1
yes | sudo mkfs.ext4 ${loop_file}p2
yes | sudo mkfs.ext4 ${loop_file}p3
# 取消loop的挂载
sudo losetup -d $loop_file

mbr分区创建并格式化脚本

sh 复制代码
#!/bin/bash

set -e

echo -e "hello, type the device/file path"

read disk

if [[ ! -e $disk ]]; then
   echo "磁盘设备/文件 $disk 不存在,请检查后重新输入"
   exit 1
fi

echo "manipulate $disk, are you sure?[y/n]"
read -p "(y/n):" confirm

case "$confirm" in
   y) echo "continue execution..."
     ;;
   n) echo "undo"
     exit 1
     ;;
   *) echo "invalid input"
     exit 1
     ;;
esac


echo "正在创建msdos分区表..."
parted -s $disk mklabel msdos
echo "msdos分区表创建成功"

echo "正在创建boot分区"
parted -s $disk mkpart primary fat32 2048s 264191s

echo "正在创建分区 1 262144s-1310720s recovery, 请稍等..."
parted -s $disk mkpart primary ext4 2097152s 3145727s

echo "正在创建分区 2 1312768s-7604224s system, 请稍等..."
parted -s $disk mkpart primary ext4 3145728s 9437183s

echo "正在创建分区 3 7606272s-10480000s data, 请稍等..."
parted -s $disk mkpart  primary  ext4 9437184s 60260352s

echo "正在格式化分区..."
mkfs.vfat ${disk}p1  # boot
mkfs.ext4 ${disk}p2  # recovery
mkfs.ext4 ${disk}p3  # rootfs
mkfs.ext4 ${disk}p4  # data

e2label ${disk}p1 "boot"
e2label ${disk}p2 "recovery"
e2label ${disk}p3 "rootfs"
e2label ${disk}p4 "data"

# sudo losetup -fP $disk
# loop_file=$(losetup -j $disk)
# loop_file=$(echo $loop_file | cut -d ':' -f 1 | xargs)
# echo loop dev: [$loop_file]
# yes | sudo mkfs.ext4 ${loop_file}p1
# yes | sudo mkfs.ext4 ${loop_file}p2
# yes | sudo mkfs.ext4 ${loop_file}p3
# sudo losetup -d $loop_file
echo "格式化成功"
exit 0

initramfs

制作initramfs.cpio

https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

sh 复制代码
#!/bin/sh

# Copyright 2006 Rob Landley <[email protected]> and TimeSys Corporation.
# Licensed under GPL version 2

if [ $# -ne 2 ]
then
  echo "usage: mkinitramfs directory imagename.cpio.gz"
  exit 1
fi

if [ -d "$1" ]
then
  echo "creating $2 from $1"
  (cd "$1"; find . | cpio -o -H newc ) > "$2"
else
  echo "First argument must be a directory"
  exit 1
fi

uboot command line

复制代码
load mmc <设备> <内存地址,一般大于0x80000000> ${位置}/文件名,如vmlinux等

printenv # 打印环境变量

setenv bootdelay 5  # 设置启动倒计时为5s
setenv bootargs 'console=ttyS0,115200 root/dev/mmcblk0p2 rw'  # 设置内核参数
saveenv  # 将当前环境变量保存到非易失性存储(如Flash或eMMC)


bootz 启动Linux的zImage内核镜像,支持设备树(DTB)和initrd
bootz [内核地址] [initrd地址:大小]/[-] [设备树地址]

bootm 启动uImage格式的内核镜像,常用于旧版U-Boot

当内核镜像和initramfs文件编译在一起时,内核启动自动就会进入initramfs中

当内核镜像和initramfs文件分开时可以由下面两种方法使用initramfs

  • 修改设备树根节点
dbc 复制代码
\ {
        chosen {
                stdout-path = "serial2:115200n8";
                linux,initrd-start = <0xb0000000>;  # initramfs 起始内存地址
                linux,initrd-end = <0xc6539600>;    # initramfs起始内存地址 + 文件大小
        };  
}
  • 或者,通过bootargs向内核传递参数setenv bootargs "console=ttyS0,115200 initrd=${ramdisk_addr_r},${filesize}"

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
梅见十柒1 分钟前
UNIX网络编程笔记:TCP、UDP、SCTP编程的区别
服务器·网络·c++·笔记·tcp/ip·udp·unix
JZC_xiaozhong8 分钟前
单一主数据系统 vs. 统一主数据中心,哪种更优?
大数据·运维·企业数据管理·主数据管理·mdm管理·数据孤岛解决方案·数据集成与应用集成
一直走下去-明14 分钟前
docker简单使用
运维·docker·容器
三块钱079418 分钟前
ubuntu22.04 安装Jitsi meet 开源会议系统,代替腾讯会议
linux·运维·服务器·腾讯会议·会议系统·jitis meet
m0_7401546729 分钟前
SpringMVC 请求和响应
java·服务器·前端
多多*1 小时前
JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
java·运维·数据库·redis·mysql·java-ee·wpf
叱咤少帅(少帅)1 小时前
Go环境相关理解
linux·开发语言·golang
浩特-ht1 小时前
Linux 下 FTP 工具的安装和使用方式详解:附服务器文件备份实战
linux·运维·服务器
kcarly1 小时前
超融合服务器与普通服务器的具体区别
运维·服务器·超融合
玩电脑的辣条哥1 小时前
AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问
服务器·nginx·ubuntu·http·https·aispherebutler