Wiki

共 22214 字,约 64 分钟

记多少命令和快捷键会让脑袋爆炸呢?

Linux

bash脚本常用指令

#!/bin/bash

timeout=240; 
node new_search.js 2>&1 | tee -a search.log &
sleep 10
while true; do 
	if [ -z "`find search.log -newermt @$[$(date +%s)-${timeout}]`" ]; 
		then 
				killall --regexp -TERM 'node *'
				node new_search.js 2>&1 | tee -a search.log &	
	fi
	sleep 60
done

参考:

linux - How to kill a process on no output for some period of time - Stack Overflow

Debian/Ubuntu/Raspbian 时间同步

时区设置:

date -R
dpkg-reconfigure tzdata

时间同步:

apt-get install ntpdate
ntpdate ntp.sjtu.edu.cn
date

安装zsh和oh-my-zsh

安装zsh

apt-get install zsh
chsh -s /bin/zsh

安装Oh My Zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
nano ~/.zshrc
ZSH_THEME="candy"
source ~/.zshrc

修改 hostname

sudo hostname hk-ubuntu  #暂时修改 hostname,重启则失效
sudo nano /etc/hostname  #永久修改hostname,重启生效
sudo nano /etc/hosts     #将新的hostname指向127.0.0.1

debian 9/ ubuntu 添加swap分区

Linux 中 Swap(交换分区),类似于 Windows 的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

先查看是否已经存在swap分区了:

sudo swapon --show

没有结果表示不存在swap分区,有结果表示已经有一个swap分区了,一般来说一个系统不需要第二个swap分区。


创建1G大小的swap分区文件,并更改权限:

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k
sudo chmod 600 /swapfile

加载swap分区:

sudo mkswap /swapfile
sudo swapon /swapfile

如果想要重启后swap分区扔自动加载,修改文件:

sudo nano /etc/fstab

最后增加一行:

/swapfile swap swap defaults 0 0

查看swap分区是否加载成功:

sudo swapon --show

一般来说如果是服务器,swappiness 不要太高,修改swappiness 的值:

sudo sysctl vm.swappiness=10

参考资料:How To Add Swap Space on Debian 9 | Linuxize

ubuntu/debian 安装SSH,并开启

注意:如果使用的是WSL安装的ubuntu/debian,那么你需要先卸载:apt remove openssh-server

sudo apt install openssh-server

安装完成后SSH 服务默认开启 手动启动:

systemctl start ssh.service

修改配置:

nano /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes

设置指定用户禁止ssh密码登录

有时候我们需要有些用户可以ssh登录时使用密码,而有些用户只能使用密钥登录,编辑文件/etc/ssh/sshd_config

文件最后添加如下内容:

Match   User    user1,user2
        PasswordAuthentication  no

重启服务:

systemctl reload ssh

Linux下使用tee既在屏幕上显示输出,又把输出写进文件

Linux下的tee是一个很好用的工具,可以把重定向屏幕输出到文件的同时在屏幕上显示输出

使用示例如下:

command  | tee stdout.log

这里有一个需要注意的坑点,上面的命令只是把标准输出,也就是 STDOUT 写进文件,并没有处理错误输出,也就是 STDERR

如果需要处理错误输出,命令如下:

command > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2)

如果你想把标准输出和错误输出都重定向到一个文件,那么命令如下:

command  2>&1 | tee -a log

参考文章:linux - How do I write stderr to a file while using “tee” with a pipe? - Stack Overflow

Linux查询DNS

在Linux系统里查询DNS使用如下命令

dig baidu.com @114.114.114.114

或者使用系统默认的DNS服务器查询

nslookup baidu.com

其他

Windows

powershell-zsh-git

管理员模式打开powershell

set-executionpolicy remotesigned

选择 yes

Install-Module posh-git
Install-Module oh-my-posh

打开~\Documents\WindowsPowerShell,编辑文件Microsoft.PowerShell_profile.ps1,编写如下内容:

Import-Module posh-git
Import-Module oh-my-posh
Set-PoshPrompt -Theme ys

如果设置完成后,发现Git的符号是乱码,需要重新选择字体。推荐安装等距更纱黑体 SC字体,

下载:Releases · be5invis/Sarasa-Gothic

安装sarasa-mono-sc-regular.ttf

