关于Debian的一些简记


设置console的分辨率

  1. apt-get install hwinfo vim
  2. hwinfo --framebuffer | grep --color 1280确认有1280x1024x24bit的分辨率
  3. vim /etc/default/grub,然后把GRUB_CMDLINE_LINUX=""这一行改成GRUB_CMDLINE_LINUX="vga=795",注意795是十进制的,hwinfo列出来的是十六进制的
  4. update-grub
  5. init 6

设置console的字体

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

获取某个命令如(useradd)所在的包

  1. apt-get install apt-file
  2. apt-file update
  3. apt-file search useradd
  4. 如果已经知道了具体的路径,使用这个命令更快: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

将光驱数据导成iso

  1. cat /proc/sys/dev/cdrom/info获得对应的设备名,如/dev/sr0
  2. blockdev --getbsz /dev/sr0获得块大小,如2048
  3. dd if=/dev/sr0 of=~/theCD.iso bs=2048导出iso文件,不过网上有人说不用bs参数也可以,不过这样导出的iso可能在最后会有空白,所以还是需要知道原iso文件大小再head -c比较好

列出一个包里安装的文件

  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,让普通用户运行一个需要root权限才能运行的程序,而且不会用到他/她不需要的root权限。

比如/bin/ping,它需要使用raw-socket,这是需要root权限的。

传统意义下,需要使用#chmod +s /bin/ping/bin/ping设置为setuid程序才行,但是现在我们可以#setcap cap_net_raw+ep /bin/ping即可,其中cap_net_raw对应raw-socket权限,ep是effective/permission权限。

若配合pam_cap与执行程序的+ei权限,可为单独某个用户设置某个程序是否可执行某些特权功能,将非常灵活。


限制root写某文件

由于root用户对所有文件都有rw权限,因此chmod -w somefile操作somefile后root仍然能改写此文件,但是可以通过chattr +i somefile将somefile设置为immutable(不可变),这样root也就无法改写此文件了。


查询已安装的软件包

  • 简单列举 dpkg-query -l
  • 按照包大小排序 dpkg-query -W -f '${Package;-40}\t${Installed-Size}\n' | sort -k 2 -n
  • 再加上状态 dpkg-query -W -f '${Package;-40}\t${Installed-Size}\t${Status}\n' | sort -k 2 -n

使用ip/ss命令代替ifconfig等

ifconfig已经有十多年没有维护了(最近又有人要开始维护了...),而且对infiniband、输出信息的编码、CIDR格式的地址处理都有问题。

总地来说,ifconfig/arp/route/iptunnel需要使用ip命令代替,netstat可以使用ss代替,iwconfig使用iw代替。

列举

  • ifconfig

  • ip addrip link

  • ifconfig eth0

  • ip addr show dev eth0

启动关闭

  • 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

设置网卡别名

  • 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

网络连接

  • netstat -anp
  • sudo ss -lp,若仅查看监听状态的TCP套接字,则sudo ss -ltp,其中-p表示列出进程

网络流量

  • nload
  • sar -n DEV 1sar -n TCP 1sar -n ALL 1

简单的TCP测试

  • 服务器:nc -v -l 23456
  • 客户端:echo "hello, world" | nc -v 127.0.0.1 23456
  • 服务器:socat tcp-listen:33381 EXEC:bash
  • 客户端:socat - tcp-connect:127.0.0.1:33381

从目录创建iso文件

  • $ sudo apt-get install genisoimage
  • $ genisoimage -JRV wuxia -o ~/wuxia.iso ./wuxia/

静态IP设置

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上从源码包构建软件

  • 参见获取源码包小节,但是这次获取shadow
  • 进入shadow目录
  • ./autogen.sh && ./configure --without-selinux && make
  • 若希望仅修改某个源码与相应的构建脚本,如userdel,可以cd src && make clean && make userdel,将对应的构建脚本抽取出来,修改后再运行

在CentOS 6上从srpm构建软件

  • 创建/etc/yum.repos.d/CentOS-Source.repo,添加相应的内容(可参考同目录下的其它文件的内容),示例如下:
