系统安装

安装配置

安装软件

  • 配置软件源
  • google-chrome
    # 自带flash插件
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    
  • fcitx
    # 在 系统|语言支持 中选择 fcitx 作为键盘输入法
    apt-get install fcitx-googlepinyin
    
  • jdk
    apt install default-jdk
    
    # 配置环境变量
    JAVA_HOME="/usr/lib/jvm/default-java"
    
  • latex
    wget https://github.com/scottkosty/install-tl-ubuntu/raw/master/install-tl-ubuntu
    chmod +x install-tl-ubuntu
    ./install-tl-ubuntu --help              # show help
    sudo ./install-tl-ubuntu                # install latex
    
  • stardict
    sudo apt-get install stardict
    
    # 安装词库
    ls *.bz2 | xargs -n 1 -I {} sudo tar -xjvf {} -C /usr/share/stardict/dic/
    
    # 隐藏主窗口:选项|主窗口|Options|隐藏主窗口
    # 打开主窗口
    stardict - Lookup words
    
  • virtualbox
    # 将用户加入到vboxusers组,以便usb设备导入到虚拟机中
    usermod -a -G vboxusers micky
    

实用配置

  • 去掉桌面显示主目录下的文件

    Ubuntu配置方法:编辑~/.config/user-dirs.dirs文件,直接清空即可。

  • 触摸板配置
    # /etc/X11/xorg.conf.d/70-synaptics.conf
    Section "InputClass"
            Identifier "touchpad catchall"
            Driver "synaptics"
            MatchIsTouchpad "on"
            Option "TapButton1" "1"
            Option "TapButton2" "3"
            Option "TapButton3" "2"
            Option "VertEdgeScroll" "on"
            Option "VertTwoFingerScroll" "on"
            Option "HorizEdgeScroll" "on"
            Option "HorizTwoFingerScroll" "on"
            Option "CircularScrolling" "on"
            Option "CircScrollTrigger" "2"
            Option "EmulateTwoFingerMinZ" "40"
            Option "EmulateTwoFingerMinW" "8"
            Option "FingerLow" "30"
            Option "FingerHigh" "50"
            Option "MaxTapTime" "125"
            Option "VertScrollDelta" "-111"
            Option "HorizScrollDelta" "-111"
            Option "DialDelta" "-1"
    
  • 语言环境

    中文环境下需要通过如下命令添加zh_CN.UTF-8支持:

    sudo dpkg-reconfigure locales           # add zh_CN.UTF-8
    sudo locale-gen zh_CN.UTF-8
    sudo locale
    

    如果没有添加中文支持,在启动文本编辑程序时可能出现如下提示而无法输入中文。

    (process:3747): Gtk-WARNING **: Locale not supported by C library.
            Using the fallback 'C' locale.
    

    为了能够在编辑程序中使用中文输入法,需要对文件/etc/environment做如下设置。

    LC_CTYPE="zh_CN.UTF-8"
    
  • DNS配置

    在 /etc/network/interfaces 中添加 dns-nameservers/dns-search/dns-domain 等配置

  • 终端

    Tmux是一个支持分屏的终端,可以直接通过apt-get安装:

    sudo apt-get install tmux
    

    在gnome-terminal中输入tmux即可进入tmux终端。 Tmux基本概念包括:

    server
    输入tmux命令开启一个服务
    session
    一个服务包含多个会话
    window
    一个会话包含多个窗口
    pane
    一个窗口包含多个面板

系统管理

网络管理

基本配置

基本网络接口控制可以通过ifconfig命令配置,但是该命令只能临时配置,持久化需要通过配置文件实现。

ifconfig eth0 up|down                   # 开启/关闭
ifconfig eth0[:1] 192.168.2.10 [netmask 255.255.255.0] [broadcast 192.168.2.255]
ifconfig eth0 hw ether AA:BB:CC:DD:EE:FF
ifconfig eth0 mtu 1024                  # 设置MTU
ifconfig eth0 arp|-arp                  # 启用/关闭ARP协议
ifconfig eth0 promisc|-promisc          # promisc表示不会丢弃别人的包
ifconfig eth0 add 33ffe:3240:800:1005::2/64    # 配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64    # 删除IPv6地址

永久修改MTU:

# -- CentOS / RHEL / Fedora: /etc/sysconfig/network-scripts/ifcfg-eth0
MTU="1500"                              # service network restart
IPV6_MTU="1280"                         # for IPv6

# -- Debian / Ubuntu: /etc/network/interfaces
mtu 9000                                # /etc/init.d/networking restart

用户管理

用戶管理

账户管理相关配置文件如下表所示。

