Setup

文章目录

Network

For hardware stuff, see Wireless

SSH

Key-Auth

ssh-keygen -t rsa

host {shortName}
    Hostname {address}
    Port 22
    User {username}
    IdentityFile {path/to/key}

do not forget to set private key 600

Win10-OpenSSH-Server

  • Install from Settings UI : Optional Features

  • Install from PowerShell : Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

  • ===Start-Service
Start-Service sshd 
# OPTIONAL but recommended: 
Set-Service -Name sshd -StartupType 'Automatic'
# then back to local machine:
ssh username@servername

Win32-OpenSSH

PS: Set-ExecutionPolicy RemoteSigned or powershell -ExecutionPolicy Bypass -File .\install-sshd.ps1

SSH-Tunnel

http://wlwang41.github.io/content/ops/ssh%E9%9A%A7%E9%81%93%E4%BB%A3%E7%90%86.html

https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

SSHFS

sshfs -C -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 <server>:/path /path

Proxy

export http_proxy="http://localhost:1082/"
export https_proxy="http://localhost:1082/"
export ftp_proxy="http://localhost:1082/"
export socks_proxy="http://localhost:1080"
export no_proxy="127.0.0.1,localhost"
export ALL_proxy="socks5://127.0.0.1:1080"

apt: /etc/apt/apt.conf.d/12proxy

Acquire {
  HTTP::proxy "http://127.0.0.1:1082";
  HTTPS::proxy "socks5h://127.0.0.1:1080";
}

Git: git config --global http.proxy 127.0.0.1:1082

https://note.qidong.name/2020/05/docker-proxy/

Server

./ew -s ssocksd -l 1080

Client

tsocks: /etc/tsocks.conf

proxychains: /etc/proxychains.conf

iptables

iptables 设计非常灵活,不仅可以当防火墙,还可以进行端口转发,ip 分组过滤等等复杂的功能,甚至可以把它当成微型的编程语言,所以要先俯瞰 iptables 整体的操作逻辑

Table, ChainRule

最简单的说法就是 Table 由很多个 Chain 组成,而 Chain 由一些 Rule 串起来组成, 所以称之为”链“。

Rule 就是对于请求一个断言,如果请求满足断言就执行指定的操作(官方文档中称这个操作为目标,Target),举个例子,”如果请求来自 192.168.19.123,就将其拒绝“,这就是一个 Rule,而”拒绝“就是一个目标,常见的目标有接受,拒绝,转发,调用另一个 Chain 等等。

请求会在 Chain 中自上而下遍历,直到遇到一个匹配的 Rule,然后调用它的目标。

四表五链 iptables 中 Table 的数目是规定死的四个:

  • filter: 过滤功能
  • nat: 端口映射,地址映射等
  • mangle: 用于对特定数据包的修改
  • raw: 优先级最高的 Table

还有五个预定义的 Chain:

  • PREROUTING: 数据包进入路由表之前

  • INPUT: 通过路由表后目的地为本机

  • FORWARD: 通过路由表后,目的地不为本机

  • OUTPUT: 由本机产生,向外转发

  • POSTROUTIONG: 发送到网卡接口之前。如下图:

Chains

路由决策是指判断数据包的目的地是否是本机,如果是则进入 INPUT Chain,否则进入 FORWARD Chain

PREROUTING ,POSTROUTIONG 和 FORWARD 只有作为路由器使用时才会被调用,正常电脑就只会经过 INPUT 和 OUTPUT

每个 Table 都含有几个预定义 Chain,优先级从高到低:raw > mangle > nat > filter

Table Chains

将内置的所有 Chain 串起来看就如下图:

内置 Chain 总体视图

目标

比如下面的命令:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT 表示如果发现目标端口是 80 的 tcp 流量就放行,其中 -p tcp –dport 80 就是条件,而 ACCEPT 就称作目标(Target)了。

-A INPUT 表示将这条 Rule 追加到(Append)INPUT Chain 的最后面,这里没有指定 Table,默认就是 filter,也可以通过 -t 指定 Table。

常见的目标有:

  • ACCEPT:接收数据包
  • DROP:丢弃数据包
  • REJECT:丢弃数据包并且返回一个拒绝
  • REDIRECT:将数据包重定向到另一个端口

匹配条件除了上面两个,还有一些常用的:

  • -s 匹配来源 ip
  • –sport 匹配来源端口
  • -m state 状态匹配,表示匹配数据包的状态,比如 -m state –state ESTABLISHED 就表示匹配已经建立了连接的数据包

RDP

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