[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身份执行yum clean all && yum makecache
  • rpm -qf /usr/sbin/userdel查找userdel命令的包名为shadow-utils
  • yum list | grep --color shadow-utils确认版本
  • yumdownloader --source shadow-utils下载源码包
  • rpm -i shadow-utils-XXX.src.rpm解开源码包
  • cd ~/rpmbuild/SOURCES查看对应的源码tar.bz2包
  • bunzip2 shadow-XXX.tar.bz2解开包
  • tar -xf shadow-XXX.tar继续解包
  • cd shadow-XXX && ./configure && make获得所有二进制程序

实际上,也可以不用设置源码仓库地址与使用yumdownloader,直接wget http://vault.centos.org/6.6/os/Source/SPackages/shadow-utils-4.1.4.2-19.el6.src.rpm就可以了。

如果需要加上额外的功能,例如加上对审计的支持,可以:

  • 以root身份执行yum install audit-libs-devel
  • ./configure --with-audit

其它的步骤类似。


内核模块

使用modprobe载入内核模块:

  1. sudo cp my_mod.ko /lib/modules/$uname-r/extra/.,其中$uname-runame -r的执行结果
  2. sudo depmod -a

接着就可以通过modprobe my_mod来载入my_mod.ko了,也可以通过modinfo my_mod来查询信息

将内核模块在init运行后载入,可以修改/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可以看到模块已经加入了initrd.img文件中

获取内核模块依赖的内核函数:

readelf -s abc.ko | awk '(NF == 8){ if ($7 == "UND") print $8 }'


cgroups (control groups,控制组)

现在的cgroups文件系统都是挂载到/sys/fs/cgroup目录下的。

在Debian下,缺省有blkiocpu,cpuacctcpusetdevicesfreezernet_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
  • 运行一个会使用128M内存的程序myprog(通过getchar()调用等待后再分配使用),将其pid加入mygroup控制组,即echo $mypid > /sys/fs/cgroup/memory/mygroup/tasks
  • 程序会异常退出

也可以通过cgroup-tools包提供的工具来使用,在启动程序的时候更方便些,下面是等效命令:

  • 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自动安装)的/etc/cgconfig.conf定义控制组,通过/etc/cgrules.conf定义进程与用户所应属的控制组。

值得注意的是:

  • malloc之后如果没有使用,那产生的内存用量是很少的,例如先malloc1G内存,再每隔1M设置一个字节的值,产生的内存用量很少,必须要设置每个页(page)才能产生实际的内存使用,不然测试结果会让人迷惑
  • memory.soft_limit_in_bytes是在内存紧张的时候才让进程的内存尽量缩减到的值,在内存宽松时是没有效果的,可以实现弹性内存管理

开发可以基于libcgroup开发,当然其实也都挺简单的。可以使用的工具还有systemd.resource-controlcgmanager,不过后者已经于2016.6被Canonical放弃了。对于用户控制,还可以使用pam-cgroup

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

对于磁盘IO来说,可以使用blkio来限制进程的IO速度,主要可以通过blkio.throttle.read_bps_deviceblkio.throttle.write_bps_device来限制。

假设/dev/sda的主设备号与从设备号分别是8和0(可以通过ls -l /dev/sda看到),则可以通过echo "8:0 1048576" > /sys/fs/cgroup/blkio/myblkio/blkio.throttle.read_bps_device将进程从/dev/sda(含其下的各分区,如/dev/sda1等)设备读取数据的速率限制到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创建相应的cgroups组
  2. 编写/etc/cgrules.conf如下:
raphael:/opt/google/chrome/chrome    memory,blkio    browsers
  1. cgrulesengd启动对进程的运行监控

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • marxico是第一个接触到的markdown编辑器,因为能够本地导出PDF,也能够同步到evernote,所以希...
    hecosysu阅读 507评论 0 0
  • 转载请注明原作者,如果你觉得这篇文章对你有帮助或启发,也可以来请我喝咖啡。导语:Markdown 是一种轻量级的「...
    Dirichlet阅读 518评论 0 0
  • 欢迎使用 Cmd Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想,整理笔记、知识,并将其中...
    故事往往是思想的展现阅读 335评论 0 0
  • 文章来自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鹏阅读 9,189评论 2 126
  • 标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 注:# 和一级标题之间建议保留一个字符的空格,这...
    demo11阅读 608评论 0 0