Debian/Ubuntu系统小技巧收集

2013.08.25/2016.07.31发布于笔记暂无评论/目录

整理一些Debian/Ubuntu上的小技巧,包括系统管理、系统美化和娱乐等方面。

系统管理

挂载samba共享文件夹

sudo apt-get install cifs-utils
sudo mkdir /media/samba-shared
sudo mount -t cifs -o guest,rw //samba-address/shared-folder /media/samba-shared

zip解压后的文件名乱码

解压时给unzip指定字符集,例如:

unzip -O GBK abc.zip

将Menu键映射为右Alt键

在笔记本上用Emacs的时候,Menu键特别碍事,而右Alt键很不好按,系统的键盘映射方案并没有合适的修改方法。

kubuntu 14.04使用xkb来进行键盘映射管理,配置方法可参考xkb的wiki

cd /usr/share/X11/xkb/symbols

例如,这里可以直接修改全局配置文件pc,也可在配置方案'ctrl_win'的基础上修改

sudo cp altwin altwin.bak
sudo vi altwin

找到xkb_symbols "ctrl_win",然后修改为

partial modifier_keys
xkb_symbols "ctrl_win" {
    key <LWIN> { [ Control_L ] };
    key <RWIN> { [ Control_R ] };
    modifier_map Control { <LWIN>, <RWIN> };
    key <MENU>  { [ Alt_R ] };
    modifier_map Mod1 { Alt_L, Menu };
}

然后,运行sudo dpkg-reconfigure xkb-data更新xkb缓存,并重新打开键盘配置,然后在高级里选择对应的选项并应用。

使用setxkbmap修改键盘映射

setxkbmap有一些预定义的键盘重定义规则,可以在/usr/share/X11/xkb/rules/base.lst里查看。比较有用的有:

  • caps:swapescape 交换Esc和Caps Lock
  • ctrl:menu_rctrl 将右侧的Menu映射为右Ctrl
  • altwin:ctrl_win 将Ctrl映射到Win上

使用setxkbmap -option caps:swapescape即可,然后如果需要下次启动的时候依然有效,可以把setxkbmap命令放到一个shell脚本里,例如/home/mwb/bin/remapkeys.sh

#!/usr/bin/env bash

setxkbmap -option caps:swapescape
setxkbmap -option ctrl:menu_rctrl
setxkbmap -option altwin:ctrl_win

然后新建一个desktop文件/home/mwb/.config/autostart/remapkeys.desktop

[Desktop Entry]
Encoding=UTF-8
Type=Application
Terminal=false
Icon=
Exec=sh -c "sleep 15 && /home/wenmao/bin/remapkeys.sh"
Name=Remapkeys
Comment=Remap Keys

使用flock进行跨进程同步

File Locking是linux上很常见的一种进程间的同步机制,比如运行apt-get的时候经常遇到的一个错误:

E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)

便是因为有其他的进程占用了apt-get的文件锁。

linux系统提供了一个flock的系统调用(见man 2 flock)来提供文件锁的接口,另外大多数的发行版里还附带了一个flock程序(见man flock),也提供了文件锁的功能,flock程序可以提供读写锁和互斥锁,还可以设置是否阻塞等功能,在编写shell脚本的时候非常有用。

另外,linux进程间的同步还可以通过mkdir程序来实现,简单有效,推荐阅读Lock your script

转换Unix时间戳

date -d @1409107909

输出

Wed Aug 27 10:51:49 CST 2014

查看目标端口的命令

nc -v localhost -z 80

查看系统关机和重启时间

以下几个命令可以用于查看系统的正常关机和重启记录

who -b
uptime
last reboot

修改DNS服务器地址

debian和ubuntu里有一个专门管理name server的包resolvconf,它可以从多个渠道读取name server信息并写入/etc/resolv.conf中。

如果需要手动添加name server,可以编辑/etc/resolvconf/resolv.conf.d/base,添加

nameserver 8.8.8.8
nameserver 8.8.4.4

然后运行sudo resolvconf -u即可更新/etc/resolv.conf

彻底关闭pulseaudio服务

pulseaudio是一个音乐服务程序,如果想彻底关闭它,可做如下操作。

首先禁止其开机自启动:

update-rc.d pulseaudio disable

修改配置文件/etc/pulse/client.conf,将下面两行配置取消注释并改为[1]

autospawn = no
daemon-binary = /bin/true

kubuntu的l2tp vpn支持

安装l2tp-ipsec-vpn

# sudo apt-add-repository ppa:werner-jaeger/ppa-werner-vpn
# sudo apt-get update
sudo apt-get install l2tp-ipsec-vpn

重启系统。

!!!下面的NetworkManager-l2tp会导致系统崩溃,以下内容仅为安装记录,不推荐操作。!!!

安装软件

