menu Chancel's Blog
rss_feed lightbulb_outline

我的笔记

Linux - 利用Curl操作WebDAV文件服务器

在命令行模式下通常我们需要拷贝日志或SQL文件用于日志分析数据分析,这个时候通常的做法是使用SCP或基于SCP的扩展软件如Winscp等工具

也有不少第三方的SSH工具自带文件管理,通常足够满足我们对于服务器文件的管理,但也有特殊情况

如PVE或者堡垒机等在网页上操作服务器,这个时候我们无法使用常规手段获取到服务器的文件,在网页的命令行中分析文件是在是一件要命的事情

恰好手头有一个能用的WebDAV服务器(通常家庭NAS/服务器文件管理器Web服务都会带),那就可以利用CURL来上传/下载文件

获取服务器dav文件列表,理论上应该会返回文件列表,但我的WebDAV服务器仅返回“Not Found”

❯ curl --user "username:password" 'https://www.chancel.ltd/dav/'
Not Found

上传文件

❯ curl --user "username:password" -T '/root/codes/route_restart/demo.log' 'https://www.chancel.ltd/dav/demo.log'

读取文件

❯ curl --user "username:password" 'https://www.chancel.ltd/dav/demo.log'

删除文件

❯ curl -X DELETE --user "username:password" 'https://www.chancel.ltd/dav/demo.log'

Develop Base Linux 2021-04-20 03:35:41 location_on

PVE - 关机并休眠PVE的所有虚拟机

关机并休眠所有虚拟机

qm list | grep running | awk -F'[^0-9]*' '$0=$2' | while read -r vm_id; do qm suspend $vm_id --todisk 1; done; shutdown -h now

核心点在于如何休眠单台机器

qm suspend 100 --todisk 1

参考资料

Virtualization Technology Linux 2021-03-26 16:07:30 location_on

Gnome3 - 改变切换工作台(多桌面)快捷键

Gnome的切换桌面默认快捷键是 Ctrl + Alt + Left/Right,与Windows10的多桌面切换快捷键(Ctrl + Super + Left/Right)不同。

经常在两个操作系统之间切换不一样的桌面切换快捷键还是很烦的,尤其是QQ音乐的默认切歌快捷键与Gnome桌面切换一致导致我莫名其妙的切歌了

修改Gnome快捷键需要安装 dconf-editor 工具,不同系统安装方法不一样,我用的是Manjaro,安装如下

sudo pacman -S dconf-editor

之后在终端运行 dconf-editor 命令呼出修改界面,依次选择 org - gnome - desktop - vm -keybindings ,然后找到switch-to-workspace修改即可

或者直接右上角搜索,输入“org.gnome.desktop.wm.keybindings”也可以直接定位到修改界面

如图,自行修改switch-to-workspace按键即可

Operating System Linux 2021-03-22 07:58:17 location_on

Linux 命令精进05

硬盘挂载步骤

  • 查找所有硬盘硬件信息
  • 选中需要挂载的硬盘进行分区
  • 分区完成后格式化硬盘分区
  • 将挂载硬盘的信息写入系统文件/etc/fstab

下面以格式化一个新增加的1G硬盘为例子

# 打印所有硬盘硬件信息
❯ sudo fdisk -l

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sda: 17.2 GB, 17179869184 bytes, 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00087949

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    33554431    15727616   8e  Linux LVM

Disk /dev/mapper/centos-root: 14.4 GB, 14382268416 bytes, 28090368 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/centos-swap: 1719 MB, 1719664640 bytes, 3358720 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


# 此处要初始化的盘是1G的硬盘,一般通过容量跟分区信息就可以判断出是哪一个硬盘,通过上面的输出信息可以得知是/dev/sdb
❯ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xd01a716f.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-2097151, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): 
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


# 硬盘创建分区之后还需要格式化
❯ sudo mkfs.ext4 /dev/sdb1 
sudo mkfs.ext4 /dev/sdb1 
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 261888 blocks
13094 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

# 将硬盘挂载信息写入硬盘文件/etc/fstab,然后尝试重启,如若重启有问题可以修改/etc/fstab来修复启动
❯ sudo echo '/dev/sdb1 /mnt/sdb1/ ext4 defaults 0 0' >> /etc/fstab
❯ sudo reboot

