F's Blog

博客 收藏夹
Live With Linux

13 Nov 2015

Linux 现在越来越方便,我个人用 mint,配合着各种软件,能够满足我用电脑的一切需求。

Linux 下各种好用的工具,可以让日常流程自动化、也可以实现你想要的效果。它们是 Linux 的宝贵资产,是代代程序员传承下来的。

仅仅三十年间计算机软件就有了如此的积累,甚至第一代程序员还在编程,已经形成了如此庞大的基础,而且还会一直持续下去。如果说人类是靠书本将知识传递了下来,那计算机自出生就是一体的,一直多是它一个,在一步一步被人类养大。所以,怎能不看好计算机呢?

基本命令

find

xargs

xargs - build and execute command lines from standard input.

它的作用就是批量处理多行的输入。如:

# 查出当前目录的文件,对每个文件执行 grep "to_find" 命令
find ./ -type f | xargs grep "to_find"

文本处理

更多参考这里

grep 文本搜索

#在多级目录中对文本递归搜索,并显示行号(程序员搜代码的最爱):
grep "class" . -R -n

定时执行任务

crontab

crontab -e 编辑 # -l 列出现有的, -r 删除

格式

分 时 日 月 星期 要运行的命令

例子

实例1:每1分钟执行一次myCommand
* * * * * myCommand

实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand

实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand

实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2  *  * myCommand

实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand

实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb
* */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb
0 23-7 * * * /etc/init.d/smb restart

# 在系统启动后执行脚本
@reboot /path/to/script

at

# at 5pm+3 days
$ at 2:05 tomorrow

at>echo "hi"
at> <Ctrl+D>
echo "your-command" | at now

at -c 14 显示 14 号任务内容

atq 显示待执行的任务 atrm 删除任务

rc

系统重启后执行的任务。执行的任务都需要在 /etc/init.d/ 目录里。

用 update-rc.d 进行控制。

#创建要开机自动执行的脚本:/home/test/blog/startBlog.sh,并给予可执行权限:
chmod +x /home/test/blog/startBlog.sh

# 在/etc/init.d目录下创建链接文件到前面的脚本
ln -s /home/test/blog/startBlog.sh /etc/init.d/startBlog。

# 进入/etc/init.d目录,用 update-rc.d 命令将连接文件 startBlog 添加到启动脚本中去:
# 其中的99表示启动顺序,取值范围是0-99。序号越大的越晚执行。
update-rc.d startBlog defaults 99

# 移除启动的脚本,-f选项表示强制执行
# nstead of removing the links, disable them. The difference is that removal does not make dpkg aware of your preference to prevent the startup scripts from being executed because dpkg runs  update-rc.d too for removing and adding the links.
update-rc.d -f startBlog disable

而 /etc/init.d/ 里的文件是有格式的,即 Subsystems,像 Nginx、PostgreSQL那样。

byzanz

能录制屏幕,并输出gif格式(根据输出文件名的后缀来输出文件类型)。

这是其使用方法:

Usage:
  byzanz-record [OPTION...] record your current desktop session

-d, --duration=SECS      Duration of animation (default: 10 seconds)
-e, --exec=COMMAND       Command to execute and time
--delay=SECS             Delay before start (default: 1 second)
-c, --cursor             Record mouse cursor
-a, --audio              Record audio
-x, --x=PIXEL            X coordinate of rectangle to record
-y, --y=PIXEL            Y coordinate of rectangle to record
-w, --width=PIXEL        Width of recording rectangle
-h, --height=PIXEL       Height of recording rectangle
-v, --verbose            Be verbose
--display=DISPLAY        X display to use

默认需要指定区域,这里有一个脚本可以选择要录制的应用窗口。

byzanz-record-window文件:

#!/bin/bash

# Delay before starting
DELAY=10

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/KDE-Im-Irc-Event.ogg &
}

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to /tmp/recorded.gif
    D="--duration=10 /tmp/recorded.gif"
