linux releated

ubuntu20.04安装zsh

18.04用这个方法也可以成功安装(22/7/3)

参考链接:Ubuntu20.04配置oh-my-zsh以及一些好用的插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo apt install zsh
chsh -s /bin/zsh
sh -c "$(curl -fsSL https://gitee.com/shmhlsy/oh-my-zsh-install.sh/raw/master/install.sh)"
# 到这一步就可以正常使用zsh了,后面的步骤是些花里胡哨的内容,可以不设置

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh}/plugins/zsh-syntax-highlighting
sudo apt-get install autojump
vim ~/.zshrc
# ## 更改配置文件中的这两项
# ZSH_THEME="ys"
# plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
# ##最后一行加上这个:
# . /usr/share/autojump/autojump.sh
source ~/.zshrc
reboot

遇到的错误及解决方案:

smbclient 报错:protocol negotiation failed: NT_STATUS_CONNECTION_RESET

Linux:mount命令出现Host is down如何解决

virtualbox

  • 将vdi虚拟机硬盘拷贝给其他人使用

VBoxManage命令

1
2
3
4
VBoxManage.exe clonevdi 原始VDI文件 新的VDI文件        # 老旧命令
VBoxManage.exe clonemedium 原始VDI文件 新的VDI文件 # 新版本命令
VBoxManage.exe list hdds # 列出本地已注册的磁盘镜像
VBoxManage.exe closemedium <uuid|filename> # 删除某个已注册的磁盘镜像
  • mount -t vboxsf时报错

mount.vboxsf: mounting failed with the error: Invalid argument

1
sudo apt-get install virtualbox-guest-dkms

共享文件夹挂载失败的错误:/sbin/mount.vboxsf: mounting failed with the error: No such device

1
sudo modprobe -a vboxguest vboxsf vboxvideo

ubuntu换内核

以开启kasan为例,替换ubuntu内核的过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 下载目标内核源码文件到本地,解压
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.tar.gz
tar -zxf linux-5.4.tar.gz
cd linux-5.4/

# 拷贝原来的config文件
cp /boot/config-5.4.0-26-generic ./.config

# 如果是第一次make,需要安装以下组件
sudo apt install make
sudo apt install libncurses-dev
sudo apt install flex
sudo apt install bison
sudo apt install libssl-dev

# 进入图形界面,配置Kernel hacking ---> Memory Debugging ---> 选中[*] KASan: runtime memory debugger
make menuconfig

# 安装模块和内核,然后重启
sudo make modules_install
sudo make install
reboot # 某些情况下重启后看不到选内核版本的界面,那就继续下一步 - 设置默认启动版本

# 设置编译的内核为默认启动版本
cat /boot/grub/grub.cfg | grep Ubuntu # 可以看到类似于"with Linux xxx.xxx.xxx-xx-generic"之类的句子
vim /etc/default/grub # 设置目标版本到GRUB_DEFAULT字段
GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 3.14.69'
sudo update-grub
sudo reboot # 重启后系统运行的就是我们编译的内核版本了

拓展:如果想要关闭KASLR,可以更改/boot/grub/grub.cfg,在cmdline位置添加nokaslr,保存文件后直接重启即可。如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
menuentry 'Ubuntu, with Linux 5.4.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-26-generic-advanced-a0e37184-9d79-4234-beca-b50ef9e04936' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 a0e37184-9d79-4234-beca-b50ef9e04936
else
search --no-floppy --fs-uuid --set=root a0e37184-9d79-4234-beca-b50ef9e04936
fi
echo 'Loading Linux 5.4.0-26-generic ...'
linux /boot/vmlinuz-5.4.0-26-generic root=UUID=a0e37184-9d79-4234-beca-b50ef9e04936 ro maybe-ubiquity nokaslr
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.4.0-26-generic
}

参考文章:

linux配置开启KASAN功能

Linux内核编译

Ubuntu 20.04 如何禁用自动更新,删除更新提示和缓存

ubuntu vmware磁盘扩容

扩容有两种方案,一种是添加新分区并挂载到系统的某个目录下,另一种是直接扩充原来的分区。