PortNumber then restart

(官方文档只列出第二处)

Aria2

Aria2常见问题

Linux

Power

合盖的不同设定:

  • poweroff 和 halt 均是关机(具体实现有区别)
  • hybernate 是休眠,设备断电(同关机状态),内容保存在硬盘中
  • hybrid-sleep 是混合睡眠,设备通电,内容保存在硬盘和内存中
  • supspend (或 sleep)是挂起(睡眠),设备通电,内容保存在内存中
  • lock 是锁屏
  • kexec 是从当前正在运行的内核直接引导到一个新内核(多用于升级了内核的情况下)
  • ignore 是忽略该动作,即不进行任何电源事件响应

BOOT

uncomment GRUB_DISABLE_OS_PROBER=false in /etc/default/grub

REISUB

  • Add GRUB_CMDLINE_LINUX_DEFAULT the sysrq_always_enabled=1 variable in /etc/default/grub OR
  • Execute echo kernel.sysrq=1 | sudo tee --append /etc/sysctl.d/99-sysctl.conf AND
  • Execute sudo update-grub or sudo grub-mkconfig -o /boot/grub/grub.cfg

Laptop: Fn+Alt+PrtSc

Once you’ve located your SysRq key, please keep the Alt key pressed.

Package Manager

pacman

speed up : XferCommand = /usr/bin/aria2c -x 8 -s 8 --dir $(dirname %o) -o $(basename %o) %u

-S -U -Q -R

pacman -Qoq /usr/lib/python3.9

yay

Arch 不可直接 pacman 装,clone yay-bin from AUR, makepkg -si

Terminal

Zsh

move to zinit

[[ -f ~/.private.zsh ]] &&s source ~/.private.zsh

Konsole

<c-(> <c-)> split

Yakuake

New Session <c-s-T>

Close Session <c-s-W>

Next Session <s-Right> ('')

Tmux

set -g mouse on
setw -g mode-keys vi

KDE

Add Panel to the top, Global Menu added by default

Install widget Active Window Control to hide title bar for maximized windows

Install latte-dock to imitate OS X. Finally I chose to add widget Icons-Only Task Manager to the left of the panel.

KDE

balooctl disable

Settings -> Window Behavior -> Window Actions -> Inner Window 左手按键右手鼠标轻松操纵窗口

Fcitx5

<c-7> to remove word from history

<c-;> to show clipboard by default, having been reset to <c-'>

UNICODE: Ctrl+Alt+Shift+U

Scripts

insert \ at each EOL: sed -i 's/$/ \\/ FILENAME'

insert text at the beginning: sed -i '1i text' FILENAME

Windows

快速配置

wsreset -i 安装商店,商店中安装 winget 和 terminal

winget insall Git.Git

手装 VS Code

Set-ExecutionPolicy RemoteSigned -scope CurrentUser
irm https://raw.fastgit.org/scoopinstaller/install/master/install.ps1 | iex
scoop bucket add extras versions java retools
scoop install sudo dismplusplus

编辑 .ssh/config

Windows Terminal 加 Git Bash

            {
                "guid": "{00000000-0000-0000-ba54-000000000002}",
                "commandline": "%USERPROFILE%/scoop/apps/git/current/usr/bin/bash.exe -l -i",
                "icon": "%USERPROFILE%/scoop/apps/git/current/usr/share/git/git-for-windows.ico",
                "name" : "Git Bash",
                "startingDirectory" : "%USERPROFILE%"
            },

LTSC 2021 激活 注意别在官网下称评估试用版无法激活

民间下载地址 https://mirrors.lolinet.com/iso/windows/zh-cn_windows_10_enterprise_ltsc_2021_x64_dvd_033b7312.iso

Win7

only support Python3.8, does not support Docker

KB3063858 if fail to install Python

Development

Git

使用 ssh 代替 https进行 git 远程操作可以省去每次输入帐号的重复步骤,尽管一开始的密钥配置会略显繁琐。

ssh-keygen -t rsa -C "Whatever"
#输入文件名,按两次回车
#ssh-agent -s 无效,则用下面这条
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Git配置多个SSH Key

多SSH管理技巧与Git多账户登录

undo the first commit: git update-ref -d HEAD

clone from computers: git clone ssh://hostname/path/to/git

工作生活两不误之 includeIf 语法:

[includeIf "gitdir:/path/to/repo"]
    path = /path/to/.gitconfig-oss
    
[includeIf "gitdir:C:/work/"]
    path = /path/to/.gitconfig-work