fi
XWININFO=$(xwininfo)
read X < <(awk -F: '/Absolute upper-left X/{print $2}' <<< "$XWININFO")
read Y < <(awk -F: '/Absolute upper-left Y/{print $2}' <<< "$XWININFO")
read W < <(awk -F: '/Width/{print $2}' <<< "$XWININFO")
read H < <(awk -F: '/Height/{print $2}' <<< "$XWININFO")

echo Delaying $DELAY seconds. After that, byzanz will start
for (( i=$DELAY; i>0; --i )) ; do
    echo $i
    sleep 1
done

beep
byzanz-record --verbose --delay=0 --x=$X --y=$Y --width=$W --height=$H $D
beep

从代码中可以看出,参数第一个跟的是duration,默认10秒,其它的就是byzanz的参数形式了,最后跟 输入的文件路径。

所以可以这样使用:

byzanz-record-window 30 -c output.gif

录30秒,输出为output.gif文件。

参考:

http://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast

计算机状态

glances

Glances is a cross-platform monitoring tool which aims to present a maximum of information in a minimum of space through a curses or Web based interface. It can adapt dynamically the displayed information depending on the user interface size.

sysctl - configure kernel parameters at runtime

永久配置在 /etc/sysctl.conf 文件里。

比如设置 swap 的使用率,参考这里

查看:

cat /proc/sys/vm/swappiness

临时的:

sudo swapoff -a

# To set the new value to 0:
sudo sysctl vm.swappiness=0

# To turn swap back on:
sudo swapon -a

永久的:

sudoedit /etc/sysctl.conf
Add this line vm.swappiness = 0
sudo shutdown -r now # restart system

top

htop - interactive process viewer

du

df

网络

telnet

TCP 连接器。

netcat — arbitrary TCP and UDP connections and listens

nmap

netstat

# 查看使用 80 端口的程序
sudo netstat --all --program | grep '80'

fuser - identify processes using files or sockets

iftop - display bandwidth usage on an interface by host

vnstat - a console-based network traffic monitor

它会在后台运行一个 vnstatd 的后台进程,收集流量信息。

nethogs - Net top tool grouping bandwidth per process

在不打断现有网络协议的情况下,统计每个进程的网络使用带宽。

hogwatch

文件传输

通过文件传输,可以灵活无限的扩展自己的存储空间,有的像本地的一样使用,有的可以作为备分。

大型系统的思想就是把各个模块分离,然后通过网络耦合起来,随着系统规模的扩展,模块粒度越来越细,也更容易扩展。

[rsync] —— 同步

命令格式:

# 使用起来很像 ssh
rsync [option] 源路径 目标路径

其中 [option]:
  -a:使用archive模式,等于-rlptgoD,即保持原有的文件权限
  -z:表示传输时压缩数据
  -v:详细模式输出
  -e:使用远程shell程序(可以使用rsh或ssh)
  --progress: 显示备份过程
  --delete:精确保存副本,源主机删除的文件,目标主机也会同步删除
  --include=PATTERN:不排除符合PATTERN的文件或目录
  --exclude=PATTERN:排除所有符合PATTERN的文件或目录
  --password-file:指定用于rsync服务器的用户验证密码
  -s, --protect-args: 如果文件名里有空白,不会把它们分开当成多个文件,同时如 ~ 也不会被翻译

备份本地数据

比 cp 好用,开始几分钟显示比较慢,但后面就很快。

最大的优点是可以中断,当然可以接着 cp 的中断用 rsync。

rsync -av --progress  ./test.c  /backup

rsync 和 ssh 差异远程同步命令

例子:

rsync -ave ssh  user@192.168.1.109:/home/user/test/ /home/my/test_new/  

# 将本地内容同步到远程目录
rsync -ave ssh /home/my/test_new/  user@192.168.1.109:/home/user/test/

# 将远程上的test目录内容同步到本地的New_Test目录,并删除本地上源路径中不存在的文件或目录。
# 千万要注意--delete参数,在使用此参数的时候,建议用绝对路径指定本地目录,防止清空当前目录
rsync -avz --delete user@192.168.1.109:/home/user/test/ /home/my/New_Test/

