關(guān)于Debian的一些簡記


設(shè)置console的分辨率

  1. apt-get install hwinfo vim
  2. hwinfo --framebuffer | grep --color 1280確認(rèn)有1280x1024x24bit的分辨率
  3. vim /etc/default/grub,然后把GRUB_CMDLINE_LINUX=""這一行改成GRUB_CMDLINE_LINUX="vga=795",注意795是十進(jìn)制的,hwinfo列出來的是十六進(jìn)制的
  4. update-grub
  5. init 6

設(shè)置console的字體

  1. ls /usr/share/consolefonts看看有哪些支持的console字體
  2. echo "setfont Uni2-TerminusBold20x10" >> ~/.bashrc
  3. . ~/.bashrc

獲取某個(gè)命令如(useradd)所在的包

  1. apt-get install apt-file
  2. apt-file update
  3. apt-file search useradd
  4. 如果已經(jīng)知道了具體的路徑,使用這個(gè)命令更快:dpkg -S /usr/sbin/useradd

獲取源碼包

  1. /etc/apt/source.list中加入deb-src http://ftp.cn.debian.org/debian jessie main,不過一般都不用加
  2. apt-get update
  3. apt-get install dpkg-dev
  4. apt-get source passwd

將光驅(qū)數(shù)據(jù)導(dǎo)成iso

  1. cat /proc/sys/dev/cdrom/info獲得對應(yīng)的設(shè)備名,如/dev/sr0
  2. blockdev --getbsz /dev/sr0獲得塊大小,如2048
  3. dd if=/dev/sr0 of=~/theCD.iso bs=2048導(dǎo)出iso文件,不過網(wǎng)上有人說不用bs參數(shù)也可以,不過這樣導(dǎo)出的iso可能在最后會有空白,所以還是需要知道原iso文件大小再head -c比較好

列出一個(gè)包里安裝的文件

  1. dpkg-query -L john
  2. apt-file list john
  3. dpkg -c some-pkg.deb
  4. 查看http://packages.debian.org/distro-name/all/package-name/filelist,如http://packages.debian.org/jessie/all/bash/filelist

添加32位庫

  1. dpkg --add-architecture i386
  2. apt-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代替。

列舉

  • ifconfig

  • ip addrip link

  • ifconfig eth0

  • ip addr show dev eth0

啟動(dòng)關(guān)閉

  • ifconfig eth0 up

  • ip link set eth0 up

  • ifconfig eth0 down

  • ip link set eth0 down

管理IP

  • ifconfig eth0 192.168.0.77

  • ip addr add 192.168.0.77 dev eth0

  • ifconfig eth0 192.168.0.77 netmask 255.255.255.0 broadcast 192.168.0.255

  • ip addr add 192.168.0.77/24 broadcast 192.168.0.255 dev eth0

  • ip addr del 192.168.0.77/24 dev eth0

設(shè)置網(wǎng)卡別名

  • ifconfig eth0:1 10.0.0.1/8
  • ip addr add 10.0.0.1/8 dev eth0 label eth0:1

管理ARP

  • ip neigh

  • arp -i eth0 -s 192.168.0.1 00:11:22:33:44:55

  • ip neigh add 192.168.0.1 lladdr 00:11:22:33:44:55 nud permanent dev eth0

  • ifconfig -arp eth0

  • ip link set dev eth0 arp off

路由

  • ip route
  • ip route add 10.0.0.0/16 via 192.0.2.253
  • ip route del 10.0.0.0/16 via 192.0.2.253
  • ip route get 1.2.3.4
  • ip route add default via 192.168.1.1ip 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 1sar -n TCP 1sar -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)核模塊:

  1. sudo cp my_mod.ko /lib/modules/$uname-r/extra/.,其中$uname-runame -r的執(zhí)行結(jié)果
  2. sudo depmod -a

接著就可以通過modprobe my_mod來載入my_mod.ko了,也可以通過modinfo my_mod來查詢信息

將內(nèi)核模塊在init運(yùn)行后載入,可以修改/etc/modules加入my_mod這一行即可

在initrd.img里面載入:

  1. sudo vi /etc/initramfs-tools/modules,加入my_mod這一行
  2. sudo update-initramfs -u更新initrd.img
  3. 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下,缺省有blkiocpu,cpuacct、cpuset、devices、freezer、net_cls,net_prio等,如果需要加上memory的cgroups,則需要修改/etc/default/grub,為GRUB_CMDLINE_LINUXGRUB_CMDLINE_LINUX_DEFAULT加上cgroup_enable=memory,然后sudo update-grub2后,重啟即可生效。

可以通過手工來控制,例如:

  • sudo mkdir /sys/fs/cgroup/memory/mygroup
  • sudo -R chown raphael:raphael /sys/fs/cgroup/memory/mygroup
  • echo 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

此外,可以通過libcgroupcgroup-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-controlcgmanager,不過后者已經(jīng)于2016.6被Canonical放棄了。對于用戶控制,還可以使用pam-cgroup

上述使用是基于cgroup v1的,v2的另有用法。

對于磁盤IO來說,可以使用blkio來限制進(jìn)程的IO速度,主要可以通過blkio.throttle.read_bps_deviceblkio.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。

除此之外,也可以通過配置文件來做,步驟如下:

  1. apt-get install cgroup-tools
  2. 編寫/etc/cgconfig.conf如下:
group browsers {
    blkio {
        blkio.throttle.read_bps_device = "8:0 4194304";
    }

    memory {
        memory.soft_limit_in_bytes = "1G";
    }
}
  1. cgconfigparser -l /etc/cgconfig.conf創(chuàng)建相應(yīng)的cgroups組
  2. 編寫/etc/cgrules.conf如下:
raphael:/opt/google/chrome/chrome    memory,blkio    browsers
  1. cgrulesengd啟動(dòng)對進(jìn)程的運(yùn)行監(jiān)控

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • marxico是第一個(gè)接觸到的markdown編輯器,因?yàn)槟軌虮镜貙?dǎo)出PDF,也能夠同步到evernote,所以希...
    hecosysu閱讀 564評論 0 0
  • 轉(zhuǎn)載請注明原作者,如果你覺得這篇文章對你有幫助或啟發(fā),也可以來請我喝咖啡。導(dǎo)語:Markdown 是一種輕量級的「...
    Dirichlet閱讀 607評論 0 0
  • 歡迎使用 Cmd Markdown 編輯閱讀器 我們理解您需要更便捷更高效的工具記錄思想,整理筆記、知識,并將其中...
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,357評論 2 126
  • 標(biāo)題 一級標(biāo)題 二級標(biāo)題 三級標(biāo)題 四級標(biāo)題 五級標(biāo)題 六級標(biāo)題 注:# 和一級標(biāo)題之間建議保留一個(gè)字符的空格,這...
    demo11閱讀 680評論 0 0

友情鏈接更多精彩內(nèi)容