設(shè)置console的分辨率
apt-get install hwinfo vim-
hwinfo --framebuffer | grep --color 1280確認(rèn)有1280x1024x24bit的分辨率 -
vim /etc/default/grub,然后把GRUB_CMDLINE_LINUX=""這一行改成GRUB_CMDLINE_LINUX="vga=795",注意795是十進(jìn)制的,hwinfo列出來的是十六進(jìn)制的 update-grubinit 6
設(shè)置console的字體
-
ls /usr/share/consolefonts看看有哪些支持的console字體 echo "setfont Uni2-TerminusBold20x10" >> ~/.bashrc- . ~/.bashrc
獲取某個(gè)命令如(useradd)所在的包
apt-get install apt-fileapt-file updateapt-file search useradd- 如果已經(jīng)知道了具體的路徑,使用這個(gè)命令更快:
dpkg -S /usr/sbin/useradd
獲取源碼包
- 在
/etc/apt/source.list中加入deb-src http://ftp.cn.debian.org/debian jessie main,不過一般都不用加 apt-get updateapt-get install dpkg-devapt-get source passwd
將光驅(qū)數(shù)據(jù)導(dǎo)成iso
-
cat /proc/sys/dev/cdrom/info獲得對應(yīng)的設(shè)備名,如/dev/sr0 -
blockdev --getbsz /dev/sr0獲得塊大小,如2048 -
dd if=/dev/sr0 of=~/theCD.iso bs=2048導(dǎo)出iso文件,不過網(wǎng)上有人說不用bs參數(shù)也可以,不過這樣導(dǎo)出的iso可能在最后會有空白,所以還是需要知道原iso文件大小再head -c比較好
列出一個(gè)包里安裝的文件
dpkg-query -L johnapt-file list johndpkg -c some-pkg.deb- 查看http://packages.debian.org/distro-name/all/package-name/filelist,如http://packages.debian.org/jessie/all/bash/filelist
添加32位庫
dpkg --add-architecture i386apt-get update
capabilities
通過capabilities可以不用setuid,讓普通用戶運(yùn)行一個(gè)需要root權(quán)限才能運(yùn)行的程序,而且不會用到他/她不需要的root權(quán)限。
比如/bin/ping,它需要使用raw-socket,這是需要root權(quán)限的。
傳統(tǒng)意義下,需要使用#chmod +s /bin/ping將/bin/ping設(shè)置為setuid程序才行,但是現(xiàn)在我們可以#setcap cap_net_raw+ep /bin/ping即可,其中cap_net_raw對應(yīng)raw-socket權(quán)限,ep是effective/permission權(quán)限。
若配合pam_cap與執(zhí)行程序的+ei權(quán)限,可為單獨(dú)某個(gè)用戶設(shè)置某個(gè)程序是否可執(zhí)行某些特權(quán)功能,將非常靈活。
限制root寫某文件
由于root用戶對所有文件都有rw權(quán)限,因此chmod -w somefile操作somefile后root仍然能改寫此文件,但是可以通過chattr +i somefile將somefile設(shè)置為immutable(不可變),這樣root也就無法改寫此文件了。
查詢已安裝的軟件包
- 簡單列舉
dpkg-query -l - 按照包大小排序
dpkg-query -W -f '${Package;-40}\t${Installed-Size}\n' | sort -k 2 -n - 再加上狀態(tài)
dpkg-query -W -f '${Package;-40}\t${Installed-Size}\t${Status}\n' | sort -k 2 -n
使用ip/ss命令代替ifconfig等
ifconfig已經(jīng)有十多年沒有維護(hù)了(最近又有人要開始維護(hù)了...),而且對infiniband、輸出信息的編碼、CIDR格式的地址處理都有問題。
總地來說,ifconfig/arp/route/iptunnel需要使用ip命令代替,netstat可以使用ss代替,iwconfig使用iw代替。
列舉
ifconfigip addr與ip linkifconfig eth0ip addr show dev eth0
啟動(dòng)關(guān)閉
ifconfig eth0 upip link set eth0 upifconfig eth0 downip link set eth0 down
管理IP
ifconfig eth0 192.168.0.77ip addr add 192.168.0.77 dev eth0ifconfig eth0 192.168.0.77 netmask 255.255.255.0 broadcast 192.168.0.255ip addr add 192.168.0.77/24 broadcast 192.168.0.255 dev eth0ip addr del 192.168.0.77/24 dev eth0
設(shè)置網(wǎng)卡別名
ifconfig eth0:1 10.0.0.1/8ip addr add 10.0.0.1/8 dev eth0 label eth0:1
管理ARP
ip neigharp -i eth0 -s 192.168.0.1 00:11:22:33:44:55ip neigh add 192.168.0.1 lladdr 00:11:22:33:44:55 nud permanent dev eth0ifconfig -arp eth0ip link set dev eth0 arp off
路由
ip routeip route add 10.0.0.0/16 via 192.0.2.253ip route del 10.0.0.0/16 via 192.0.2.253ip route get 1.2.3.4-
ip route add default via 192.168.1.1或ip route add default via 192.168.1.1 dev eth0
網(wǎng)絡(luò)連接
netstat -anp-
sudo ss -lp,若僅查看監(jiān)聽狀態(tài)的TCP套接字,則sudo ss -ltp,其中-p表示列出進(jìn)程
網(wǎng)絡(luò)流量
nload-
sar -n DEV 1或sar -n TCP 1或sar -n ALL 1
簡單的TCP測試
- 服務(wù)器:
nc -v -l 23456 - 客戶端:
echo "hello, world" | nc -v 127.0.0.1 23456 - 服務(wù)器:
socat tcp-listen:33381 EXEC:bash - 客戶端:
socat - tcp-connect:127.0.0.1:33381
從目錄創(chuàng)建iso文件
$ sudo apt-get install genisoimage$ genisoimage -JRV wuxia -o ~/wuxia.iso ./wuxia/
靜態(tài)IP設(shè)置
sudo vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.23.23
netmask 255.255.255.0
gateway 192.168.23.1
在Debian 8上從源碼包構(gòu)建軟件
- 參見
獲取源碼包小節(jié),但是這次獲取shadow包 - 進(jìn)入shadow目錄
./autogen.sh && ./configure --without-selinux && make- 若希望僅修改某個(gè)源碼與相應(yīng)的構(gòu)建腳本,如
userdel,可以cd src && make clean && make userdel,將對應(yīng)的構(gòu)建腳本抽取出來,修改后再運(yùn)行
在CentOS 6上從srpm構(gòu)建軟件
- 創(chuàng)建
/etc/yum.repos.d/CentOS-Source.repo,添加相應(yīng)的內(nèi)容(可參考同目錄下的其它文件的內(nèi)容),示例如下:
[base-source]
name=CentOS-$releasever - Base Source
baseurl=http://vault.centos.org/6.6/os/Source/
enabled=1
[updates-source]
name=CentOS-$releasever - Updates Source
baseurl=http://vault.centos.org/6.6/updates/Source/
enabled=1
[extras-source]
name=CentOS-$releasever - Extras Source
baseurl=http://vault.centos.org/6.6/extras/Source/
enabled=1
[centosplus-source]
name=CentOS-$releasever - Plus Source
baseurl=http://vault.centos.org/6.6/centosplus/Source/
enabled=1
- 以root身份執(zhí)行
yum clean all && yum makecache -
rpm -qf /usr/sbin/userdel查找userdel命令的包名為shadow-utils -
yum list | grep --color shadow-utils確認(rèn)版本 -
yumdownloader --source shadow-utils下載源碼包 -
rpm -i shadow-utils-XXX.src.rpm解開源碼包 -
cd ~/rpmbuild/SOURCES查看對應(yīng)的源碼tar.bz2包 -
bunzip2 shadow-XXX.tar.bz2解開包 -
tar -xf shadow-XXX.tar繼續(xù)解包 -
cd shadow-XXX && ./configure && make獲得所有二進(jìn)制程序
實(shí)際上,也可以不用設(shè)置源碼倉庫地址與使用yumdownloader,直接wget http://vault.centos.org/6.6/os/Source/SPackages/shadow-utils-4.1.4.2-19.el6.src.rpm就可以了。
如果需要加上額外的功能,例如加上對審計(jì)的支持,可以:
- 以root身份執(zhí)行
yum install audit-libs-devel ./configure --with-audit
其它的步驟類似。
內(nèi)核模塊
使用modprobe載入內(nèi)核模塊:
-
sudo cp my_mod.ko /lib/modules/$uname-r/extra/.,其中$uname-r是uname -r的執(zhí)行結(jié)果 sudo depmod -a
接著就可以通過modprobe my_mod來載入my_mod.ko了,也可以通過modinfo my_mod來查詢信息
將內(nèi)核模塊在init運(yùn)行后載入,可以修改/etc/modules加入my_mod這一行即可
在initrd.img里面載入:
-
sudo vi /etc/initramfs-tools/modules,加入my_mod這一行 -
sudo update-initramfs -u更新initrd.img -
sudo lsinitramfs -l /initrd.img | grep my_mod可以看到模塊已經(jīng)加入了initrd.img文件中
獲取內(nèi)核模塊依賴的內(nèi)核函數(shù):
readelf -s abc.ko | awk '(NF == 8){ if ($7 == "UND") print $8 }'
cgroups (control groups,控制組)
現(xiàn)在的cgroups文件系統(tǒng)都是掛載到/sys/fs/cgroup目錄下的。
在Debian下,缺省有blkio、cpu,cpuacct、cpuset、devices、freezer、net_cls,net_prio等,如果需要加上memory的cgroups,則需要修改/etc/default/grub,為GRUB_CMDLINE_LINUX與GRUB_CMDLINE_LINUX_DEFAULT加上cgroup_enable=memory,然后sudo update-grub2后,重啟即可生效。
可以通過手工來控制,例如:
sudo mkdir /sys/fs/cgroup/memory/mygroupsudo -R chown raphael:raphael /sys/fs/cgroup/memory/mygroupecho 64m > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes- 運(yùn)行一個(gè)會使用128M內(nèi)存的程序
myprog(通過getchar()調(diào)用等待后再分配使用),將其pid加入mygroup控制組,即echo $mypid > /sys/fs/cgroup/memory/mygroup/tasks - 程序會異常退出
也可以通過cgroup-tools包提供的工具來使用,在啟動(dòng)程序的時(shí)候更方便些,下面是等效命令:
sudo cgcreate -a raphael:raphael -t raphael:raphael -g memory:mygroup-
cgset -r memory.limit_in_bytes=64m memory:mygroup# 貌似測試無效 cgexec -g memory:mygroup myprog
此外,可以通過libcgroup(cgroup-tools自動(dòng)安裝)的/etc/cgconfig.conf定義控制組,通過/etc/cgrules.conf定義進(jìn)程與用戶所應(yīng)屬的控制組。
值得注意的是:
-
malloc之后如果沒有使用,那產(chǎn)生的內(nèi)存用量是很少的,例如先malloc1G內(nèi)存,再每隔1M設(shè)置一個(gè)字節(jié)的值,產(chǎn)生的內(nèi)存用量很少,必須要設(shè)置每個(gè)頁(page)才能產(chǎn)生實(shí)際的內(nèi)存使用,不然測試結(jié)果會讓人迷惑 -
memory.soft_limit_in_bytes是在內(nèi)存緊張的時(shí)候才讓進(jìn)程的內(nèi)存盡量縮減到的值,在內(nèi)存寬松時(shí)是沒有效果的,可以實(shí)現(xiàn)彈性內(nèi)存管理
開發(fā)可以基于libcgroup開發(fā),當(dāng)然其實(shí)也都挺簡單的??梢允褂玫墓ぞ哌€有systemd.resource-control與cgmanager,不過后者已經(jīng)于2016.6被Canonical放棄了。對于用戶控制,還可以使用pam-cgroup。
上述使用是基于cgroup v1的,v2的另有用法。
對于磁盤IO來說,可以使用blkio來限制進(jìn)程的IO速度,主要可以通過blkio.throttle.read_bps_device與blkio.throttle.write_bps_device來限制。
假設(shè)/dev/sda的主設(shè)備號與從設(shè)備號分別是8和0(可以通過ls -l /dev/sda看到),則可以通過echo "8:0 1048576" > /sys/fs/cgroup/blkio/myblkio/blkio.throttle.read_bps_device將進(jìn)程從/dev/sda(含其下的各分區(qū),如/dev/sda1等)設(shè)備讀取數(shù)據(jù)的速率限制到1M bps。
除此之外,也可以通過配置文件來做,步驟如下:
apt-get install cgroup-tools- 編寫
/etc/cgconfig.conf如下:
group browsers {
blkio {
blkio.throttle.read_bps_device = "8:0 4194304";
}
memory {
memory.soft_limit_in_bytes = "1G";
}
}
-
cgconfigparser -l /etc/cgconfig.conf創(chuàng)建相應(yīng)的cgroups組 - 編寫
/etc/cgrules.conf如下:
raphael:/opt/google/chrome/chrome memory,blkio browsers
-
cgrulesengd啟動(dòng)對進(jìn)程的運(yùn)行監(jiān)控