GNU/Linux Tips
1 XPS 9560
1.1 Dual Video Card
- https://www.reddit.com/r/Dell/comments/5y3rii/xps_9560_battery_life_optimization_and_fan/
- https://wiki.archlinux.org/index.php/NVIDIA_Optimus
- https://wiki.archlinux.org/index.php/Bumblebee#Installing_Bumblebee_with_Intel.2FNVIDIA
- http://www.akitaonrails.com/2017/03/14/enabling-optimus-nvidia-gpu-on-the-dell-xps-15-with-linux-even-on-battery
1.2 touchpad issue
1.3 Buffer I/O error
1.4 BIOS
开机按“F2”,进入到Bios界面,修改bios :
- System Configuration - SATA Operation 改成 AHCI
1.5 optimus
1.6 Thunderbolt to DP
- USB-C to DisplayPort adapter/cable: Allows you to use a single DisplayPort 1.2 output, which can drive a single 4K 60 Hz display, dual 2560x1600 60 Hz displays, or up to 3x 1080p displays. The system only supports 3 independent active displays total, fyi.
- USB-C to HDMI 2.0 adapter/cable: Allows you to run a single display up to 4K at 60 Hz, assuming the display itself supports that via its HDMI input, and not all 4K 60 Hz displays do.
- USB-C docking station (such as the WD15): This would only allow up to dual 1080p displays or a single 2560x1600 displays at 60 Hz, or a single 4K display only at 30 Hz, since now the USB-C port has to carry both display and USB data, which reduces available display bandwidth. But obviously you get more connectivity with a dock than a simple cable/adapter, and you'd also be able to charge the system with this single cable. If you get the WD15, you'll need the one with the 180W adapter.
- Thunderbolt 3 to Dual DisplayPort adapter: Allows you to use two DisplayPort 1.2 outputs, which means up to dual 4K 60 Hz displays or 3x 2560x1600 60 Hz displays (if you use DisplayPort daisy chaining). If needed, you can connect active DisplayPort to HDMI/DVI/VGA adapters to this adapter, but not the less expensive and more common passive adapters.
- TB3 docking station (such as the TB16): Same display capabilities as above since you're now using Thunderbolt rather than USB-C and there's no "penalty" for carrying the other data at the same time like there is with USB-C. If you get the TB16, you'd be able to use passive DisplayPort adapters if needed, and if you wanted to charge your system, you'd need the TB16 version with the 240W adapter.
2 GPD Pocket2
$ dd if=my_usb_image.iso of=/dev/sdX bs=4M
3 Mirror
4 Console width
stty rows 50 cols 132
5 Locales
安装中文支持包:
$ sudo apt install language-pack-zh-hans*
6 grub
修复 windows 双启动:
sudo grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi sudo grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi sudo grub-mkconfig -o /tmp/grub.cfg
其会自动检测所有硬盘上的系统,自动生成配置文件
把新生成的 /tmp/grub.cfg 覆盖 /boot/grub/grub.cfg 即可
参考:https://www.jianshu.com/p/5007e555ec12
7 gnome-terminal
打开 *.desktop,找到 Exec=gnome-terminal
Exec = gnome-terminal --hide-menubar --full-screen Exec = gnome-terminal --hide-menubar --maximize
8 Bash
8.1 Bell
echo -en "\007"
8.2 Random Num
RANDOM := $(shell od -An -N2 -i /dev/random | tr -d ' ') ############################################## RANDOM := $(shell /bin/bash -c 'echo $$RANDOM') test: echo $(RANDOM) ############################################## awk 'BEGIN{srand();printf("%d", 65536*rand())}'
8.3 Notes
$ set -- one two $ echo $1 one $ echo ${1} 1 $ eval echo ${1} one $ n=2 $ echo ${n} 2 $ echo ${!n} two $ eval echo \${$n} two
String:
text=${text/ /-} # 只替换一个空格 text=${text// /-} # 全部替换空格 $ cat test.txt |tr -s [:space:] echo ${var^} # 把变量中的第一个字符换成大写 echo ${var^^} # 把变量中的所有小写字母,全部替换为大写 echo ${var,} # 把变量中的第一个字符换成小写 echo ${var,,} # 把变量中的所有大写字母,全部替换为小写
8.4 Bash readline
#!/bin/bash count=1 cat X1A001.dat | while read line # 从文本文件 X1A001.dat 一行一行的读 do echo "$count:$line" count=$(($count + 1)) done exit 0
8.5 命令行历史
- 1. 忽略当前这条命令
$ export HISTCONTROL=ignorespace $ [space]echo "this is a top secret"
- 2. 禁用当前会话的所有历史记录
$ export HISTSIZE=0
- 3. 工作结束后清除整个历史
$ history -cw
- 4. 只针对你的工作关闭历史记录
$ [space]set +o history
要重新开启:
$ [space]set -o history
- 5. 从历史记录中删除指定的命令
$ history $ history -d 3
9 User Add
$ userdel comcat $ useradd comcat -m -s /bin/bash -p
10 ngrok
11 Static IP
$ sudo nano /etc/netplan/01-netcfg.yaml # This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no dhcp6: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8,8.8.4.4] $ sudo netplan apply $ sudo netplan --debug apply
debian:
$ vi /etc/netwrok/interfaces iface eth0 inet static address 10.1.1.125 netmask 255.0.0.0 gateway 10.1.1.1
12 Network Monitor
12.1 iftop
$ sudo apt-get install iftop $ sudo iftop -P -i eth1
12.2 ifstat
$ sudo apt-get install ifstat $ sudo ifstat -t -i wlan0 2 Time wlan0 HH:MM:SS KB/s in KB/s out 11:04:42 0.00 0.00 11:04:44 0.02 0.03 11:04:46 0.12 1.29 11:04:48 32.94 9.75 11:04:50 63.31 12.23
refter to: http://www.binarytides.com/linux-commands-monitor-network/
13 HTTP 抓包
HTTP 协议分析:
$ tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" -i eth1 | sed -rn '/Hypertext Transfer Protocol/{:a;N;/ \\r\\n:?/{/.*/p;d};ba}'
只显示 GET 类请求的头:
$ tshark 'tcp port 80' -R 'http.request.method == "GET" || http.request.method == "HEAD"' -i eth1
14 Port Scan
# TCP Connect scanning # nmap -v -sT localhost # nmap -v -sT 192.168.31.0/24 # nmap TCP SYN (half-open) scanning # nmap -v -sS localhost # nmap TCP FIN scanning # nmap -v -sF localhost # nmap TCP Xmas tree scanning # nmap -v -sX localhost # nmap TCP Null scanning # nmap -v -sN localhost nmap TCP RPC scanning # nmap -v -sR localhost nmap UDP scanning # nmap -v -O localhost nmap remote software version scanning # nmap -v -sV localhost
15 netcat
15.1 简单web服务器
web 查看系统状态 (TOP):
#!/bin/bash top -b -n 1 > /tmp/top.txt app = "nc -l 996" count=1; while [ count>0 ] do pn = `ps -wef|grep "${app}" |grep -v grep |grep " 1 "|wc -l` echo $pn if test $pn -lt 1 then top -b -n 1 >/tmp/top.txt nc -l 996 </tmp/top.txt fi done
15.2 传送文件
server: nc -v -l -p 1234 > 1.txt client: nc -v -n 192.168.0.1 1234 < 1.txt
server: $ cat backup.iso | nc -l 3333 client: $ nc 192.168.0.1 3333 > backup.iso
Show the progress of the data transfer:
server: $ cat backup.iso | pv -b | nc -l 3333 client: $ nc 192.168.0.1 3333 | pv -b o> backup.iso
15.3 Other
S: $ dd if=/dev/hdb5 | gzip -9 | nc -l 3333 C: $ nc 192.168.0.1 3333 | pv -b > myhdb5partition.img.gz S: $ tar -czf - /etc/ | nc -l 3333 C: $ nc 192.168.0.1 3333 | pv -b > mybackup.tar.gz
16 WiFi Config
16.1 wireless tools
$ sudo ip link set wlan0 up $ sudo iw dev wlan0 scan | less $ sudo iw dev wlan0 connect [网络 SSID] $ sudo iw dev wlan0 connect [网络 SSID] key 0:[WEP 密钥] # For WEP
$ cat /etc/wpa_supplicant/my.conf network={ ssid="[网络 ssid]" psk="[密码]" priority=1 } $ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/my.conf & $ sudo dhclient wlan0
16.2 nmcli
# list your connections $ sudo nmcli c $ sudo nmcli c up uuid <paste essid uuid here>
16.3 Reference
- http://askubuntu.com/questions/138472/how-do-i-connect-to-a-wpa-wifi-network-using-the-command-line
- https://wiki.debian.org/WiFi/HowToUse
- http://unix.stackexchange.com/questions/92799/connecting-to-wifi-network-through-command-line
17 Sed
1. 关于 -n 的说明 The default operation of sed is to output every input line. The -n option suppresses the automatic output. When specifying this option, each instruction intended to produce output must contain a print command, p. Look at the following example.
2. debian 下读取指定软件包的所有信息(实质上是读取相邻两个空行之间的所有数据)
sed -n '/^Package: libc6-udeb/{:next;N;//n$/!b next;p}' Packages
PS: 每 N 一行,缓冲区会加入 /n<newline> ,当读入一空行时,缓冲区的最后一个字符就是 /n
3. 读取所有软件包的名字
sed -n 's/^Package: \(.*\)/\1/p' Packages
PS: \1 表示保留 pattern 中第一个子模式,即匹配括号中模式的予以保留
4. 提取含有特定信息的数据块(比如获取所有 gnome 用到的包)
sed '/^Package:/{:next;N;//n$/!b next;/Section: gnome/b;d}' Packages
5. sed 中使用 bash 中定义的变量
sed -n "/^Package: $file/{:next;N;//n$/! b next;p}" Packages
PS: 注意 sed 的命令部分是用“”括起来的,这样可以引用 bash中定义的变量 file;另外!和 b之间 要留有空格否则bash 会报错,因为在bash中!有特殊用途。
18 Grep
1. 提取文件中所有符合模式的字符串:
egrep -or "MJD[0-9]{12}" /tmp/alldevid
19 Kernel代码格式化
kernel source tree 的 scripts/ 下有一个 Lindent 的脚本:
#!/bin/sh PARAM="-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1" RES=`indent --version` V1=`echo $RES | cut -d' ' -f3 | cut -d'.' -f1` V2=`echo $RES | cut -d' ' -f3 | cut -d'.' -f2` V3=`echo $RES | cut -d' ' -f3 | cut -d'.' -f3` if [ $V1 -gt 2 ]; then PARAM="$PARAM -il0" elif [ $V1 -eq 2 ]; then if [ $V2 -gt 2 ]; then PARAM="$PARAM -il0"; elif [ $V2 -eq 2 ]; then if [ $V3 -ge 10 ]; then PARAM="$PARAM -il0" fi fi fi indent $PARAM "$@"
20 udev
$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 003 Device 002: ID 413c:2003 Dell Computer Corp. Keyboard Bus 002 Device 003: ID 413c:3016 Dell Computer Corp. Optical 5-Button Wheel Mouse Bus 002 Device 016: ID 18d1:4e22 Google Inc. Nexus S (debug)
Bus 002 Device 016 就是我的手机,对应的设备节点是 /dev/bus/usb/002/016
如下命令查看设备信息:
$ udevadm info -q all -n /dev/bus/usb/002/016 P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 N: bus/usb/002/016 E: BUSNUM=002 E: DEVNAME=/dev/bus/usb/002/016 E: DEVNUM=016 E: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 E: DEVTYPE=usb_device E: DRIVER=usb E: ID_BUS=usb E: ID_MEDIA_PLAYER=google_nexus-s E: ID_MODEL=SGH-T959 E: ID_MODEL_ENC=SGH-T959 E: ID_MODEL_ID=4e22 E: ID_REVISION=0231 E: ID_SERIAL=samsung_SGH-T959_32334071DA1D00EC E: ID_SERIAL_SHORT=32334071DA1D00EC E: ID_USB_INTERFACES=:080650:ff4201: E: ID_VENDOR=samsung E: ID_VENDOR_ENC=samsung E: ID_VENDOR_ID=18d1 E: MAJOR=189 E: MINOR=143 E: PRODUCT=18d1/4e22/231 E: SUBSYSTEM=usb E: TAGS=:udev-acl: E: TYPE=0/0/0 E: UDEV_LOG=3 E: USEC_INITIALIZED=599355697049
或者:
$ udevadm info -q path -n /dev/bus/usb/002/016 /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 $ udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/002/016) looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6': KERNEL=="2-1.6" SUBSYSTEM=="usb" DRIVER=="usb" ATTR{configuration}=="" ATTR{bNumInterfaces}==" 2" ATTR{bConfigurationValue}=="1" ...... ......
根据 http://www.reactivated.net/writing_udev_rules.html#basic 写一个 udev rules 文件 /etc/udev/rules.d/62-android.rules:
# 匹配上设备则将设备节点文件的 mode 改为 0666,建一个 /dev/GalasyS 的符号链接指向它 SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="18d1", ENV{ID_MODEL}=="Galaxy", MODE="0666", SYMLINK+="GalaxyS" SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="18d1", ENV{ID_MODEL_ID}=="4e22", MODE="0666", SYMLINK+="GalaxyS" SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", ATTR{product}=="Galaxy" MODE="0666", SYMLINK+="GalaxyS"
如对某一行 rule 没底,可用如下命令测试这个 rule:
$ udevadm test --action='"usb", ENV{ID_VENDOR_ID}=="18d1", ENV{ID_MODEL}=="Galaxy", MODE="0666", SYMLINK+= "GalaxyS"' $(udevadm info -q path -n /dev/bus/usb/002/016) ...... udev_node_add: creating device node '/dev/bus/usb/002/016', devnum=189:143, mode=0664, uid=0, gid=0 udev_node_mknod: preserve file '/dev/bus/usb/002/016', because it has correct dev_t udev_node_mknod: preserve permissions /dev/bus/usb/002/016, 020664, uid=0, gid=0 node_symlink: preserve already existing symlink '/dev/char/189:143' to '../bus/usb/002/016' ......
确定后重启 udev 即可:
sudo service udev restart
21 VirtualBox
21.1 Mount VDI image
$ od -j344 -N4 -td4 /work/FreeDos.vdi | awk 'NR==1{print $2;}' 8192 $ sudo losetup -f --show -o 8192 /work/FreeDos.vdi /dev/loop0 $ sudo fdisk -lu /dev/loop0 Disk /dev/loop0: 113 MB, 113246208 bytes 16 heads, 63 sectors/track, 219 cylinders, total 221184 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/loop0p1 * 63 1023119 511528+ 6 FAT16 $ sudo mount -o loop,offset=$((512*63)) /dev/loop0 /mnt $ ls /mnt/ AUTOEXEC.BAT BOOTSECT.BIN COMMAND.COM FDCONFIG.SYS FDOS KERNEL.SYS $ sudo umount /mnt $ sudo losetup -d /dev/loop0 $ VBoxManage clonehd /work/FreeDos.vdi /work/freedos.vdi --format VDI --variant Fixe
22 Mount a disk image
$ sudo losetup -fv ./rasper-pi.img Loop device is /dev/loop0 $ sudo kpartx -av /dev/loop0 add map loop0p1 (252:0): 0 114688 linear /dev/loop0 8192 add map loop0p2 (252:1): 0 7917568 linear /dev/loop0 122880 $ sudo mount /dev/mapper/loop0p2 /mnt $ ls /mnt/ bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var
23 xxd
Revert byte order:
$ printf "0x%016X" 11903500002 | xxd -r -p >t.bin $ xxd -g 1 t.bin 00000000: 00 00 00 02 c5 80 fe e2 $ printf "%016X" 11903500002 | fold -w2 | tac | tr -d "\n" | xxd -r -s 8 -p - x.bin $ xxd -g1 x.bin | head 00000000: aa ff ff ff ff ff ff ff e2 fe 80 c5 02 00 00 00 ................ 00000010: f8 2a ff ff ff ff ff ff ff ff ff ff ff ff ff ff .*.............. 00000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ $ echo 4BF8E | rev E8FB4 $ echo 030201 | grep -o .. | tac | paste -sd '' - 010203 function revert_hex() { echo ${1} | fold -w2 | tac | tr -d "\n"; } $ revert_hex 030201
https://zhuanlan.zhihu.com/p/82199492
24 GDB Tips
25 OpenOCD
26 Strace Tips
1. strace 是一个诊断调试工具,其借助内核 ptrace 机制,跟踪目标进程所执行的系统调用和收到的信号。
2. 常用选项
-o filename: 将输出信息写到文件filename中,默出输出到标准错误(stderr) -c: 统计输出,包括每个系统调用的执行时间、被调用次数等 -tt: 每行前加上相对时间戳 -e trace=open,close: 只跟踪open, close -e trace=file: 只跟踪以文件名为参数的的调用,等价于 -e trace=open,stat,chmod,unlink... -e trace=process: 进程管理相关 -e trace=network: 网络相关 -e trace=ipc: 进程间通信相关 -e trace=signal: 信号相关 -e verbose=close,open: vebose模式输出(结构体成员都输出) -e abbrev=open: 默认情况下所有调用的显示都是abbreviate,只要给这个选项,就只有open为abbrev -e raw=open: open 调用以16进制形式输出参数 -e read=3,5: 显示文件描述符3、5的读取数据 -e write=3,5 -p pid: 绑定到pid对应的正在运行的进程。此参数常用来调试后台进程 -f: 除了跟踪当前进程外,还跟踪其子进程 -ff: 当跟踪多个进程且输出到文件时,使用该选项则将各个进程的跟踪信息写入各个filename.pid中
27 Git
git diff的时候忽略换行符的差异:
git config --global core.whitespace cr-at-eol
http proxy:
git config --global http.proxy 'socks5://127.0.0.1:8080'
git server:
$ apt-get install git-daemon-sysvinit $ cat /etc/default/git-daemon GIT_DAEMON_ENABLE=true GIT_DAEMON_USER=gitdaemon GIT_DAEMON_DIRECTORY=/var/data/git GIT_DAEMON_BASE_PATH=/var/data/git GIT_DAEMON_OPTIONS="--export-all --enable=upload-pack --enable=upload-archive --enable=receive-pack --informative-errors"
修改.git/config添加如下代码:
[receive] denyCurrentBranch = ignore
在初始化远程仓库时最好使用 git --bare init 而不要使用 git init
如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时, 如果远程仓库正在push的分支上(不在push分支,没有问题), 那么push后的结果不会反应在work tree上, 也即在远程仓库的目录下对应的文件还是之前的内容,必须得使用git reset --hard才能看到push后的内容
27.1 Tag
列显已有的标签:
$ git tag v0.1 v1.3 $ git tag -l 'v1.4.2.*' v1.4.2.1 v1.4.2.2 v1.4.2.3
创建 Tag:
$ git tag -a v1.4 -m 'my version 1.4' $ git tag v1.4-lw $ git tag -s v1.5 -m 'my signed 1.5 tag'
后期加注标签:
$ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment' a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing $ git tag -a v1.2 0d52aaab
本地 Tag 推送到远程:
$ git push --tags
获取远程 Tag:
$ git fetch origin tag <tagname>
删除远程 Tag:
$ git push origin --delete tag <tagname>
27.2 submodule
- 关联:
$ git submodule add git://github.com/icamgo/xtensa-toolchain.git tools/xtensa-toolchain $ git status new file: .gitmodules new file: tools/xtensa-toolchain $ cat .gitmodules [submodule "tools/xtensa-toolchain"] path = tools/xtensa-toolchain url = git://github.com/icamgo/xtensa-toolchain.git $ git commit -a -m "add the xtensa-toolchain as submodule" $ git push
- 使用
$ git submodule init $ git submodule update
27.3 Remove
First, remove the commit on your local repository:
$ git reset --soft HEAD^
Then, force push to GitHub by using:
$ git push origin +master
27.4 Remove from upstream
using https://rtyley.github.io/bfg-repo-cleaner/
$ bfg --strip-blobs-bigger-than 50M # Git history will be cleaned - files in your latest commit will *not* be touched
27.5 Branch
27.5.1 push
$ git push origin local_branch
27.5.2 delete
$ git push origin :remote_branch
27.6 Merge
27.6.1 git cherry-pick
55e0513c is at branch devel, we merge it into master:
$ git checkout master $ git cherry-pick 55e0513c
27.7 Patch
export all the 19 commits:
$ git format-patch -s -p --stat -19 -o /tmp/
27.8 Bitbucket
Get started with an existing project:
$ cd /path/ to/your/repo $ git remotee add origin ssh://git@bitbucket.org/YOUR_UNAME/repo.git $ git push -u origin master
Get started from scratch:
$ git clone git@bitbucket.org:YOUR_UNAME/repo.git $ cd repo $ echo '# README' >> README.md $ git add README.md $ git commit -m "Initial commit" $ git push -u origin master
27.9 ssh agent
# start the ssh-agent in the background $ eval "$(ssh-agent -s)" Agent pid 59566 $ ssh-add ~/.ssh/id_rsa
28 Fonts
Google 思源黑体被称为 Noto Sans CJK
comcat@jackslab:/$ sudo apt-cache search "Noto Sans CJK" fonts-noto-cjk - "No Tofu" font families with large Unicode coverage (CJK) comcat@jackslab:/$ sudo apt-get install fonts-noto-cjk
29 Markdown
$ sudo apt-get install pandoc $ sudo apt-get install texlive-xetex texlive-latex-recommended texlive-latex-extra $ sudo apt-get install ttf-arphic-gbsn00lp ttf-arphic-ukai # from arphic $ sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei # from WenQuanYi $ $ git clone git://github.com/tinyclub/markdown-lab.git $ cd markdown-lab/article/ $ make
- https://www.jianshu.com/p/191d1e21f7ed
- https://github.com/younghz/Markdown
- http://pandoc.org/demo/example19/Pandoc_0027s-Markdown.html
30 Gitbook
31 ip 反查域名
32 ATA Secure Erase
https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase
33 nginx/php
$ sudo apt-get install nginx $ sudo apt-get install php7-fpm $ sudo /etc/init.d/nginx start $ sudo /etc/init.d/php7-fpm start
34 crontab
crontab的格式:
分 时 日 月 星期 要运行的命令
第1列分钟 1~59
第2列小时 1~23(0表示子夜)
第3列日 1~31
第4列月 1~12
第5列星期 0~6(0表示星期天)
第6列要运行的命令
例子:
30 21 * * * /usr/local/apache/bin/apachectl restart 上面的例子表示每晚的21:30重启apache。 45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart 上面的例子表示每月1、10、22日的4 : 45重启apache。 10 1 * * 6,0 /usr/local/apache/bin/apachectl restart 上面的例子表示每周六、周日的1 : 10重启apache。 0,30 18-23 * * * /usr/local/apache/bin/apachectl restart 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。 0 23 * * 6 /usr/local/apache/bin/apachectl restart 上面的例子表示每星期六的11 : 00 pm重启apache。 * */1 * * * /usr/local/apache/bin/apachectl restart 每一小时重启apache * 23-7/1 * * * /usr/local/apache/bin/apachectl restart 晚上11点到早上7点之间,每隔一小时重启apache 0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart 每月的4号与每周一到周三的11点重启apache 0 4 1 jan * /usr/local/apache/bin/apachectl restart 一月一号的4点重启apache
35 dns bind9
root@srv:~# apt-get install bind9 配置文件的路径在/etc/bind路径下面 vim /etc/bind/named.conf.local 添加如下: zone "jk.com" { type master; file "/etc/bind/db.jk.com"; }; 修改db的配置文件 root@srv:/etc/bind# cp db.local db.jk.com root@srv:/etc/bind# vim db.jk.com $TTL 604800 @ IN SOA jk.com. root.localhost. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. @ IN A 127.0.0.1 @ IN AAAA ::1 test IN A 192.168.0.11 test IN A 192.168.0.12 test IN A 192.168.0.13
修改/etc/bind/named.conf.option 配置文件,在 named.conf 中可以设置 bind 的 round-robin 的给出结果的顺序:
rrset-order { order cyclic; }; rrset-order 支持三个参数:fixed, random, cyclic 。 fixed 会将多个A记录按配置文件的顺序固定给出 random 会随机给出 cyclic 会循环给出
36 dnsmasq
37 iptables
- https://www.cnblogs.com/foxgab/p/6896957.html
- https://blog.csdn.net/Criss_Leung/article/details/77988864
38 vsftp
快速搭建简易 ftp 服务: VSFTP Quick Start
39 Samba
Quick Start: Samba Tips
40 WIKI
Quick Start: WIKI Tips
41 Language
41.1 Node.js
41.2 Perl Catalyst
42 Database
42.1 InfluxDB
- Quick Start: InfluxDB Quick Start
- Python API: http://influxdb-python.readthedocs.io/en/latest/examples.html
- Python API example: https://github.com/influxdata/influxdb-python/blob/master/examples/tutorial_pandas.py
42.2 mysql
Quick Start: MYSQL Tips
42.3 sqllite
Quick Start: SQLITE Tips
42.4 Mongodb
Quick Start: MongoDB Quick Start
43 Grafana
Quick Start: Grafana Quick Start
44 graphviz
45 ubifs
# size of created mtd is 256.0 MiB modprobe nandsim first_id_byte=0x2c second_id_byte=0xda third_id_byte=0x90 fourth_id_byte=0x95 flash_erase /dev/mtd0 0 0 ubiformat /dev/mtd0 -s 2048 -O 2048 modprobe ubi ubiattach -m 0 -d 0 -O 2048 # set $(SIZE) to value more than size of the ubifs filesystem ubimkvol /dev/ubi0 -N volname -s $(SIZE) ubiupdatevol /dev/ubi0_0 $(UBIFS) mount /dev/ubi0_0 /mnt
46 ffmpeg
Quick Start: FFMPEG Tips
47 mplayer
Quick Start: MPlayer Tips
48 Linux 下定义快捷键
48.1 xbindkeys
这是个通用方式,通过守护进程 xbindkeys 截获键盘事件,其不依赖于重型桌面环境(如 gnome, kde ...),直接使用 X11 的库。
Steps:
$ apt-get install xbindkeys $ xbindkeys -d > ~/.xbindkeysrc $ echo \"gnome-screenshot\" >> ~/.xbindkeysrc $ echo " control+shift + s" $ xbindkeys
48.2 Gnome 环境下
访问“System>Preferences>Keyboard Shortcuts”,选定想要设置的项目,然后键入快捷键即可生效。
48.3 Metacity 中加快捷键
1. 运行 gconf-editor
2. 去到 “Apps->Metacity->keybinding Commands”
- 这里可设多个快捷键。选一(如 command_3),编辑该键,设置“key value”为“gedit”。按“确定”。
- 到“Global keybingdings” ,选择“run_command_3”
- 选择“Edit key”,改键值为 \<Control\>e
- 按下 ctrl-e ,应该会出现 gedit 窗口。
49 SELinux
https://www.configserverfirewall.com/ubuntu-linux/disable-selinux-ubuntu/
50 Audit
https://linux-audit.com/configuring-and-auditing-linux-systems-with-audit-daemon/