然后在Windows Terminal->Open JSON file

新增配置"fontFace" : "等距更纱黑体 SC"

参考:

powerhsell 中文

chcp 65001   #Unicode (UTF-8)
chcp 936	 #中国 - 简体中文(GB2312)
chcp 437	 #美国

Java

jetbrains intellij IDEA 常用插件和配置


代码自动格式化快捷键:

对于Windows: Ctrl+ Alt+L

对于ubuntu: Ctrl+ Alt+ windows+ L

对于Mac: Command+ Option+ L

注意Windows上的快捷键会和TIM的快捷键冲突

如果你不喜欢自带的快捷键,可以到settings中的keymap的Code的reformat code,修改快捷键,我个人比较喜欢Alt+F


file->setings->editor->font中把字体改为第一个consolas,这样会好看很多,也可以改为simhei。字号的大小根据自己喜好。


文件全局搜索使用快捷键Ctrl+ Shift+F,如果快捷键冲突,重新配置快捷键。

下面推荐一些好用的插件,在在file->setings->Plugins中进行搜索安装

  1. CodeGlance

效果是像sublime一样,右边显示缩小版的代码图。

2.Markdown support

装了这个插件就可以用IDEA写markdown了。

3.MyBatis Log Plugin

可以在console直接输出MyBatis 运行的sql语句

4.FindBugs-IDEA

可以自动查找BUG,安装完成后IDEA左下角会出现FindBugs的图标

5.Rainbow Brackets

这个插件我在vs code和sublime上都装了,很好用。

括号的颜色很好看。

6.VisualVM Launcher

可以在调试的时候查看堆的情况

7.Maven Helper

查看Maven依赖

8.Alibaba Java Coding Guidelines 阿里巴巴代码开发规范,可以帮助Java初学者完善自己的代码规范。

9.Choose Runtime

选择IDEA的运行Java的版本:【工具使用】IDEA 2019 导入gradle工程问题_人生所向,皆是美好-CSDN博客_the project uses gradle 2.14.1 which is incompatib

IDEA 控制台乱码

Java 奇技淫巧

不需要先判断对象是否为null,可以直接判断两个对象是否相等

boolean result = Objects.equals( object1 , object12 ) ; 

实现如下:

    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }

Java的set或者map的key需要是不可变量,或者hash值固定的变量

从Python角度理解,list作为可变变量不能作为字典的key。

public class Test {

    public static void main(String[] args) {
        Node app1 = new Node("1", "original");
        HashSet<Node> sets = new HashSet<>();
        HashMap<Node, Integer> map = new HashMap<>();
        map.put(app1, 1);
        sets.add(app1);
        // 更改变量
        app1.name = "changed";
        // 输出 false null
        System.out.println(sets.contains(app1));
        System.out.println(map.get(app1));
    }

    static class Node {
        private final String id;
        public String name;

        public Node(String id, String name) {
            this.id = id;
            this.name = name;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }
            Node node = (Node) o;
            return Objects.equals(id, node.id) && Objects.equals(name, node.name);
        }

        @Override
        public int hashCode() {
            return Objects.hash(id, name);
        }
    }
}

Java print list

System.out.println(Arrays.toString(list.toArray()));

Java 转化对象为map convert object to map

    public static HashMap<String, Object> convert(Object obj) throws IllegalAccessException {
        HashMap<String, Object> myObjectAsDict = new HashMap<>();
        Field[] allFields = obj.getClass().getDeclaredFields();
        for (Field field : allFields) {
            myObjectAsDict.put(field.getName(), field.get(obj));
        }
        return myObjectAsDict;
    }

C++

数据库

Python

推荐Python课程:

Python3 开启HTTP服务

python3 -m http.server

杂类

Windows下使用ffmpeg批量转换ts格式视频到mp4格式,并在转换完成后删除原视频

$files = Get-ChildItem -Recurse  -Filter *.ts
echo $files
foreach ($f in $files){
    $outfile = $f.FullName.replace(".ts",".mp4") 
    echo $outfile
    ffmpeg -i $f.FullName -c copy $outfile 
    Remove-Item -Path $f.FullName
}

convert flv to mp4:

ffmpeg -i input.flv -codec copy output.mp4

convert mp4 to mp3:

