根據Bash Guide for Begineers的說法,
profile用來放環境變數(Environment variables)例如: PATH, USER, MAIL,HOSTNAME及HISTSIZE等
bashrc則是用來放function與alias,
由於使用者在每次登入時都會去讀/etc/profile,
因此在多shell環境的系統上將專屬於某特定shell的設定分開放可以避免一些相容性問題.
例如Bourne shell看不懂Bash語法之類的.
直接觀察新安裝的archlinux, 跟shell有關係的初始檔有這些
/etc/profile
/etc/bash.bashrc或/etc/bashrc #archlinux/ubuntu/debian裡的是bash.bashrc, Fedora/CentOS裡的會是bashrc
~/.bash_profile
~/.bashrc
大致上分為profile與bashrc兩群,
實驗常見的使用情景一, 不考慮初始檔內部source別人的話,
從login到拿到shell為止, 系統會自動以這樣的順序執行這些rc檔,
1. /etc/profile
2.~/.bash_profile
這種場景不會去執行到/etc/bash.bashrc與~/.bashrc
場景二:
不login拿到shell, 例如直接/bin/bash, su 或是在X裡開個新terminal拿到shell,
執行的順序是:
1./etc/bash.bashrc
2.~/.bashrc
這個場景不會執行/etc/profile與~/.bash_profile,
但是fork出來的child shell還是會拿到parent shell的變數,
因此不做login-specific initializations沒問題
所以可以理解在多shell的系統環境下, 每個user可能使用不同的shell,
因此用profile處理login-specific initializations,
用bashrc處理Bash的shell-specific initializations, 兩者獨立.
至於從login拿到shell的人就分別在system-wide與individual-wide的profile檔裡source bashrc檔做shell-specific initializations.
果然在/etc/profile與~/.bash_profile裡看到利用source的方式叫用bashrc
/etc/profile:
if test "$PS1" && test "$BASH" && test -r /etc/bash.bashrc; then
. /etc/bash.bashrc
fi
~/.bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
這樣流程就很好理解了,
System-wide configuration then individual-wide configuration,
Login-specific initializations then Shell-specific initializations,
從Login開始的話就是(/etc/profile -> /etc/bash.bashrc) =>(~/.bash_profile -> ~/.bashrc)
#值得一提的是,
distributer建議自訂系統層級的環境變數做法是寫成shell script後放進/etc/profile.d,
而不是自己去改/etc/profile, 免得未來系統升級時要手動merge兩個版本的/etc/profile,
這是不太允許重灌的系統管理員會有的顧慮,
個人使用者要不要這樣做隨自己的便,
當然個人化的環境變數設定放進~/.bash_profile這是沒有太大問題的
2015年2月23日 星期一
2015年2月17日 星期二
中文化vconsole
作法:
安裝fbterm
#pacman -S fbterm
想執行fbterm的user加入video群組
#usermod -aG sudo land
讓普通user能按Ctrl+Space切換輸入法
#chmod u+s /usr/bin/fbterm
或是
#sudo setcap 'cap_sys_tty_config+ep' /usr/bin/fbterm
vim ~/.fbtermrc
#也可以換成DejaVu Sans Mono, Droid Sans Fallback, 多試幾種, 有字距過窄切掉邊邊或是出現重影的問題,
font-name=Monaco, et24l
font-size=14
input-method=fcitx-fbterm
安裝fcitx輸入法
#pacman -S fcitx fcitx-chewing fcitx-configtool fcitx-fbterm
編輯~/.xinitrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
編輯~/.profile
alias fbterm='LANG=zh_TW.UTF-8 fbterm'
export DISPLAY=:0
#fbterm -i fcitx-fbterm #選用, 沒要進shell就開fbterm的話不需要這個
運行可中文輸入的utf fbterm(for 識別原生中文檔名 or UTF PTT(ssh bbsu@ptt.cc))
#Linux本身就是UTF ready, 故中文檔名為utf編碼, 只需要支援中文的utf字型就可以看的見中文檔名
#export LC_ALL=zh_TW.UTF-8
運行可中文輸入的big5 fbterm(for 7777 or telnet to ppt)
#export LC_ALL=zh_TW.Big5;fcitx-fbterm-helper
問題:
1.cannot communicate fcitx with dbus...
成因: 直接執行fcitx開啟輸入法
解法: 內定會先偵測X11是不是在運行, 要在fbterm下使用的話, 使用fcitx-
fbterm-helper, 先載入fcitx後呼叫fbterm
#fcitx-fbterm-helper
2.stdin isn't a interactive tty...
其實沒解,過一陣子再跑一次fcitx就沒問題
安裝fbterm
#pacman -S fbterm
想執行fbterm的user加入video群組
#usermod -aG sudo land
讓普通user能按Ctrl+Space切換輸入法
#chmod u+s /usr/bin/fbterm
或是
#sudo setcap 'cap_sys_tty_config+ep' /usr/bin/fbterm
vim ~/.fbtermrc
#也可以換成DejaVu Sans Mono, Droid Sans Fallback, 多試幾種, 有字距過窄切掉邊邊或是出現重影的問題,
font-name=Monaco, et24l
font-size=14
input-method=fcitx-fbterm
安裝fcitx輸入法
#pacman -S fcitx fcitx-chewing fcitx-configtool fcitx-fbterm
編輯~/.xinitrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
編輯~/.profile
alias fbterm='LANG=zh_TW.UTF-8 fbterm'
export DISPLAY=:0
#fbterm -i fcitx-fbterm #選用, 沒要進shell就開fbterm的話不需要這個
運行可中文輸入的utf fbterm(for 識別原生中文檔名 or UTF PTT(ssh bbsu@ptt.cc))
#Linux本身就是UTF ready, 故中文檔名為utf編碼, 只需要支援中文的utf字型就可以看的見中文檔名
#export LC_ALL=zh_TW.UTF-8
運行可中文輸入的big5 fbterm(for 7777 or telnet to ppt)
#export LC_ALL=zh_TW.Big5;fcitx-fbterm-helper
問題:
1.cannot communicate fcitx with dbus...
成因: 直接執行fcitx開啟輸入法
解法: 內定會先偵測X11是不是在運行, 要在fbterm下使用的話, 使用fcitx-
fbterm-helper, 先載入fcitx後呼叫fbterm
#fcitx-fbterm-helper
2.stdin isn't a interactive tty...
其實沒解,過一陣子再跑一次fcitx就沒問題
2014年12月14日 星期日
安裝常用軟體
#Install base-devel if you need AUR
#pacman -S base-devel
#Install yaourt for access AUR softwares
#vim /etc/pacman.conf #i686或X86-64擇一
#i686
[archlinuxfr]
SigLevel = Optional TrustAll
Server = http://repo.archlinux.fr/i686
#X86-64
[archlinuxfr]
SigLevel = Optional TrustAll
Server = http://repo.archlinux.fr/x86_64
#SigLevel要加, 不然yaourt會抱怨某些AUR packages的簽名不對
#pacman -Syu yaourt
#系統升級(Option:archlinux rolling release, 所以有時DB內容會需要更新)
#pacman -Syu
#pacman-db-upgrade
#安裝常用小工具
#pacman -S vim
#pacman -S wget
#pacman -S fbterm
#pacman -S tmux
#yaourt -S tintin #arhclinux官方不維護tintin, 要到AUR裡找
2014年12月13日 星期六
自訂開機後運行服務
#設定Ethernet
# systemctl enable dhcpcd.service#開機自動取得IP
# systemctl start dhcpcd #啟動dhcpcd
#手動設定wireless, 三步驟:1. scan ssid, 2.pass (WEP/WPA) authenication, 3.dhcpd/manual get IP
# pacman -S iw
# pacman -S wpa_supplicant
#方法一 connect with wpa_passphrase
# iw dev wlan0 scan | less #掃描SSID
#通過wpa2認證(通過後開新terminal執行dhcpcd wlp1s0或是加上-B讓此步驟背景化再執行dhcpcd wlp1s0要IP)
# wpa_supplicant -i wlp1s0 -c<(wpa_passphrase "YOUR_SSID" YOUR_KEY)
# dhcpcd wlp1s0
#方法二 connect with wpa_cli
# mkdir /var/run/wpa_supplicant
# chgrp wheel /var/run/wpa_supplicant
# vim /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1
# wpa_supplicant -B -i wlp1s0 -c /etc/wpa_applicant/wpa_supplicant.conf
# wpa_cli #進入wpa_cli互動模式, 示範過程看https://wiki.archlinux.org/index.php/WPA_supplicant
/index.php/WPA_supplicant
>scan
>scan_results
>add_network
>set_network 0 ssid "YOUR_SSID"
>set_network 0 psk "YOUR_KEY"
>enable network 0
>save_config
>quit
# dhcpcd wlp1s0
#開機自動連接wireless
#dhcpcd會執行所有/usr/lib/dhcpcd/dhcpcd-hooks/下的script(hooks),
#其中的10-wpa_supplicant hook會自動對wireless介面呼叫wpa_supplicant進行認證
#10-wpa_supplicant hook的發動條件
1.沒有wpa_supplicant常駐
2.dhcpcd檢查到任一設定檔存在
/etc/wpa_supplicant/wpa_supplicant-"$interface".conf
/etc/wpa_supplicant/wpa_supplicant.conf
/etc/wpa_supplicant-"$interface".conf
/etc/wpa_supplicant.conf
#因此在正確位置放好wpa_supplicant設定檔, 將dhcpcd掛入開機自動執行(見上方設定Ethernet段)後, 開機時dhcpcd即可自動完成wireless的啟動
#關閉dhcpcd hook的行為是在dhcpcd.conf加入nohook wpa_supplicant命令
# vim /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
update_config=1
fast_reauth=1
ap_scan=1
# wpa_passphrase "Inn of the Last Home" "YOUR_KEY>>
/etc/wpa_supplicant/wpa_supplicant.conf
#自動對時, 2014/12/15時arch linux的ntpd會嘗試listen on ipv4導致啟動失敗,
依照下列方式強制其只開啟在ipv4
# pacman -S ntpd
# cat /usr/lib/systemd/system/ntpd.service
#檢查是否有一行像這樣:ExecStart=/usr/bin/ntpd -g -u ntp:ntp , 是的話繼續下面動作
# vim /etc/systemd/system/ntpd.service.d/customexec.conf
[Service]
ExecStart=
ExecStart=/usr/bin/ntpd -4 -g -u ntp:ntp
# systemctl enable ntpd
#安裝ssh及sshd
#pacman -S openssh
#systemctl start sshd
#systemctl enable sshd.service
# systemctl enable dhcpcd.service#開機自動取得IP
# systemctl start dhcpcd #啟動dhcpcd
#手動設定wireless, 三步驟:1. scan ssid, 2.pass (WEP/WPA) authenication, 3.dhcpd/manual get IP
# pacman -S iw
# pacman -S wpa_supplicant
#方法一 connect with wpa_passphrase
# iw dev wlan0 scan | less #掃描SSID
#通過wpa2認證(通過後開新terminal執行dhcpcd wlp1s0或是加上-B讓此步驟背景化再執行dhcpcd wlp1s0要IP)
# wpa_supplicant -i wlp1s0 -c<(wpa_passphrase "YOUR_SSID" YOUR_KEY)
# dhcpcd wlp1s0
#方法二 connect with wpa_cli
# mkdir /var/run/wpa_supplicant
# chgrp wheel /var/run/wpa_supplicant
# vim /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1
# wpa_supplicant -B -i wlp1s0 -c /etc/wpa_applicant/wpa_supplicant.conf
# wpa_cli #進入wpa_cli互動模式, 示範過程看https://wiki.archlinux.org/index.php/WPA_supplicant
/index.php/WPA_supplicant
>scan
>scan_results
>add_network
>set_network 0 ssid "YOUR_SSID"
>set_network 0 psk "YOUR_KEY"
>enable network 0
>save_config
>quit
# dhcpcd wlp1s0
#開機自動連接wireless
#dhcpcd會執行所有/usr/lib/dhcpcd/dhcpcd-hooks/下的script(hooks),
#其中的10-wpa_supplicant hook會自動對wireless介面呼叫wpa_supplicant進行認證
#10-wpa_supplicant hook的發動條件
1.沒有wpa_supplicant常駐
2.dhcpcd檢查到任一設定檔存在
/etc/wpa_supplicant/wpa_supplicant-"$interface".conf
/etc/wpa_supplicant/wpa_supplicant.conf
/etc/wpa_supplicant-"$interface".conf
/etc/wpa_supplicant.conf
#因此在正確位置放好wpa_supplicant設定檔, 將dhcpcd掛入開機自動執行(見上方設定Ethernet段)後, 開機時dhcpcd即可自動完成wireless的啟動
#關閉dhcpcd hook的行為是在dhcpcd.conf加入nohook wpa_supplicant命令
# vim /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
update_config=1
fast_reauth=1
ap_scan=1
# wpa_passphrase "Inn of the Last Home" "YOUR_KEY>>
/etc/wpa_supplicant/wpa_supplicant.conf
#自動對時, 2014/12/15時arch linux的ntpd會嘗試listen on ipv4導致啟動失敗,
依照下列方式強制其只開啟在ipv4
# pacman -S ntpd
# cat /usr/lib/systemd/system/ntpd.service
#檢查是否有一行像這樣:ExecStart=/usr/bin/ntpd -g -u ntp:ntp , 是的話繼續下面動作
# vim /etc/systemd/system/ntpd.service.d/customexec.conf
[Service]
ExecStart=
ExecStart=/usr/bin/ntpd -4 -g -u ntp:ntp
# systemctl enable ntpd
#安裝ssh及sshd
#pacman -S openssh
#systemctl start sshd
#systemctl enable sshd.service
2014年12月12日 星期五
在EeePC上安裝Arch Linux
1. 找個合適的Mirror Site
https://www.archlinux.org/download/ -> http://ftp.tku.edu.tw/Linux/ArchLinux/iso/2014.12.01/
2. 選擇合適的bootstrap image, 驗證下載完整性, 寫進USB碟, 等等要用這支USB
碟當安裝碟
$ wget -c http://archlinux.cs.nctu.edu.tw/iso/2014.12.01/archlinux-2014.12.01-dual.iso
$ wget http://archlinux.cs.nctu.edu.tw/iso/2014.12.01/md5sums.txt
$ md5sum -c md5sums.txt
$ sudo sh -c "cat archlinux-2014.12.01-dual.iso > /dev/sdc" && sync && sync && sync
3. 以USB碟開機, /dev/sda1切1G 給/boot, 剩下空間全丟給LVM管, SWAP先用LVM畫4G出來
# fdisk /dev/sda#/dev/sda1 1G, /dev/sda2 148G, 都是type 83
# lvmdiskscan
# 建pv
# pvcreate /dev/sda2
# 建vg
# vgcreate VolGroup00 /dev/sda2
# 建lv
# lvcreate -L 4G VolGroup00 -n swap
# lvcreate -l +100%FREE VolGroup00 -n root
# 格式化
# mkfs.ext4 /dev/mapper/VolGroup00-root
# mkfs.ext4 /dev/sda1
# mkswap /dev/mapper/VolGroup00-swap
# 掛起來
# mount /dev/mapper/VolGroup00-root /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
# swapon /dev/mapper/VolGroup00-swap
4. rankmirrors選擇mirror, pacstrap安裝基礎系統, chroot進入後基礎設定
# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup-orig
# sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist.backup
# rankmirrors -n 6 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist
# pacstrap /mnt base
# genfstab -p /mnt >> /mnt/etc/fstab
# arch-chroot /mnt
# echo atom > /etc/hostname
# vim /etc/vconsole.conf #設定keymap及console字型
KEYMAP=us
FONT=Lat2-Terminus16
# ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime
# hwclock --systohc --utc #注意這裡常搞混
# vi /etc/locale.gen #反註解en_US.UTF-8 UTF-8及zh_TW.UTF-8 UTF-8與zh_TW BIG5
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# vi /etc/mkinitcpio.conf
#確定udev及lvm2的mkinitcpio hooks開啟, udev內定為開, 因此在block與filesystems之間加入lvm2字樣即可
#例如: HOOKS="base udev ... block lvm2 filesystems"
# mkinitcpio -p linux
# passwd
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost atom
#pacman -S grub
#grub-install --target=i386-pc --recheck --debug /dev/sda
#grub-mkconfig -o /boot/grub/grub.cfg
# exit
# umount -R /mnt
# reboot
5. 安裝完成後基本設定
自訂開機後運行服務
安裝常用軟體
自訂Shell
自訂VIM
https://www.archlinux.org/download/ -> http://ftp.tku.edu.tw/Linux/ArchLinux/iso/2014.12.01/
2. 選擇合適的bootstrap image, 驗證下載完整性, 寫進USB碟, 等等要用這支USB
碟當安裝碟
$ wget -c http://archlinux.cs.nctu.edu.tw/iso/2014.12.01/archlinux-2014.12.01-dual.iso
$ wget http://archlinux.cs.nctu.edu.tw/iso/2014.12.01/md5sums.txt
$ md5sum -c md5sums.txt
$ sudo sh -c "cat archlinux-2014.12.01-dual.iso > /dev/sdc" && sync && sync && sync
3. 以USB碟開機, /dev/sda1切1G 給/boot, 剩下空間全丟給LVM管, SWAP先用LVM畫4G出來
# fdisk /dev/sda#/dev/sda1 1G, /dev/sda2 148G, 都是type 83
# lvmdiskscan
# 建pv
# pvcreate /dev/sda2
# 建vg
# vgcreate VolGroup00 /dev/sda2
# 建lv
# lvcreate -L 4G VolGroup00 -n swap
# lvcreate -l +100%FREE VolGroup00 -n root
# 格式化
# mkfs.ext4 /dev/mapper/VolGroup00-root
# mkfs.ext4 /dev/sda1
# mkswap /dev/mapper/VolGroup00-swap
# 掛起來
# mount /dev/mapper/VolGroup00-root /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
# swapon /dev/mapper/VolGroup00-swap
4. rankmirrors選擇mirror, pacstrap安裝基礎系統, chroot進入後基礎設定
# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
# cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup-orig
# sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist.backup
# rankmirrors -n 6 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist
# pacstrap /mnt base
# genfstab -p /mnt >> /mnt/etc/fstab
# arch-chroot /mnt
# echo atom > /etc/hostname
# vim /etc/vconsole.conf #設定keymap及console字型
KEYMAP=us
FONT=Lat2-Terminus16
# ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime
# hwclock --systohc --utc #注意這裡常搞混
# vi /etc/locale.gen #反註解en_US.UTF-8 UTF-8及zh_TW.UTF-8 UTF-8與zh_TW BIG5
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# vi /etc/mkinitcpio.conf
#確定udev及lvm2的mkinitcpio hooks開啟, udev內定為開, 因此在block與filesystems之間加入lvm2字樣即可
#例如: HOOKS="base udev ... block lvm2 filesystems"
# mkinitcpio -p linux
# passwd
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost atom
#pacman -S grub
#grub-install --target=i386-pc --recheck --debug /dev/sda
#grub-mkconfig -o /boot/grub/grub.cfg
# exit
# umount -R /mnt
# reboot
5. 安裝完成後基本設定
自訂開機後運行服務
安裝常用軟體
自訂Shell
自訂VIM
2008年7月13日 星期日
訂閱:
文章 (Atom)