挂载到某个目录

  1. 关闭虚拟机,编辑虚拟机设置。在虚拟机设置界面,硬件选项卡下的硬盘(SCSI)中,有“扩展磁盘容量”一行,设置成目标磁盘大小。

  2. 打开虚拟机,添加新分区后重启系统

    1
    2
    3
    4
    5
    6
    7
    sudo fdisk /dev/sda
    m # 查看帮助命令
    p # 打印分区表
    n # 添加新分区
    # 然后一路回车,直到出现"Created a new partition"的提示,表明创建成功
    w # 保存设置并退出
    reboot # 重启系统
  3. 重启后,挂载磁盘

    1
    2
    3
    4
    5
    sudo fdisk -l		# 先看一下上一步中添加分区成功了没有,成功了再继续往下操作,没成功就重复第二步
    df -T # 查看原来的文件系统类型,我的是ext4
    sudo mkfs -t ext4 /dev/sda3 # 格式化分区,我的是/dev/sda3
    mkdir /home/bling/test # 创建一个目录,待挂载
    sudo mount /dev/sda3 /home/bling/test # 将/dev/sda3挂载到/home/bling/test目录
  4. 设置开机自动挂载

    1
    2
    3
    sudo vim /etc/fstab  
    # 在文件最后一行添加如下内容
    /dev/sda3 /home/bling/test ext4 defaults 0 1

    扩充原有磁盘

  5. 关闭虚拟机,编辑虚拟机设置。在虚拟机设置界面,硬件选项卡下的硬盘(SCSI)中,有“扩展磁盘容量”一行,设置成目标磁盘大小。

  6. 打开虚拟机,添加新分区后重启系统

    1
    2
    3
    4
    5
    6
    7
    8
    9
    sudo fdisk /dev/sda
    m # 查看帮助命令
    p # 打印分区表
    d # 删除原来的一个分区
    n # 添加新分区,会合并所有未分区的磁盘(这个操作跟windows磁盘操作类似,先删除再合并)
    # 然后一路回车,直到出现"Created a new partition"的提示,表明创建成功
    w # 保存设置并退出
    sudo resize2fs /dev/sda2 # 更新分区,我的是/dev/sda2
    df -h # 此时就能看到/dev/sda2扩容了

参考文章:

Vmware虚拟机Ubuntu下,命令完成磁盘的扩容

ubuntu 18 VMWare 如何 命令行 扩展磁盘

解决ubuntu中”Could not get lock /var/lib/dpkg/lock”

How to Fix ‘E: Could not get lock /var/lib/dpkg/lock’ Error in Ubuntu Linux

How To Fix “Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)” Errors

比较暴力的方法是,直接rm -rf 那两个lock文件

Kali 2020版中文显示乱码的解决方案

安装完2020最新kali中文版后,发现界面出现了无数“麻将块”。原因是该版本对中文的不支持,因此需要我们自己安装一下中文字体。

更改kali的镜像源

在sources.list中添加一个源:

1
2
3
4
5
6
vim /etc/apt/sources.list

# tsinghua university
deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free

添加完源之后,必须立马执行更新命令:

1
sudo apt-get update

安装中文字体

依次执行以下命令:

1
2
3
4
5
6
7
8
# 安装本地设置
sudo apt-get install locales
locale -a
# 安装中文字体
sudo apt-get install xfonts-intl-chinese
sudo apt-get install ttf-wqy-microhei
#重启kali
sudo reboot

参考了如下几篇文章的方法:

2019kali中文乱码

解决安装kali 2020.1版本后的中文乱码问题

什么是locale?

ubuntu 1804 安装搜狗输入法

在官网下载linux版搜狗输入法的deb安装包,下载到本地后,执行以下三条命令

1
2
3
sudo dpkg -i sogoupinyin_2.3.1.0112_amd64.deb
sudo apt --fix-broken install
sudo dpkg -i sogoupinyin_2.3.1.0112_amd64.deb

在settings -> Region& Language -> Manage Installed Languages中把Keyboard input method system从IBus修改为fcitx。然后点击Apply System Wide。最后重启电脑。

重启完成后,在系统中搜索fcitx configuration,点击左下角的加号,取消勾选Only Show Current Language,然后选择Sougou Pinyin,OK一下就可以了。

现在就可以通过ctrl+shift切换输入法!

Linux上安装samba服务

ubuntu环境

(1)安装smb服务

1
2
3
sudo apt update
sudo apt install samba
whereis samba

(2)指定共享文件夹

1
2
3
4
5
6
7
8
sudo vim /etc/samba/smb.conf
[sambashare]
comment = Samba on Ubuntu
path = /any/folder/
read only = no
browsable = yes
sudo service smbd restart
sudo ufw allow samba (ps:如果没有防火墙或者防火墙未开启,这一步可省略)

(注意: /any/folder/需要将folder权限设置为777,这样才能正常访问)

(3)指定访问用户

1
sudo smbpasswd -a username

username是ubuntu上的一个普通用户。

(4)windows上访问

1
//ubuntu-ip/sambashare

windows访问如上地址就可以进入到/any/folder/目录了!

redhat环境

参考:

ubuntu上设置samba服务

redhat上设置samba服务

Linux上添加/删除用户

ubuntu添加新用户:

1
adduser bling

将用户添加到root组

1
2
3
4
sudo chmod u+w /etc/sudoers
sudo vim /etc/sudoers
在root下方添加:bling ALL(ALL:ALL) ALL
sudo chmod u-w /etc/sudoers

删除用户:

1
deluser bling

Linux上安装java jdk

这里以openjdk为例,如果需要安装oracle Java JDK,请用参考链接中的方式。

