GNU/Linux Tips
1 XPS 9560
- 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
2 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 即可
3 Linux 下定义快捷键
3.1 xbindkeys
这是个通用方式,通过守护进程 xbindkeys 截获键盘事件,其不依赖于重型桌面环境(如 gnome, kde ...),直接使用 X11 的库。
Steps:
$ apt-get install xbindkeys $ xbindkeys -d > ~/.xbindkeysrc $ echo \"gnome-screenshot\" >> ~/.xbindkeysrc $ echo " control+shift + s" $ xbindkeys
3.2 Gnome 环境下
访问“System>Preferences>Keyboard Shortcuts”,选定想要设置的项目,然后键入快捷键即可生效。
3.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 窗口。
4 Bash
4.1 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
4.2 Bash readline
#!/bin/bash count=1 cat X1A001.dat | while read line # 从文本文件 X1A001.dat 一行一行的读 do echo "$count:$line" count=$(($count + 1)) done exit 0
4.3 命令行历史
- 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
5 User Add
$ userdel comcat $ useradd comcat -m -s /bin/bash -p
6 Network Monitor
6.1 iftop
$ sudo apt-get install iftop $ sudo iftop -P -i eth1
6.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/
7 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中!有特殊用途。
8 Grep
1. 提取文件中所有符合模式的字符串:
egrep -or "MJD[0-9]{12}" /tmp/alldevid
9 WiFi Config
9.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
9.2 nmcli
# list your connections $ sudo nmcli c $ sudo nmcli c up uuid <paste essid uuid here>
9.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
10 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 "$@"
11 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
12 VirtualBox
12.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
13 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
14 GDB Tips
1. 查看寄存器
(gdb) i r (gdb) i r a # 查看所有寄存器(包括浮点、多媒体) (gdb) i r esp (gdb) i r pc
2. 查看内存
(gdb) x /wx 0x80040000 # 以16进制显示指定地址处的数据 (gdb) x /8x $esp (gdb) x /16x $esp+12 (gdb) x /16s 0x86468700 # 以字符串形式显示指定地址处的数据 (gdb) x /24i 0x8048a51 # 以指令形式显示指定地址处的数据(24条)
3. 修改寄存器的值
(gdb) set $v0 = 0x004000000 (gdb) set $epc = 0xbfc00000
4. 修改内存的值
(gdb) set {unsigned int}0x8048a51=0x0 (gdb) set *(unsigned int*)0x8048a54=0x55aa55aa
5. 内存搜索
Usage: find <start> <end> <count> <value> (gdb) define find set $ptr = $arg0 set $cnt = 0 while ( ($ptr<=$arg1) && ($cnt<$arg2) ) if ( *(unsigned int *)$ptr == $arg3 ) x /wx $ptr set $cnt = $cnt + 1 end set $ptr = $ptr + 4 end end
6. 断点、监测点
(gdb) b *0x80400000 (gdb) watch *(unsigned int *)0xbffff400==0x90909090
15 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中
16 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后的内容
16.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>
16.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
16.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
16.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
16.5 Branch
16.5.1 push
$ git push origin local_branch
16.5.2 delete
$ git push origin :remote_branch
16.6 Merge
16.6.1 git cherry-pick
55e0513c is at branch devel, we merge it into master:
$ git checkout master $ git cherry-pick 55e0513c
16.7 Patch
export all the 19 commits:
$ git format-patch -s -p --stat -19 -o /tmp/
16.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
16.9 ssh agent
# start the ssh-agent in the background $ eval "$(ssh-agent -s)" Agent pid 59566 $ ssh-add ~/.ssh/id_rsa
17 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
18 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
19 Gitbook
20 tshark
抓包 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
21 ATA Secure Erase
https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase
22 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
23 netcat
23.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
23.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
23.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
24 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
25 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
26 dns server
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 会循环给出
27 vsftp
快速搭建简易 ftp 服务: VSFTP Quick Start
28 Samba
Quick Start: Samba Tips
29 WIKI
Quick Start: WIKI Tips
30 mysql
Quick Start: MYSQL Tips
31 sqllite
Quick Start: SQLITE Tips
32 mongodb
Quick Start: MongoDB Quick Start
33 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
34 Grafana
Quick Start: Grafana Quick Start
35 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
36 graphviz
37 ffmpeg
Quick Start: FFMPEG Tips
38 mplayer
Quick Start: MPlayer Tips