sudo apt-get install build-essential git intltool ppp-dev libdbus-glib-1-dev libnm-util-dev libnm-glib-dev libnm-glib-vpn-dev libgtk-3-dev libgnome-keyring-dev

安装NetworkManager-l2tp

git clone https://github.com/seriyps/NetworkManager-l2tp
cd NetworkManager-l2tp
./autogensh
make
make install

手动添加locale

查看当前已安装的locale

locale -a

在Ubuntu上安装zh_CN.UTF-8

sudo /usr/share/locales/install-language-pack zh_CN

然后,修改默认locale

sudo cat > /etc/default/locale << EOF
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN"

source /etc/default/locale

在Debian上安装zh_CN.UTF-8[2]

apt-get install debconf
dpkg-reconfigure locales

设置默认UMASK

umask影响新创建的文件的默认权限,详细的介绍可参考这篇文章。设置系统的默认UMASK,首先在/etc/pam.d/common-session里添加(可能已存在)如下一行

session optional pam_umask.so

然后修改/etc/login.defs的UMASK值即可。如果只需要改某个用户的UMASK,只要在~/.bashrc~/.profile里加入如下一行,注意将00002改为你想要的UMASK。

umask 0002

使用SetGid和umask继承父目录组权限

用一个例子说明,首先创建两个临时用户temp和temp2并设置密码。

sudo useradd temp
sudo passwd temp

sudo useradd temp2
sudo passwd temp2

创建一个临时组temp-group并将两个临时用户加入临时组里。

sudo groupadd temp-group
sudo usermod -a -G temp-group temp
sudo usermod -a -G temp-group temp2

用temp用户创建一个新的文件夹/tmp/test

cd /tmp
sudo -u temp mkdir test

ls -ld test
# drwxr-xr-x 2 temp temp 4096 Nov 10 10:35 test

/tmp/test文件夹的组改为temp-group,并为其添加组的写权限

sudo chgrp temp-group test
ls -ld test
# drwxr-xr-x 2 temp temp-group 4096 Nov 10 10:35 test

sudo chmod g+w test
ls -ld test
# drwxrwxr-x 2 temp temp-group 4096 Nov 10 10:35 test

设置/tmp/test文件夹的SetGid权限

sudo chmod g+s test
ls -ld test
# drwxrwsr-x 2 temp temp-group 4096 Nov 10 10:35 test

这样以来,在/tmp/test里用temp-group组的用户创建的文件,都会集成父目录/tmp/test的组。常见的一个用处就是,temp用户创建的文件,temp2用户也可以直接访问和修改。

umask 0002会使新创建文件和文件夹的组用户拥有写权限。

cd test
sudo -u temp bash -c 'umask 0002 && mkdir test-sub-dir'
sudo -u temp2 bash -c 'umask 0002 && touch test-file'

ls -ld test-dir test-file
# drwxrwsr-x 2 temp  temp-group 4096 Nov 10 10:45 test-dir
# -rw-rw-r-- 1 temp2 temp-group    0 Nov 10 10:45 test-file

同步系统时间

ntpdate time.nist.gov

其他的时间服务器:

  • pool.ntp.org

设置时区

dpkg-reconfigure tzdata

通常,修改系统时间后,最好重启相关的服务,比如cron和rsyslog等,否则修改不会对其生效。

service cron restart
service rsyslog restart

crontab默认编辑器

在Debian/Ubuntu上,运行crontab -e命令默认使用nano编辑器,如果想使用vim,可在~/.bashrc里加入如下一行:

export EDITOR=vi

然后使用source命令重新载入~/.bashrc即可。

source ~/.bashrc

kubuntu开启和关闭笔记本的触摸板

使用如下命令开启或关闭触摸板。

synclient touchpadoff=1 # 关闭触摸板
synclient touchpadoff=0 # 打开触摸板
syndaemon -i 3 -d       # 打字时关闭触摸板,3秒打字结束后触摸板关闭的时间

或者

touchpad_id=`xinput | grep -i touchpad | sed -r 's/.*id=([0-9]+).*/\1/'`
xinput --disable ${touchpad_id}
xinput --enable ${touchpad_id}

使用chkconfig管理系统服务

参考这篇文章,使用chkconfig可以方便的启用和禁用/etc/rcX.d下的服务,常用的命令有:

  • 'chkconfig --list' 查看所有服务的启动状态。
  • 'chkconfig apache2 on --level 2,3,5' 使apache2服务在2,3,5运行级别上自动启动。
  • 'chkconfig apache2 --add' 添加apache2服务。
  • chkconfig apache2 off 在所有运行级别上禁止apache2服务自启动。

Linux系统运行级别简介:

  • 0 开机
  • 1 单人 文字界面
  • 2 多人 无网络功能
  • 3 多人 文字界面
  • 4 保留
  • 5 多人 图形界面
  • 6 重启

使用runlevel查看当前运行级别。

ssh配置