1
2
3
4
5
6
# 更新软件包列表
sudo apt-get update
# 安装openjdk-8-jdk
sudo apt-get install openjdk-8-jdk
# 查看java版本,验证是否安装成功
java -version

参考:

Ubuntu 18.04安装Java JDK8三种方式

Linux上升级python

ppa源升级

  • 添加ppa源,安装python 3.6
1
2
3
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6
  • 调整python3的优先级的方法见5.2

源码升级

  • 去官网下载所需版本的python源码包。

python源码网址

  • 安装依赖
1
2
3
4
sudo apt-get install gcc make zlib1g-dev
sudo apt-get install libbz2-dev
sudo apt-get install libsqlite3-dev
sudo apt-get install python3-dev libxml2-dev libffi-dev libssl-dev libxslt1-dev
  • 开始安装
1
2
3
4
5
6
tar -zxvf Python-3.6.7.tgz
sudo mv Python-3.6.7 /usr/local
cd /usr/local/Python-3.6.7
./configure
sudo make
sudo make install
  • 更改python版本优先级

查询python安装路径:whereis python

调整优先级,将新安装的3.6调到最大:

1
2
3
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 100
sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.6 200
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 150

到这一步就算是结束了,此时使用python --version可以看到python已经是3.6版本的了。

  • 后续设置变更
1
2
3
4
# 查询可配置的python
update-alternatives --list python
# 切换默认python版本
update-alternatives --config python

参考:

Ubuntu 16.04 升级Python版本到3.6

Ubuntu 16.04 源码安装Python-3.6.7

linux中安装Thrift(指定版本)

Linux下生成/应用patch

普通patch

  1. 为单个文件生成patch

    diff -up /oldFilePath /newFilePath > file.patch

    参数说明:

    -u 显示有差异行的前后几行(上下文), 默认是前后各3行, 这样, patch中带有更多的信息.

    -p 显示代码所在的c函数的信息.

  2. 为多个文件生成patch diff -uprN /oldFolderPath /newFolderPath > folder.patch

    参数说明:

    -r 递归地对比一个目录和它的所有子目录(即整个目录树).

    -N 如果某个文件缺少了, 就当作是空文件来对比. 如果不使用本选项, 当diff发现旧代码或者新代码缺少文件时, 只简单的提示缺少文件. 如果使用本选项, 会将新添加的文件全新打印出来作为新增的部分.

  3. linux打补丁

    patch -p1 < demo.patch

    生成的补丁中, 路径信息包含了你的Linux源码根目录的名称, 但其他人的源码根目录可能是其它名字, 所以, 打补丁时, 要进入你的Linux源码根目录, 并且告诉patch工具, 请忽略补丁中的路径的第一级目录(参数-p1).

    diff命令必须在整个Linux源码的根目录的上一级目录中执行.

  4. solaris打补丁

    gpatch -p1 < demo.patch

例如:

1
2
patch -p1 < huawei_patch/huawei_tf_gic_0001.patch
patch -p1 < huawei_patch/huawei_tf_gic_0002.patch

git patch

https://juejin.im/post/5b5851976fb9a04f844ad0f4

ssh

安装命令:

1
2
3
4
# 客户端
sudo apt-get install ssh 或者 sudo apt-get install openssh-client
# 服务端
sudo apt-get install openssh-server

ssh服务命令:

1
2
3
sudo/etc/init.d/ssh start
sudo/etc/init.d/ssh restart
sudo/etc/init.d/ssh stop

配置文件:

1
2
3
4
# 更改ssh配置文件前最好先备份一个
sudo cp/etc/ssh/sshd_config /etc/ssh/sshd_config.original
# 可以在如下配置文件中修改Port端口号(默认是22),PermitRootLogin等
vim /etc/ssh/sshd_config

生成ssh key免密登录:

1
2
3
4
# 在客户端生成用于登录的公私钥,生成后位于~/.ssh/目录下
ssh-keygen -t rsa -b 4096 -C "xxx@mail.com"
# 将公钥拷贝到远端服务器的~/.ssh/目录下,并重命名为authorized_keys
scp ~/.ssh/id_rsa.pub user@ip:~/.ssh/authorized_keys

参考:

Generating a new SSH key and adding it to the ssh-agent

ubuntu设置静态ip

1、更改interfaces文件中的内容

1
2
3
4
5
6
7
sudo vim /etc/network/interfaces

auto enp0s8
iface enp0s8 inet static
address 192.168.56.116
netmask 255.255.255.0
gateway 192.168.56.1

2、刷新ip

1
2
sudo ip addr flush enp0s8
sudo systemctl restart networking.service

3、设置重启后依然生效

1
2
3
sudo vim /etc/NetworkManager/NetworkManager.conf
# 将NetworkManager.conf中managed=false改为managed=true
sudo service network-manager restart

参考文章如下:

ubuntu 16.04 设置静态IP