美文网首页
关于Debian的一些简记

关于Debian的一些简记

作者: raphaelzhang | 来源:发表于2017-12-12 21:56 被阅读0次

    设置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启动对进程的运行监控

    参考资料

    相关文章

      网友评论

          本文标题:关于Debian的一些简记

          本文链接:https://www.haomeiwen.com/subject/dqlvzttx.html