/etc/fstab文件格式

  • <filesystem> <mountpoint> <type> <opts> <dump> <pass>

格式解释

  • filesystem:挂载设备的位置或者UUID,例如/dev/sdb1,也可以写其唯一的UUID,通过/dev/disk/by-uuid/来确认,相对而言,/dev/sd[x]的位置是不会变化的,使用UUID则是更为保险的方法
  • mountpoint:挂载点,即这个硬盘挂载到哪一个文件夹下
  • type:文件系统类型,Linux支持非常多的文件系统挂载,包括但不限于ext2/ext3/ext4/xfs/ntfs/swap,也可以使用auto来代替手动指定,让系统自动判断文件系统类型
  • opts:这是挂载的时候最重要的参数,涉及到许多硬盘的参数,一般若无特殊要求使用 defauls即可
  • dump:备份命令,需要备份是1,无需备份是0,备份需要联合dump untility使用,较少使用,一般情况下都是使用0
  • pass:在系统启动时使用fsck工具检查扇区,0表示不检查,1表示尽快检查,2表示需要检查但无需过急,对于特殊分区如交换空间是不需要使用检查的

实际例子

  • UUID=96ddc5ee-78f7-43e4-abbd-8359cf73bdfc /mnt/sda/ ext4 defaults 0 0
  • /dev/sdb1 /mnt/sdb1/ ext4 defaults 0 0

Operating System Linux 2021-03-12 16:55:38 location_on

Ubuntu1804 - 开机脚本执行服务rc-local.service

Ubuntu1804改用systemd来管理系统后,rc-local服务默认不再开启,记录一下如何开启这个服务

首先检查 /etc/systemd/system/rc-local.service文件是否存在,如果不存在,则创建这个文件

sudo ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

然后编辑 sudo vim /etc/systemd/system/rc-local.service文件,添加Install节点

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
Alias=rc-local.service

最后创建一下开机需要执行的 rc.local文件,sudo vim /etc/rc.local*,这里添加一个开机输出一个文件的测试

#!/bin/bash
echo 'hello world' > /tmp/hello.txt

最后使用systemd来启动开机执行

sudo systemctl enable rc-local

Operating System Linux 2021-03-09 16:59:16 location_on

ProxyChains - Shell下优秀的终端代理软件

在Linux下终端使用代理可以利用 SET HTTP=http://127.0.0.1:8080的方法来完成当前shell的代理

但每一次都要设置非常烦,写入.bashrc文件的话又不见得每次登录Shell都需要使用代理

ProxyChains就可以很方便的做到需要代理的命令走代理,只需要在前面加上 proxychains,例如使用代理运行wget

proxychains wget https://www.chancel.ltd/sitemap

ProxyChains is a UNIX program, that hooks network-related libc functions in dynamically linked programs via a preloaded DLL and redirects the connections through SOCKS4a/5 or HTTP proxies.

各大发行版包管理器大部分都包含了ProxyChains,Ubuntu下安装ProxyChains

sudo apt install proxychains -y

安装完成之后修改一下位于/etc/proxychains.conf配置文件就可以使用了,打开文件后,在最下方添加你的代理信息,如下

...
#       proxy types: http, socks4, socks5
#        ( auth types supported: "basic"-http  "user/pass"-socks )
#
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
http 127.0.0.1:8080

Operating System Linux 2021-03-08 11:39:08 location_on

Genymotion - Error while creating virtualbox host-only interface

我的系统环境信息

  • Manjaro Linux 64Bit
  • Linux version 5.10.18-1

安装Genymotion

# 先更新系统
sudo pacman -Syuu
yay -S genymotion

然后运行Genymotion,提示错误

Error while creating virtualbox host-only interface

仔细查看安装输出,安装完成后需要运行命令

sudo modprobe vboxdrv

但在运行之后,提示输出找不到 Module vboxdrv not found,于是执行

sudo pacman -S virtualbox linux510-virtualbox-host-modules

linux510-virtualbox-host-modules 这个包取决于你的Linux内核版本,可以使用 cat /proc/version 查看内核版本