Win 上 Git 问题总结:

  • Load key invalid format: [https://stackoverflow.com/questions/41563973/git-clone-key-load-public-invalid-format-permission-denied-publickey]

Vim

fail to install YCM

quick comment
  • <c-V> to enter visual block mode
  • move around to select lines to comment
  • press <s-I> and insert # or //
  • <Esc> then see changes
clipboard inconsistency

vim does not support Xorg, missing the +clipboard support. replace it with gvim

use "+y to copy to the system clipboard

to change the default behavior set clipboard=unnamedplus

resize window

<c-W> -/+上下 <>左右

encode

enc,fenc,fencs,tenc

  • enc (encoding) 内部使用的编码

    如buffer,寄存器中的字符串。在Vim打开文本后,如果它的编码方式与它的内部编码不一致,Vim会先把编码转换成内部编码,如果它用的编码中含有没法转换为内部编码的字符,那么这些字符就会丢失掉。默认值是系统的locale来决定。

  • fenc( fileencoding) 文件自身的编码

    从磁盘读文件时,Vim会对文件编码检查,如果文件的编码与Vim内部编码(enc)不同,Vim就会对文本做编码转换,将fenc设置为文件的编码。Vim写文件到磁盘时,如果enc与fenc不一样,Vim就做编码转换,转换成编码fenc保存文件。

  • fencs( fileencodings ) 字符编码的列表

    编码的自动识别就是通过设置fencs实现的。当打开一个文件时,Vim会按照fencs中编码的顺序进行解码操作,如果匹配成功就用该编码来进行解码,并把这种编码设为fenc的值。这里的匹配成功指的是Vim能正确解码,不会出错,但是不保证没有乱码,所以fencs编码列表的顺序设置很关键。latin1是iso8859-1,属于国际化的标准编码,能表示任何字符,所以放到最后

  • tenc( termencoding) 终端使用文本编码,或者说是Vim用于屏幕显示时的编码,显示的时候Vim会把内部编码转换为屏幕编码再输出,也就是说我们从屏幕上看到的字符都是tenc编码的字符,如果为空,默认就是enc。windows平台Gvim会忽略掉tenc。一般就是从一个终端远程登陆到linux系统时候tenc会起作用。

VSCode

Window: Title Bar Style choose custom

Shortcuts

<c-B> toggle side bar

<c-J> toggle panel

<c-`>toggle integrated terminal

<c-K> leader key

  • <c-O> Open Folder
  • <c-S> Keyboard Shortcut

vscodevim

set a shortcut to “Vim: Toggle Vim Mode”

  • press <c-K><c-S>, search for it
  • bind it to Ctrl+' (the default shortcut of fcitx5 clipboard is Ctrl+;)

press gcc to comment

files.exclude

  • Go to File -> Preferences -> Settings (or on Mac Code -> Preferences -> Settings)

  • Pick the workspace settings tab

  • Add this code to the settings.json file displayed on the right side:

    // Place your settings in this file to overwrite default and user settings.
      
    {
        "settings": {
            "files.exclude": {
                "**/.git": true,         // this is a default value
                "**/.DS_Store": true,    // this is a default value
      
                "**/node_modules": true, // this excludes all folders 
                                        // named "node_modules" from 
                                        // the explore tree
      
                // alternative version
                "node_modules": true    // this excludes the folder 
                                        // only from the root of
                                        // your workspace 
            }
        }
    }
    

large workspace

cat /proc/sys/fs/inotify/max_user_watches
echo fs.inotify.max_user_watches=524288 >> /etc/sysctl.conf

For Arch:

ls /etc/sysctl.d/*-max_user_watches.conf
echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/50-max_user_watches.conf && sudo sysctl --system
cat /proc/sys/fs/inotify/max_user_watches

CodeBlocks

Missing api-ms-win-crt-*.dll

Install VC++ 2015 Redistributable

Fail on Windows Server 2012

SQL

mysql -u {user} -p ENTER

postgres

\i 'path/name.sql' to load SQL script

\! <command> to run shell command

should disable CoW with chattr +C /var/lib/postgres on btrfs

Virtualize

boot VM from physical windows partition,即利用 VBoxManage 从(整个)物理磁盘创建 vmdk,注意 UEFI 启动。VMWare 会自动识别 vmdk 实际指向物理设备而报错,直接从物理磁盘创建即可。注意不要作死启动宿主机系统自身!

Docker

sudo groupadd docker sudo usermod -aG docker $USER docker-compose on PM may be too old, use pip to install, then add $HOME/.local/bin to PATH

Dockerfile best practices

docker image/container prune [--filter=]

docker container rm $(docker ps -aq -f "since=删掉这个名字对应容器之后创建的所有容器")

容器有网络相关错误可能是net.ipv4.ip_forward=0 临时解决 run --network=host

K8S

一切皆 yaml

注意 --namespace

一般不直接 ssh node

kubectl port-forward pod-name LocalPort:RemotePort

libvirt

https://ostechnix.com/solved-cannot-access-storage-file-permission-denied-error-in-kvm-libvirt/

Hardware

Wireless

lspci, rfkill see if blocked

蓝牙耳机可配对但无法连接: 安装 pulseaudio-bluetooth(怎么 PA15 还不支持高级编码) pulseaudio-modules-bt(https://aur.archlinux.org/packages/pulseaudio-modules-bt/) 再重启 pulseaudio,或者直接上 pipewire

howdy

https://wszqkzqk.github.io/2021/08/17/%E5%9C%A8Manjaro%E4%B8%8B%E9%85%8D%E7%BD%AE%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB/

找摄像头路径,sudo howdy config 该配置

由于 kwallet 原因对 sddm 用处不大

kde, login, system-local-login 以在锁屏启用,必加 try_first_pass

su, sudo 不加 try_first_pass,因为在终端中可 C-c。单独 su 需要在 /usr/lib/security/howdy/modelsln -s user.dat root.dat

linux-enable-ir-emitter 开红外,重启后失效的解决方法

File System

BtrFS

中文博客:https://qsdrqs.site/2021/01/ext4_to_btrfs/ 大概可从 ext4 无损转换,但 grub 等引导项配置需要避坑

  • 改 fstab 中的 UUID 和 type
  • 转换根目录,需要 mkinitcpio -P
  • grub-intallgrub-mkconfig

新装也需注意,只划整个分区不创子卷意义不大,安装时没注意也可以弥补,只需 chroot 环境下挂载分区,于根目录创建 @name 子卷,再把原来位置的内容移进去,最后分区目录结构如下

/dev/nvme0n1p4
├── @
├── @cache  # /var/cache
├── @home
├── @log  # /var/log  
├── @opt
├── timeshift-btrfs
└── @tmp  # /var/tmp

snapper 快照

LVM

pvs, pvcreate /dev/<foo>

vgs vgextend VG PV

lvs lvresize -l 100%FREE VG/LV

resize2fs VG/LV 别忘了文件系统扩容

NTFS

sudo mount -t ntfs-3g /dev/nvme0n1p4 /path/to/mount

NFS

CentOS 7安装配置NFS CentOS 7 下 yum 安装和配置 NFS

Server:

  • create folder
  • start servers rpcbind nfs-server
  • edit /etc/exports
    • exportfs -r
    • showmount -e

Client:

  • rpcbind
  • mount [IP]:/ /path/to/mount

VHD

Ventoy 插件可启动 VHD 中的文件,虚拟机和U盘启动两不误

最简单的方法,在 VBox 创建磁盘格式为 VHD 的虚拟机再复制即可

MPICH

https://stackoverflow.com/questions/14769599/mpi-error-loading-shared-libraries

總結

用心记,放心阅,方便查

Manjaro踩坑记

after remove /bin

delete file without rm shred -u unlink

问题记录

Ubuntu 16.04 to 18.04 断网

能 ping 固定 IP 但 ping 不通域名

edit /etc/systemd/resolved.conf, let DNS=8.8.8.8

systemctl restart systemd-resolved

DO NOT EDIT /etc/resolv.conf with 127.0.0.53 as a **stub resolver **!

KDE 桌面崩溃

kquitapp5 plasmashell
kstart5 plasmashell
killall ksmserver

触摸板突然失灵

sudo modprobe -r i2c_hid # 先卸载模块,或psmouse
sudo modprobe i2c_hid # 再装上模块
sudo systemctl daemon-reload #非必须
sytemctl suspend

VMWare报错

先检查是否装对应kernel版本的linux-headers

每次开机后再输sudo modprobe -a vmw_vmci vmmon

上述命令亦无效则是kernel版本太新尚无module可用,参见此贴中的步骤,下载该仓库中对应版本执行make即可编译完成

vmnet8 报错无法联网:sudo systemctl start vmware-networks.service

基于Qt的软件无法使用fcitx

qmake -query查看qt版本及路径等信息

中文字体选择

常用Web字体

网页字体测试

KDE中文字体美化

评论正在加载中...如果评论较长时间无法加载,你可以 搜索对应的 issue 或者 新建一个 issue