配置 功能
/etc/passwd 每个用户一行,用户基本信息
/etc/shadow 每个用户一行,包括加密密码
/etc/group 系统中的用户组
/etc/default/useradd 命令useradd默认会加入的组
/etc/login.defs 用于配置/etc/shadow
useradd -G group user                   # 将用户加入指定组
useradd -G admins,ftp,developers user   # 将用户加入多个组
useradd -g developers user              # 将用户加入基础组,一个用户只能有一个基础组
usermod -a -G ftp user                  # 将已有用户append到指定组
usermod -g www user                     # 更换用户基础组
groupadd developers                     # 添加一个新的用户组
id user                                 # 查看一个用户id信息以及在哪些组

将用户加入sudo组之后,配置/etc/sudoers添加如下行即可使用sudo命令:

# using command add user to sudo group: usermod -a -G sudo <username>
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

设备管理

时间配置

debian下的时间通常比windows快8个小时,这在双系统上很容易测试出来。通过如下命令可以让其和windows时间相同:

hwclock -w --localtime

引导配置

  • 通过USB Live CD安装grub
    sudo mount /dev/sda5 /mnt
    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /sys /mnt/sys
    sudo mount --bind /proc /mnt/proc
    sudo mount /dev/sdaX /mnt/boot          # only if you separate boot partition
    sudo chroot /mnt
    sudo grub-install --root-directory=/mnt /dev/sda
    
  • 处理隐藏GRUB

    如果执行update-grub2更新grub动作的时候能看到如下提示信息,则说明GRUB被隐藏了,启动的时候也看不到选择界面。

    Generating grub configuration file … Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.

    处理办法是编辑/etc/default/grub注释掉GRUB_HIDDEN_TIMEOUT行。

  • 通过GRUB rescue修复grub
    grub> set pager=1
    
    grub> ls
    (hd0) (hd0,msdos2) (hd0,msdos1)
    
    grub> ls (hd0,1)/
    lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/  lib/
    lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/
    srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old
    initrd.img initrd.img.old
    
    grub> cat (hd0,1)/etc/issue
    Ubuntu 14.04 LTS \n \l
    
    grub> set root=(hd0,1)
    grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
    grub> initrd /boot/initrd.img-3.13.0-29-generic
    grub> boot
    
    # 有些Linux系统已经有了超链接,可以采用更简单的写法
    grub> set root=(hd0,1)
    grub> linux /vmlinuz root=/dev/sda1
    grub> initrd /initrd.img
    grub> boot
    

    如果GRUB rescue shell和通常的不一样,可以载入模块normal.mod和linux.mod。

    grub rescue> set prefix=(hd0,1)/boot/grub
    grub rescue> set root=(hd0,1)
    grub rescue> insmod normal
    grub rescue> normal
    grub rescue> insmod linux
    grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
    grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
    grub rescue> boot
    

    最好在启动之后永久性的修复一下。

    # update-grub
    Generating grub configuration file ...
    ...
    done
    # grub-install /dev/sda
    Installing for i386-pc platform.
    Installation finished. No error reported.
    

内核配置

  • 更新initramfs

    有时候删除内核模块之后,重启还是能看到已删除的模块载入到系统。这可能性是从initramfs中载入的,更新一下即可。

    update-initramfs -c -k 2.6.18-1-686
    
    -c
    表示新创建一个initramfs
    -k
    指定内核版本,可以用uname -r获取

软件管理

Debian/Ubuntu

软件包管理主要需要熟悉的命令:dpkgapt-cacheapt-getapt-file等。

查询软件包状态信息

dpkg -l | head
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                      Version                         Architecture Description
+++-=========================-===============================-============-============
ii  account-plugin-aim        3.8.6-0ubuntu9.2                amd64        Messaging ac
ii  account-plugin-facebook   0.11+14.04.20140409.1-0ubuntu2  all          GNOME Contro
ii  account-plugin-flickr     0.11+14.04.20140409.1-0ubuntu2  all          GNOME Contro
ii  account-plugin-google     0.11+14.04.20140409.1-0ubuntu2  all          GNOME Contro
ii  account-plugin-jabber     3.8.6-0ubuntu9.2                amd64        Messaging ac

对安装包的操作:

# ref: dpkg man page
dpkg --listfiles <package>              # 查询属于软件的文件
dpkg -s <package>                       # 查询软件详细信息
dpkg -S <package>                       # 从安装包中查询文件名

Ubuntu下还需要熟悉如下命令:

apt-cache search                        # 搜索软件包
apt-cache show                          # 获取软件包相关信息
apt-get remove
apt-get remove --purge
apt-get build-dep                       # 安装编译环境

PPA叫Personal Package Archives,添加好PPA源之后在/etc/apt/sources.list.d/目录下就能看到对应的列表。

sudo add-apt-repository ppa:user/name   # 添加PPA
sudo add-apt-repository -r ppa:username # 删除PPA

文件系统