详细内容可参考man ssh_config

管理多个ssh key文件

生成key:

ssh-keygen -t rsa -f ~/.ssh/id_rsa.home -C "home key"
ssh-keygen -t rsa -f ~/.ssh/id_rsa.work -C "work key"  

修改~/.ssh/config,管理key:

Host home
Hostname home.example.com
IdentityFile ~/.ssh/id_rsa.home
User `<your home account>`

Host work
Hostname work.example.com
IdentityFile ~/.ssh/id_rsa.work
User `<your work account>`

定义ssh端口号

如果sshd监听的端口不是默认的22,则可在~/.ssh/config里如下设置

Host mawenbao.com
IdentityFile ~/.ssh/id_rsa.mawenbao.com
Port 12345

保持ssh连接

在ssh客户端,可以通过配置ServerAliveInterval来保持ssh连接。比如

ServerAliveInterval 60

上面的配置表示,当超过60秒没有收到ssh服务器的响应后,主动向服务器发送请求来保持连接。

为不同的用户使用单独的sshd配置

/etc/ssh/sshd_config文件中,使用Match块可以为某些用户启用单独的配置,这些配置将覆盖全局配置,详情可参考man sshd_config.

为debian启用单独的Cron日志

Debian上cron的日志默认和其他系统日志记录在一起,查看起来十分不方便,参考这篇文章,为debian6的cron启用单独的日志。

  1. 修改配置文件/etc/rsyslog.conf,

    去掉#cron.* /var/log/cron.log这一行的注释符#。将*.*;auth,authpriv.none -/var/log/syslog改为*.*;auth,authpriv.none,cron.none -/var/log/syslog,如下

     *.*;auth,authpriv.none,cron.none  -/var/log/syslog
     cron.* /var/log/cron.log
    
  2. 重启rsyslogd

     service rsyslog restart
    

自动挂载windows分区

对于ntfs分区,安装如下的软件包,并运行ntfs-config配置挂载点。

sudo apt-get install ntfs-config ntfs-3g

对于fat32分区,可参考Mounting Windows Partitions

生成ssh key

ssh-keygen -t rsa -C "wilbur.ma@hotmail.com"

nohup and screen

nohup帮助程序在后台运行,即使终端关闭也不会有影响。

nohup ./test.sh &

标准输出会被写入nohup.out,如果当前目录无法正常写入,会写在~/nohup.out

当使用远程连接(ssh)进行系统升级时,screen很有用,即便期间连接断开,也不会影响升级过程,重新连接后还可以方便的恢复到之前的会话。可参考这里

编译po文件

编译gettext的po文件需要安装translate-toolkit工具,安装好后运行如下命令即可。

pocompile zh_CN.po -o zh_CN.mo

或使用msgfmt

msgfmt -cvo zh_CN.mo zh_CN.po

脚本

获取bash脚本的所在目录

#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )"

系统美化

VLC中文字幕乱码

修改两项配置:

  1. 视频>字幕/OSD>文本渲染器>字体 选择一个中文字体。
  2. 输入/编码解码器>字幕编解码器>字幕文本编码 选择GB18030,然后去掉"UTF-8字幕"和"格式化字幕"前面的勾。

字体

可以考虑使用微软雅黑字体C:\Windows\Fonts\msyh.ttf和C:\Windows\Fonts\msyhbd.ttf,效果会好很多。

ibus输入法

sudo apt-get install ibus gnome-icon-theme

如果安装ibus后,无法显示系统托盘图标和候选词框,安装gnome-icon-theme即可。如果安装后依然有问题,可执行如下命令。

ibus-daemon -x -r -d

设置ibus-pinyin的候选词个数:

/usr/lib/ibus-pinyin/ibus-setup-pinyin

fcitx

在Kubuntu上推荐使用fcitx输入法,词库感觉比ibus-pinyin好些。

sudo apt-get install fcitx fcitx-pinyin

然后在~/.xprofile里设置三个环境变量

export QT_IM_MODULE="fcitx"
export XMODIFIERS="@im=fcitx"
export GTK_IM_MODULE="fcitx"

然后重新登陆,如果有问题可以使用fcitx-diagnose工具查找问题。

使用自定义fcitx拼音词典

首先从这里下载所需的词典文件,然后解压后拷贝到~/.config/fcitx/pinyin/目录下,最后重启fcitx即可。

娱乐

1. MP3标签中文乱码

尚需完善

a) 图形界面转码工具

easytag

b) mutagen

sudo apt-get install convmv iconv python-mutagen
find . -iname "*.mp3" -execdir mid3iconv -e GBK {} \;

阅读资料


  1. 配置文件修改参考了Ubuntu Tip: Turning PulseAudio On and Off,引用于2014-03-20。

  2. 参考Debian Wiki: Locale,引用于2014-03-12。

#debian#trick#ubuntu

评论