默认不用 -e ssh,rsync 就会自动用 ssh 的。

lftp

比ftp命令好用,封装了 rm 等常用命令。

samba

samba 是与 windows 共享的协议,而且一般的路由器的共享存储也是 samba 协议,需要在 Linux 安装客户端。

手动加载

sudo apt-get install smbclient

smbclient -L 192.168.1.1 -U username%password # 10.0.0.11是samba服务器IP

smbclient //192.168.1.1/Share -U username%password  # IP地址后接共享目录,在上一步可以看到

# mount 到系统目录, cifs type 是对之前 smbfs 格式的替换
mkdir ~/Share
sudo mount -t cifs -o username=name,password=pass //192.168.1.1/Share /home/yourname/Share

自动加载 SMB shares

首先需要安装,否则回报没有 /sbin/mount. 的错:

sudo apt-get install cifs-utils

添加 /etc/samba/user 文件:

username=samba_user
password=samba_user_password

改变文件的安全属性:

sudo chmod 0400 /etc/samba/user # permissions of 0400 = read only

然后创建一个挂载点,比如 /media/samba_share:

sudo mkdir /media/samba_share

然后修改 /etc/fstab 文件,让 smb 自动挂载:

sudo cp /etc/fstab /etc/fstab.bak
sudo vim /etc/fstab

添加一行:

//myserver_ip_address/myshare  /media/samba_share  cifs  noauto,credentials=/etc/samba/user,noexec  0 0

其中 noauto 是不用自动开机挂载(影响开机速度),noexec 是阻止从 smb 目录运行脚本,重启后就会自动挂载了。

也可以现在挂载:

sudo mount /media/samba_share
sudo umount /media/samba_share

如果想让当前用户也能自由 mount,好的办法是创建一个能执行加载命令的 samba 组,然后把当前用户加进去:

sudo groupadd samba
# Change "user" to the username you wish to add to the samba group.
sudo adduser user samba

sudo visudo

或者去 /etc/sudoers.d 里创建一个文件 samba,并把它的权限改为 440:

## Members of the admin group may gain root privileges
%samba   ALL=(ALL) /bin/mount,/bin/umount,/sbin/mount.cifs,/sbin/umount.cifs

[SSHFS (SSH FILESYSTEM)]

可以通过 ssh 协议将远程的文件系统挂载到本地。

在 host 机器上安装后就可以挂载了:

sudo apt-get install sshfs
mkdir Remote
# 默认会把 user 用户的 home 目录挂载过来
sshfs user@your-remote-server: Remote

[aria2c]

下载软件。

uGet

远程桌面

掌握了远程桌面,就能够管理和使用好成群的计算机中的每一台了。

Remmina

算是一个大集合,把所有的工具都封装了起来。

FreeRDP

rdesktop 已死,此为代替。在 Ubuntu 上的命令是 xfreerdp,用于连接 Windows 的 RDP 3389 端口,功能强大。

xfreerdp /u:username /p:password /v:192.168.0.3 /drive:linux,/home/user/Share/

TeamViewer

TeamViewer 是可以在互联网上访问的商业远程桌面,对个人用户免费。其实 RealVNC 也支持互联网访问。

只需要在控制的入口安装,就能在入口控制所有其它内网的桌面了。

VNC

Virtual Network Computing,Linux 下的虚拟桌面。

Linux Mint 默认带 Desktop Sharing,其实就是 VNC server,默认端口是 5900,可以用上面的Remmina 去连。

RealVNC 是好用的跨平台 VNC Server 和 Viewer。

也可以用 remote-viewer 去连,它不仅支持 spice,还有 vnc,我喜欢这个,能把虚拟机和实体机都统一的管理。

系统

[systemd]

[VeraCrypt]

娱乐

[Steam]

支持 dota2,文明等可玩性高的游戏。而且很方便,我愿意花钱买游戏。

[mpv]

参考

本文由 付豪 创作,采用署名 4.0 国际(CC BY 4.0)创作共享协议进行许可,详细声明