最后再次运行以下指令查看是否有异常提示

sudo modprobe vboxdrv
sudo modinfo vboxdrv
sudo modprobe vboxnetadp
sudo modprobe vboxnetflt

再次启动Genymotion,一切正常

Software Tools Linux 2021-03-02 20:59:20 location_on

Manjaro - 安装Fcitx5搭配肥猫百万词库

首先卸载所有关于fcitx4的包

sudo pacman -Rs $(pacman -Qsq fcitx)

安装fcitx5

sudo pacman -S fcitx5-im fcitx5-chinese-addons

配置环境变量 vim ~/.pam_environment

GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE  DEFAULT=fcitx
XMODIFIERS    DEFAULT=\@im=fcitx
SDL_IM_MODULE DEFAULT=fcitx

安装肥猫百万词库(从wiki上加载,按照官方说法并无版权风险)

yay -S fcitx5-pinyin-zhwiki

注销重启PC后,打开 fcitx Configuration,选择添加拼音即可使用

PS:如何验证词库加载成功?打个“贾跃亭”试试看能不能匹配出来

参考资料

Operating System Linux 2021-02-27 14:06:36 location_on

Linux 命令精进04

Linux的键盘操作技巧非常多,《The Linux Command Line》这本书里提供了不少有趣的操作组合,这里挑选一些常用的做一下备忘

移动光标

  • Ctrl - A 移动光标到行首
  • Ctrl - E 移动光标到行尾
  • Ctrl - L 清空屏幕,移动光标到左上角(形同Clear命令)

修改文本

  • Ctrl - T 交换当前光标前的2个字符位置
  • Alt - T 交换当前光标前后2个单词位置(区分单词通常是“-”或者“空格”)
  • Alt - L 把从光标位置到字尾的字符转换成小写字母(Lower)
  • Alt - U 把从光标位置到字尾的字符转换成大写字母(Upper)

剪切和粘贴文本

  • Ctrl - K 从当前光标位置剪切至行尾的文本
  • Ctrl - U 从当前光标位置剪切至行首的文本
  • Alt - D 从当前光标位置剪切至词尾的文本
  • Alt - Backspace 从当前光标位置剪切至词头的文本,如果光标在一个单词的开头,剪切前一个单词
  • Ctrl - Y 把剪切环中的文本粘贴到光标位置

其他操作

  • Ctrl - R 增量搜索(输入你要寻找的Linux命令行,输入的越多精准度越高)

其他提到的技巧类型命令

  • !! 重复执行最后一次执行的命令
  • !88 执行历史第88条命令
  • !string 执行最近历史列表中以这个字符串开头的命令
  • !?string 执行最近历史列表中,包含这个字符串的命令
  • script [file] 记录当前会话所输入的所有指令(从输入这个指令开始记录)

Operating System Linux 2021-02-25 18:27:24 location_on

Linux - 命令精进03

创建用户

  • adduser [user_name] # 该命令会创建用户/用户组/用户目录/初始化用户环境等一系列操作,是 创建一个可以登录系统的正常用户
  • useradd [user_name] # 该命令会创建用户/用户组,然后什么也不做,是 创建一个不可以登录系统的系统用户

设置密码

  • passwd [user_name]

修改用户名称(登录名称)

  • usermod –l [new_user_name] [old_user_name]

删除用户

  • userdel [user_name] # 删除用户,如需删除用户信息如Home目录等需要使用 -r 参数

锁定/解锁用户

  • usermod -L [user_name] # 锁定用户,用户无法再正常登录
  • usermod -U [user_name] # 解锁用户,用户可以正常登录

查看用户信息

  • id [user_name]

用户组创建

  • groupadd –g [g_id] [group_name] # 创建ID为[g_id]的[group_name]用户组

添加用户到用户组

  • usermod -a -G [group_name] [user_name]
  • gpasswd -a [user_name] [group_name]

从用户组踢出用户

  • gpasswd -d [user_name] [group_name]

删除用户组

  • groupdel [group_name]

Operating System Linux 2021-02-07 17:36:22 location_on

1 of 4 | A total of 35