文件系统

  • 修改磁盘卷标
    sudo e2label DEV LABEL                  # ext3/ext4
    sudo btrfs filesystem label DEV LABEL   # btrfs
    sudo ntfslabel DEV LABEL                # ntfs
    
  • 启动NFS服务

    安装NFS服务工具:

    sudo apt-get install nfs-kernel-server
    

    编辑/etc/exports添加如下一行。

    /home/micky/dev/nfs   *(ro,sync,no_root_squash)
    

    重启NFS服务。

    sudo service nfs-kernel-server restart
    

    客户端只需要挂载即可使用:

    mount -t nfs -o proto=tcp,port=2049,nolock 192.168.1.67:/home/micky/dev/nfs /mnt/
    
  • 启动NFS服务 on Centos
    yum -y install nfs-utils rpcbind
    
    vi /etc/exports
    /share     *(rw,sync,no_root_squash)
    
    service rpcbind start
    service nfs start
    
    on client:
    mount -t nfs -o proto=tcp,port=2049,nolock 192.168.153.59:/data /home/nfs59
    
  • 自动挂载USB设备

    创建文件/etc/udev/rules.d/87-usb-automount.rules

    KERNEL!="sd[a-z][0-9]", GOTO="exit_automount"
    # Import FS info
    IMPORT{program}="/sbin/blkid -o udev -p %N"
    # Get a label if present, otherwise specify one
    ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
    ENV{ID_FS_LABEL}=="", ENV{dir_name}="Disk-%k"
    # Global mount options
    ACTION=="add", ENV{mount_options}="relatime"
    # Filesystem-specific mount options
    ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
    # Mount the device
    ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
    # Clean up after removal
    ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount /dev/%k"
    ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
    # Exit
    LABEL="exit_automount"
    

    更新配置:

    udevadm control --reload-rules
    
  • 文件备份

    • rsync

      1,rsync可以再中断传输之后恢复传输 2,rsync只传输源文件和目标文件之间不一致的部分 3,rsync可以执行完整或增量备份 4,可以使用基于ssh等方式传输文件 5,可以保持原有文件的所有属性信息

      Local:  rsync [OPTION...] SRC... [DEST]
      
      Access via remote shell:
        Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
        Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
      
      Access via rsync daemon:
        Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
              rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
        Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
              rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
      
      Usages with just one SRC arg and no DEST arg will list the source files instead of copying.
      

      常用选项

      -a, –archive
      归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
      -r, –recursive
      对子目录以递归模式处理
      -l, –links
      保留软链接
      -p, –perms
      保持文件权限
      -t, –times
      保持文件时间信息
      -g, –group
      保持文件属组信息
      -o, –owner
      保持文件属主信息
      -D, –devices
      保持设备文件信息
      -c, –checksum
      打开校验开关,强制对文件传输进行校验
      -v, –verbose
      详细模式输出
      -H, –hard-links
      保留硬链接
      -E, –executability
      保留可执行权限
      –progress
      显示进度
      –log-file=FILE
      指定日志文件
      -n, –dry-run
      显示哪些文件将被传输
      -u, –update
      只进行更新,跳过比源头更新的文件
      -b, –backup
      创建备份,被覆盖的文件会被重命名为~filename
      –suffix=SUFFIX
      定义备份文件前缀
      –backup-dir=DIR
      指定备份目录
      -w, –whole-file
      完全复制,不进行增量检测
      -x, –one-file-system
      不跨越文件系统边界
      -R, –relative
      使用相对路径信息
      -z, –compress
      在传输时对备份文件进行压缩处理
      -S, –sparse
      对稀疏文件进行特殊处理以节省DST的空间
      -q, –quiet
      精简输出模式
      –existing
      只备份DST存在的文件,忽略新建文件
      –delete
      删除DST有而SRC没有的文件
      –delete-excluded
      删除DST中被指定排除的文件
      –delete-after
      传输结束之后再删除
      –ignore-errors
      当删除出现错误时,忽略错误并继续删除
      –force
      强制删除非空的目录
      –bwlimit=KBPS
      限制IO带宽

      符号链接选项说明:

      –copy-links
      将所有链接变成普通文件
      –links –copy-unsafe-links
      复制安全链接,不安全链接变为普通文件
      –links –safe-links
      复制安全链接,跳过不安全链接
      –links
      复制所有符号链接
      –copy-unsafe-links
      不安全链接变为普通文件,跳过安全链接
      -K, –keep-dirlinks
      保留目录符号链接
      -k, –copy-dirlinks
      替换目录符合链接为普通目录
      # 全量同步命令
      rsync -acvKHE --progress --log-file=rsync.log SRC DST
      # 增量同步命令
      rsync -acvKHEu --progress --log-file=rsync.log SRC DST
      # 显示同步列表
      rsync -acvKHEn SRC DST