ffmpeg -i input.mp4 output.mp3

生活

git

git对不同仓库配置不同email和name

编辑~/.gitconfig

# ~/.gitconfig
[include]
    path = user.gitconfig
[includeIf "gitdir/i:d:/"]
    path = work.gitconfig

编辑~/user.gitconfig

[user]
	name = xxx
	email = xxx@gmail.com

编辑~/work.gitconfig

[user]
	name = xxx
	email = xxxxx

参考:git - Can I specify multiple users for myself in .gitconfig? - Stack Overflow

git 强行更新,覆盖已存在的commit

git push -f <remote> <branch>
git push -f origin master

参考:Force “git push” to overwrite remote files - Stack Overflow

删除最新的commit,恢复到之前的状态

git reset –hard HEAD~1

git push origin test –force

git push –force

git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。

参考:git rebase - Delete commits from a branch in Git - Stack Overflow

git 查看所有文件修改历史

git log --full-history -- [file path]
git log --full-history --patch -- [file path]

即使文件已经删除,也可以查看历史修改记录。

powershell git log 中文乱码配置

git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
$env:LESSCHARSET='utf-8'

新增环境变量: LESSCHARSET ,值为 utf-8

git强行还原

有时候自己对仓库做了修改,但不需要这些修改,可以强行还原。

git fetch --all && git reset --hard origin/master && git pull

git 配置代理

有时候公司内网不能直连外网,需要配置git的网络代理。

git config --global http.proxy 'socks5://127.0.0.1:10888'
git config --global https.proxy 'socks5://127.0.0.1:10888'

git初始化子模块

git submodule update --init --recursive

git 单仓库配置多个远程仓库

我在GitHub和coding上都建了仓库,想单次push到2个仓库,于是需要设置remote

git remote add all https://xxx.xxxx.git
$ git remote -v
all     https://e.coding.net/xxxx.git (fetch)
all     https://e.coding.net/xxxx.git (push)
origin  https://github.com/xxxx.git (fetch)
origin  https://github.com/xxxx.git (push)
git push all master

git 设置/重置用户名和密码

有时候输入的用户名或者密码错误了,但git已经保存了,无法直接更改。

一种方法是直接删除用户,再输入:

git config --global --unset user.password

如果是Windows用户,可以在如下位置找到保存的密码: Control Panel->All Control Panel Items->Credential Manager->Windows Credentials 或者直接搜索凭据管理器,可以直接修改用户名和密码。

使用ssh连接GitHub上的git服务器

先配置git的用户名和邮箱:

git config --global user.name "your_name"
git config --global user.email "your_email@xxx.com"

先查看本地是否已经配置了公钥和私钥,如果已经存在私钥,无需再次生成。

cd ~/.ssh

生成密钥:

-> % ssh-keygen -t rsa -b 4096 -C your_email@xxx.com
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ubuntu/.ssh/id_rsa.
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:14HZgHvg4z5qnFwlcrUeZ7AzxOpp+cka9oEMPrr04YQ xxx@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
|         o.      |
|        o ==     |
|       . *o+o    |
|      . B O.o.   |
|      .=SO.*.    |
|     o oBo.      |
|    Eo===o..     |
|   . ==+oo+.     |
|    oo+..o.      |
+----[SHA256]-----+

生成密钥后拷贝公钥id_rsa.pub的内容,到GitHub上新建ssh的key:GitHub SSH and GPG keys

新建完成后就可以登录GitHub了:

-> % ssh -T git@github.com
The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.229.188.59' (RSA) to the list of known hosts.
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

如果另外一个服务器已经有公钥和私钥,你不想重新生成,可以直接拷贝过来:

cd ~/.ssh
nano id_rsa
chmod 0600 id_rsa
cd ..
ssh -T git@github.com

git 常用操作

Git操作参考:Git的奇技淫巧

有一篇好文章:一篇文章,教你学会Git

在这里插入图片描述

每次commit,git存储的是全新的文件快照而不是文件的变更部分。这是做了一个取舍,这样每次在切换分支的时候,读取文件是O(1)的时间复杂度,而不是O(N)的时间复杂度。

git误操作如何恢复

使用git reflog,修改HEAD的指针

在这里插入图片描述

在这里插入图片描述


参考:

文档信息

Table of Contents