HankChow's Blog


  • 首页

  • 归档

  • 关于

  • 标签

  • 搜索

在 Linux 中安全且轻松地管理 Cron 定时任务

发表于 2018-10-03
字数统计: 1.6k | 阅读时长 ≈ 6

在 Linux 中遇到计划任务的时候,你首先会想到的大概就是 Cron 定时任务了。Cron 定时任务能帮助你在类 Unix 操作系统中计划性地执行命令或者任务。也可以参考一下我们之前的一篇《关于 Cron 定时任务的新手指导》。对于有一定 Linux 经验的人来说,设置 Cron 定时任务不是什么难事,但对于新手来说就不一定了,他们在编辑 crontab 文件的时候不知不觉中犯的一些小错误,也有可能把整个 Cron 定时任务搞挂了。如果你在处理 Cron 定时任务的时候为了以防万一,可以尝试使用 Crontab UI,它是一个可以在类 Unix 操作系统上安全轻松管理 Cron 定时任务的 Web 页面工具。

Crontab UI 是使用 NodeJS 编写的自由开源软件。有了 Crontab UI,你在创建、删除和修改 Cron 定时任务的时候就不需要手工编辑 Crontab 文件了,只需要打开浏览器稍微操作一下,就能完成上面这些工作。你可以用 Crontab UI 轻松创建、编辑、暂停、删除、备份 Cron 定时任务,甚至还可以简单地做到导入、导出、部署其它机器上的 Cron 定时任务,它还支持错误日志、邮件发送和钩子。

安装 Crontab UI

只需要一条命令就可以安装好 Crontab UI,但前提是已经安装好 NPM。如果还没有安装 NPM,可以参考《如何在 Linux 上安装 NodeJS》这篇文章。

执行这一条命令来安装 Crontab UI。

1
$ npm install -g crontab-ui

就是这么简单,下面继续来看看在 Crontab UI 上如何管理 Cron 定时任务。

在 Linux 上安全轻松管理 Cron 定时任务

执行这一条命令启动 Crontab UI:

1
$ crontab-ui

你会看到这样的输出:

1
2
Node version: 10.8.0
Crontab UI is running at http://127.0.0.1:8000

首先在你的防火墙和路由器上放开 8000 端口,然后打开浏览器访问 <http://127.0.0.1:8000>。

注意,默认只有在本地才能访问到 Crontab UI 的控制台页面。但如果你想让 Crontab UI 使用系统的 IP 地址和自定义端口,也就是想让其它机器也访问到本地的 Crontab UI,你需要使用以下这个命令:

1
2
3
$ HOST=0.0.0.0 PORT=9000 crontab-ui
Node version: 10.8.0
Crontab UI is running at http://0.0.0.0:9000

Crontab UI 就能够通过 <http://IP-Address>:9000 这样的 URL 被远程机器访问到了。

Crontab UI 的控制台页面长这样:

从上面的截图就可以看到,Crontab UI 的界面非常简洁,所有选项的含义都能不言自明。

在终端输入 Ctrl + C 就可以关闭 Crontab UI。

创建、编辑、运行、停止、删除 Cron 定时任务

点击 “New”,输入 Cron 定时任务的信息并点击 “Save” 保存,就可以创建一个新的 Cron 定时任务了。

  1. 为 Cron 定时任务命名,这是可选的;
  2. 你想要执行的完整命令;
  3. 设定计划执行的时间。你可以按照启动、每时、每日、每周、每月、每年这些指标快速指定计划任务,也可以明确指定任务执行的具体时间。指定好计划时间后,“Jobs” 区域就会显示 Cron 定时任务的句式。
  4. 选择是否为某个 Cron 定时任务记录错误日志。

这是我的一个 Cron 定时任务样例。

如你所见,我设置了一个每月清理 pacman 缓存的 Cron 定时任务。你也可以设置多个 Cron 定时任务,都能在控制台页面看到。

如果你需要更改 Cron 定时任务中的某些参数,只需要点击 “Edit” 按钮并按照你的需求更改对应的参数。点击 “Run” 按钮可以立即执行 Cron 定时任务,点击 “Stop” 则可以立即停止 Cron 定时任务。如果想要查看某个 Cron 定时任务的详细日志,可以点击 “Log” 按钮。对于不再需要的 Cron 定时任务,就可以按 “Delete” 按钮删除。

备份 Cron 定时任务

点击控制台页面的 “Backup” 按钮并确认,就可以备份所有 Cron 定时任务。

备份之后,一旦 Crontab 文件出现了错误,就可以使用备份来恢复了。

导入/导出其它机器上的 Cron 定时任务

Crontab UI 还有一个令人注目的功能,就是导入、导出、部署其它机器上的 Cron 定时任务。如果同一个网络里的多台机器都需要执行同样的 Cron 定时任务,只需要点击 “Export” 按钮并选择文件的保存路径,所有的 Cron 定时任务都会导出到 crontab.db 文件中。

以下是 crontab.db 文件的内容:

1
2
$ cat Downloads/crontab.db
{"name":"Remove Pacman Cache","command":"rm -rf /var/cache/pacman","schedule":"@monthly","stopped":false,"timestamp":"Thu Aug 23 2018 10:34:19 GMT+0000 (Coordinated Universal Time)","logging":"true","mailing":{},"created":1535020459093,"_id":"lcVc1nSdaceqS1ut"}

导出成文件以后,你就可以把这个 crontab.db 文件放置到其它机器上并导入成 Cron 定时任务,而不需要在每一台主机上手动设置 Cron 定时任务。总之,在一台机器上设置完,导出,再导入到其他机器,就完事了。

在 Crontab 文件获取/保存 Cron 定时任务

你可能在使用 Crontab UI 之前就已经使用 crontab 命令创建过 Cron 定时任务。如果是这样,你可以点击控制台页面上的 “Get from crontab” 按钮来获取已有的 Cron 定时任务。

同样地,你也可以使用 Crontab UI 来将新的 Cron 定时任务保存到 Crontab 文件中,只需要点击 “Save to crontab” 按钮就可以了。

管理 Cron 定时任务并没有想象中那么难,即使是新手使用 Crontab UI 也能轻松管理 Cron 定时任务。赶快开始尝试并发表一下你的看法吧。


via: https://www.ostechnix.com/how-to-easily-and-safely-manage-cron-jobs-in-linux/

如何在 Linux 中查看进程占用的端口号

发表于 2018-10-02
字数统计: 2.3k | 阅读时长 ≈ 11

对于 Linux 系统管理员来说,清楚某个服务是否正确地绑定或监听某个端口,是至关重要的。如果你需要处理端口相关的问题,这篇文章可能会对你有用。

端口是 Linux 系统上特定进程之间逻辑连接的标识,包括物理端口和软件端口。由于 Linux 操作系统是一个软件,因此本文只讨论软件端口。软件端口始终与主机的 IP 地址和相关的通信协议相关联,因此端口常用于区分应用程序。大部分涉及到网络的服务都必须打开一个套接字来监听传入的网络请求,而每个服务都使用一个独立的套接字。

推荐阅读:

  • 在 Linux 上查看进程 ID 的 4 种方法
  • 在 Linux 上终止进程的 3 种方法

套接字是和 IP 地址、软件端口和协议结合起来使用的,而端口号对传输控制协议(TCP)和用户数据报协议(UDP)协议都适用,TCP 和 UDP 都可以使用 0 到 65535 之间的端口号进行通信。

以下是端口分配类别:

  • 0 - 1023: 常用端口和系统端口
  • 1024 - 49151: 软件的注册端口
  • 49152 - 65535: 动态端口或私有端口

在 Linux 上的 /etc/services 文件可以查看到更多关于保留端口的信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# less /etc/services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports
# are included, only the more common ones.
#
# The latest IANA port assignments can be gotten from
# http://www.iana.org/assignments/port-numbers
# The Well Known Ports are those from 0 through 1023.
# The Registered Ports are those from 1024 through 49151
# The Dynamic and/or Private Ports are those from 49152 through 65535
#
# Each line describes one service, and is of the form:
#
# service-name port/protocol [aliases ...] [# comment]

tcpmux 1/tcp # TCP port service multiplexer
tcpmux 1/udp # TCP port service multiplexer
rje 5/tcp # Remote Job Entry
rje 5/udp # Remote Job Entry
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
systat 11/udp users
daytime 13/tcp
daytime 13/udp
qotd 17/tcp quote
qotd 17/udp quote
msp 18/tcp # message send protocol (historic)
msp 18/udp # message send protocol (historic)
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp-data 20/udp
# 21 is registered to ftp, but also used by fsp
ftp 21/tcp
ftp 21/udp fsp fspd
ssh 22/tcp # The Secure Shell (SSH) Protocol
ssh 22/udp # The Secure Shell (SSH) Protocol
telnet 23/tcp
telnet 23/udp
# 24 - private mail system
lmtp 24/tcp # LMTP Mail Delivery
lmtp 24/udp # LMTP Mail Delivery

可以使用以下六种方法查看端口信息。

  • ss:可以用于转储套接字统计信息。
  • netstat:可以显示打开的套接字列表。
  • lsof:可以列出打开的文件。
  • fuser:可以列出那些打开了文件的进程的进程 ID。
  • nmap:是网络检测工具和端口扫描程序。
  • systemctl:是 systemd 系统的控制管理器和服务管理器。

以下我们将找出 sshd 守护进程所使用的端口号。

方法 1:使用 ss 命令

ss 一般用于转储套接字统计信息。它能够输出类似于 netstat 输出的信息,但它可以比其它工具显示更多的 TCP 信息和状态信息。

它还可以显示所有类型的套接字统计信息,包括 PACKET、TCP、UDP、DCCP、RAW、Unix 域等。

1
2
3
# ss -tnlp | grep ssh
LISTEN 0 128 *:22 *:* users:(("sshd",pid=997,fd=3))
LISTEN 0 128 :::22 :::* users:(("sshd",pid=997,fd=4))

也可以使用端口号来检查。

1
2
3
# ss -tnlp | grep ":22"
LISTEN 0 128 *:22 *:* users:(("sshd",pid=997,fd=3))
LISTEN 0 128 :::22 :::* users:(("sshd",pid=997,fd=4))

方法 2:使用 netstat 命令

netstat 能够显示网络连接、路由表、接口统计信息、伪装连接以及多播成员。

默认情况下,netstat 会列出打开的套接字。如果不指定任何地址族,则会显示所有已配置地址族的活动套接字。但 netstat 已经过时了,一般会使用 ss 来替代。

1
2
3
# netstat -tnlp | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 997/sshd
tcp6 0 0 :::22 :::* LISTEN 997/sshd

也可以使用端口号来检查。

1
2
3
# netstat -tnlp | grep ":22"
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1208/sshd
tcp6 0 0 :::22 :::* LISTEN 1208/sshd

方法 3:使用 lsof 命令

lsof 能够列出打开的文件,并列出系统上被进程打开的文件的相关信息。

1
2
3
4
5
# lsof -i -P | grep ssh
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 11584 root 3u IPv4 27625 0t0 TCP *:22 (LISTEN)
sshd 11584 root 4u IPv6 27627 0t0 TCP *:22 (LISTEN)
sshd 11592 root 3u IPv4 27744 0t0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902 (ESTABLISHED)

也可以使用端口号来检查。

1
2
3
4
5
# lsof -i tcp:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1208 root 3u IPv4 20919 0t0 TCP *:ssh (LISTEN)
sshd 1208 root 4u IPv6 20921 0t0 TCP *:ssh (LISTEN)
sshd 11592 root 3u IPv4 27744 0t0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902 (ESTABLISHED)

方法 4:使用 fuser 命令

fuser 工具会将本地系统上打开了文件的进程的进程 ID 显示在标准输出中。

1
2
3
4
5
# fuser -v 22/tcp
USER PID ACCESS COMMAND
22/tcp: root 1208 F.... sshd
root 12388 F.... sshd
root 49339 F.... sshd

方法 5:使用 nmap 命令

nmap(“Network Mapper”)是一款用于网络检测和安全审计的开源工具。它最初用于对大型网络进行快速扫描,但它对于单个主机的扫描也有很好的表现。

nmap 使用原始 IP 数据包来确定网络上可用的主机,这些主机的服务(包括应用程序名称和版本)、主机运行的操作系统(包括操作系统版本等信息)、正在使用的数据包过滤器或防火墙的类型,以及很多其它信息。

1
2
3
4
5
6
7
8
9
10
11
# nmap -sV -p 22 localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-09-23 12:36 IST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000089s latency).
Other addresses for localhost (not scanned): 127.0.0.1
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.44 seconds

方法 6:使用 systemctl 命令

systemctl 是 systemd 系统的控制管理器和服务管理器。它取代了旧的 SysV 初始化系统管理,目前大多数现代 Linux 操作系统都采用了 systemd。

推荐阅读:

  • chkservice – Linux 终端上的 systemd 单元管理工具
  • 如何查看 Linux 系统上正在运行的服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2018-09-23 02:08:56 EDT; 6h 11min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 11584 (sshd)
CGroup: /system.slice/sshd.service
└─11584 /usr/sbin/sshd -D

Sep 23 02:08:56 vps.2daygeek.com systemd[1]: Starting OpenSSH server daemon...
Sep 23 02:08:56 vps.2daygeek.com sshd[11584]: Server listening on 0.0.0.0 port 22.
Sep 23 02:08:56 vps.2daygeek.com sshd[11584]: Server listening on :: port 22.
Sep 23 02:08:56 vps.2daygeek.com systemd[1]: Started OpenSSH server daemon.
Sep 23 02:09:15 vps.2daygeek.com sshd[11589]: Connection closed by 103.5.134.167 port 49899 [preauth]
Sep 23 02:09:41 vps.2daygeek.com sshd[11592]: Accepted password for root from 103.5.134.167 port 49902 ssh2

以上输出的内容显示了最近一次启动 sshd 服务时 ssh 服务的监听端口。但它不会将最新日志更新到输出中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-09-06 07:40:59 IST; 2 weeks 3 days ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1208 (sshd)
CGroup: /system.slice/sshd.service
├─ 1208 /usr/sbin/sshd -D
├─23951 sshd: [accepted]
└─23952 sshd: [net]

Sep 23 12:50:36 vps.2daygeek.com sshd[23909]: Invalid user pi from 95.210.113.142 port 51666
Sep 23 12:50:36 vps.2daygeek.com sshd[23909]: input_userauth_request: invalid user pi [preauth]
Sep 23 12:50:37 vps.2daygeek.com sshd[23911]: pam_unix(sshd:auth): check pass; user unknown
Sep 23 12:50:37 vps.2daygeek.com sshd[23911]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=95.210.113.142
Sep 23 12:50:37 vps.2daygeek.com sshd[23909]: pam_unix(sshd:auth): check pass; user unknown
Sep 23 12:50:37 vps.2daygeek.com sshd[23909]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=95.210.113.142
Sep 23 12:50:39 vps.2daygeek.com sshd[23911]: Failed password for invalid user pi from 95.210.113.142 port 51670 ssh2
Sep 23 12:50:39 vps.2daygeek.com sshd[23909]: Failed password for invalid user pi from 95.210.113.142 port 51666 ssh2
Sep 23 12:50:40 vps.2daygeek.com sshd[23911]: Connection closed by 95.210.113.142 port 51670 [preauth]
Sep 23 12:50:40 vps.2daygeek.com sshd[23909]: Connection closed by 95.210.113.142 port 51666 [preauth]

大部分情况下,以上的输出不会显示进程的实际端口号。这时更建议使用以下这个 journalctl 命令检查日志文件中的详细信息。

1
2
3
4
5
6
7
# journalctl | grep -i "openssh\|sshd"
Sep 23 02:08:56 vps138235.vps.ovh.ca sshd[997]: Received signal 15; terminating.
Sep 23 02:08:56 vps138235.vps.ovh.ca systemd[1]: Stopping OpenSSH server daemon...
Sep 23 02:08:56 vps138235.vps.ovh.ca systemd[1]: Starting OpenSSH server daemon...
Sep 23 02:08:56 vps138235.vps.ovh.ca sshd[11584]: Server listening on 0.0.0.0 port 22.
Sep 23 02:08:56 vps138235.vps.ovh.ca sshd[11584]: Server listening on :: port 22.
Sep 23 02:08:56 vps138235.vps.ovh.ca systemd[1]: Started OpenSSH server daemon.

via: https://www.2daygeek.com/how-to-find-out-which-port-number-a-process-is-using-in-linux/

在 Linux 下截屏并编辑的最佳工具

发表于 2018-10-01
字数统计: 2k | 阅读时长 ≈ 7

有几种获取屏幕截图并对其进行添加文字、箭头等编辑的方法,这里提及的的屏幕截图工具在 Ubuntu 和其它主流 Linux 发行版中都能够使用。

在 Ubuntu Linux 中如何获取屏幕截图

当我的主力操作系统从 Windows 转换到 Ubuntu 的时候,首要考虑的就是屏幕截图工具的可用性。尽管使用默认的键盘快捷键也可以获取屏幕截图,但如果使用屏幕截图工具,可以更方便地对屏幕截图进行编辑。

本文将会介绍在不适用第三方工具的情况下,如何通过系统自带的方法和工具获取屏幕截图,另外还会介绍一些可用于 Linux 的最佳截图工具。

方法 1:在 Linux 中截图的默认方式

你想要截取整个屏幕?屏幕中的某个区域?某个特定的窗口?

如果只需要获取一张屏幕截图,不对其进行编辑的话,那么键盘的默认快捷键就可以满足要求了。而且不仅仅是 Ubuntu ,绝大部分的 Linux 发行版和桌面环境都支持以下这些快捷键:

  • PrtSc – 获取整个屏幕的截图并保存到 Pictures 目录。
  • Shift + PrtSc – 获取屏幕的某个区域截图并保存到 Pictures 目录。
  • Alt + PrtSc –获取当前窗口的截图并保存到 Pictures 目录。
  • Ctrl + PrtSc – 获取整个屏幕的截图并存放到剪贴板。
  • Shift + Ctrl + PrtSc – 获取屏幕的某个区域截图并存放到剪贴板。
  • Ctrl + Alt + PrtSc – 获取当前窗口的 截图并存放到剪贴板。

如上所述,在 Linux 中使用默认的快捷键获取屏幕截图是相当简单的。但如果要在不把屏幕截图导入到其它应用程序的情况下对屏幕截图进行编辑,还是使用屏幕截图工具比较方便。

方法 2:在 Linux 中使用 Flameshot 获取屏幕截图并编辑

flameshot

功能概述:

  • 注释 (高亮、标示、添加文本、框选)
  • 图片模糊
  • 图片裁剪
  • 上传到 Imgur
  • 用另一个应用打开截图

Flameshot 在去年发布到 GitHub,并成为一个引人注目的工具。

如果你需要的是一个能够用于标注、模糊、上传到 imgur 的新式截图工具,那么 Flameshot 是一个好的选择。

下面将会介绍如何安装 Flameshot 并根据你的偏好进行配置。

如果你用的是 Ubuntu,那么只需要在 Ubuntu 软件中心上搜索,就可以找到 Flameshot 进而完成安装了。要是你想使用终端来安装,可以执行以下命令:

1
sudo apt install flameshot

如果你在安装过程中遇到问题,可以按照官方的安装说明进行操作。安装完成后,你还需要进行配置。尽管可以通过搜索来随时启动 Flameshot,但如果想使用 PrtSc 键触发启动,则需要指定对应的键盘快捷键。以下是相关配置步骤:

  • 进入系统设置中的“键盘设置”
  • 页面中会列出所有现有的键盘快捷键,拉到底部就会看见一个 “+” 按钮
  • 点击 “+” 按钮添加自定义快捷键并输入以下两个字段:
    • “名称”: 任意名称均可。
    • “命令”: /usr/bin/flameshot gui
  • 最后将这个快捷操作绑定到 PrtSc 键上,可能会提示与系统的截图功能相冲突,但可以忽略掉这个警告。

配置之后,你的自定义快捷键页面大概会是以下这样:

将键盘快捷键映射到 Flameshot

方法 3:在 Linux 中使用 Shutter 获取屏幕截图并编辑

功能概述:

  • 注释 (高亮、标示、添加文本、框选)
  • 图片模糊
  • 图片裁剪
  • 上传到图片网站

Shutter 是一个对所有主流 Linux 发行版都适用的屏幕截图工具。尽管最近已经不太更新了,但仍然是操作屏幕截图的一个优秀工具。

在使用过程中可能会遇到这个工具的一些缺陷。Shutter 在任何一款最新的 Linux 发行版上最常见的问题就是由于缺少了任务栏上的程序图标,导致默认禁用了编辑屏幕截图的功能。 对于这个缺陷,还是有解决方案的。你只需要跟随我们的教程在 Shutter 中修复这个禁止编辑选项并将程序图标在任务栏上显示出来。问题修复后,就可以使用 Shutter 来快速编辑屏幕截图了。

同样地,在软件中心搜索也可以找到进而安装 Shutter,也可以在基于 Ubuntu 的发行版中执行以下命令使用命令行安装:

1
sudo apt install shutter

类似 Flameshot,你可以通过搜索 Shutter 手动启动它,也可以按照相似的方式设置自定义快捷方式以 PrtSc 键唤起 Shutter。

如果要指定自定义键盘快捷键,只需要执行以下命令:

1
shutter -f

方法 4:在 Linux 中使用 GIMP 获取屏幕截图

功能概述:

  • 高级图像编辑功能(缩放、添加滤镜、颜色校正、添加图层、裁剪等)
  • 截取某一区域的屏幕截图

如果需要对屏幕截图进行一些预先编辑,GIMP 是一个不错的选择。

通过软件中心可以安装 GIMP。如果在安装时遇到问题,可以参考其官方网站的安装说明。

要使用 GIMP 获取屏幕截图,需要先启动程序,然后通过 “File-> Create-> Screenshot” 导航。

打开 Screenshot 选项后,会看到几个控制点来控制屏幕截图范围。点击 “Snap” 截取屏幕截图,图像将自动显示在 GIMP 中可供编辑。

方法 5:在 Linux 中使用命令行工具获取屏幕截图

这一节内容仅适用于终端爱好者。如果你也喜欢使用终端,可以使用 “GNOME 截图工具”或 “ImageMagick” 或 “Deepin Scrot”,大部分流行的 Linux 发行版中都自带这些工具。

要立即获取屏幕截图,可以执行以下命令:

GNOME 截图工具(可用于 GNOME 桌面)

1
gnome-screenshot

GNOME 截图工具是使用 GNOME 桌面的 Linux 发行版中都自带的一个默认工具。如果需要延时获取屏幕截图,可以执行以下命令(这里的 5 是需要延迟的秒数):

1
gnome-screenshot -d -5

ImageMagick

如果你的操作系统是 Ubuntu、Mint 或其它流行的 Linux 发行版,一般会自带 ImageMagick 这个工具。如果没有这个工具,也可以按照官方安装说明使用安装源来安装。你也可以在终端中执行这个命令:

1
sudo apt-get install imagemagick

安装完成后,执行下面的命令就可以获取到屏幕截图(截取整个屏幕):

1
import -window root image.png

这里的 “image.png” 就是屏幕截图文件保存的名称。

要获取屏幕一个区域的截图,可以执行以下命令:

1
import image.png

Deepin Scrot

Deepin Scrot 是基于终端的一个较新的截图工具。和前面两个工具类似,一般自带于 Linux 发行版中。如果需要自行安装,可以执行以下命令:

1
sudo apt-get install scrot

安装完成后,使用下面这些命令可以获取屏幕截图。

获取整个屏幕的截图:

1
scrot myimage.png

获取屏幕某一区域的截图:

1
scrot -s myimage.png

总结

以上是一些在 Linux 上的优秀截图工具。当然还有很多截图工具没有提及(例如用于 KDE 发行版的 Spectacle),但相比起来还是上面几个工具更为好用。

如果你有比文章中提到的更好的截图工具,欢迎讨论!


via: https://itsfoss.com/take-screenshot-linux/

如何让 Ping 的输出更简单易读

发表于 2018-09-30
字数统计: 1k | 阅读时长 ≈ 3

众所周知,ping 命令可以用来检查目标主机是否可达。使用 ping 命令的时候,会发送一个 ICMP Echo 请求,通过目标主机的响应与否来确定目标主机的状态。如果你经常使用 ping 命令,你可以尝试一下 prettyping。Prettyping 只是将一个标准的 ping 工具增加了一层封装,在运行标准 ping 命令的同时添加了颜色和 unicode 字符解析输出,所以它的输出更漂亮紧凑、清晰易读。它是用 bash 和 awk 编写的自由开源工具,支持大部分类 Unix 操作系统,包括 GNU/Linux、FreeBSD 和 Mac OS X。Prettyping 除了美化 ping 命令的输出,还有很多值得注意的功能。

  • 检测丢失的数据包并在输出中标记出来。
  • 显示实时数据。每次收到响应后,都会更新统计数据,而对于普通 ping 命令,只会在执行结束后统计。
  • 可以灵活处理“未知信息”(例如错误信息),而不搞乱输出结果。
  • 能够避免输出重复的信息。
  • 兼容常用的 ping 工具命令参数。
  • 能够由普通用户执行。
  • 可以将输出重定向到文件中。
  • 不需要安装,只需要下载二进制文件,赋予可执行权限即可执行。
  • 快速且轻巧。
  • 输出结果清晰直观。

安装 Prettyping

如上所述,Prettyping 是一个绿色软件,不需要任何安装,只要使用以下命令下载 Prettyping 二进制文件:

1
$ curl -O https://raw.githubusercontent.com/denilsonsa/prettyping/master/prettyping

将二进制文件放置到 $PATH(例如 /usr/local/bin)中:

1
$ sudo mv prettyping /usr/local/bin

然后对其赋予可执行权限:

1
$ sudo chmod +x /usr/local/bin/prettyping

就可以使用了。

让 ping 的输出清晰易读

安装完成后,通过 prettyping 来 ping 任何主机或 IP 地址,就可以以图形方式查看输出。

1
$ prettyping ostechnix.com

输出效果大概会是这样:

如果你不带任何参数执行 prettyping,它就会一直运行直到被 ctrl + c 中断。

由于 Prettyping 只是一个对普通 ping 命令的封装,所以常用的 ping 参数也是有效的。例如使用 -c 5 来指定 ping 一台主机的 5 次:

1
$ prettyping -c 5 ostechnix.com

Prettyping 默认会使用彩色输出,如果你不喜欢彩色的输出,可以加上 --nocolor 参数:

1
$ prettyping --nocolor ostechnix.com

同样的,也可以用 --nomulticolor 参数禁用多颜色支持:

1
$ prettyping --nomulticolor ostechnix.com

使用 --nounicode 参数禁用 unicode 字符:

如果你的终端不支持 UTF-8,或者无法修复系统中的 unicode 字体,只需要加上 --nounicode 参数就能轻松解决。

Prettyping 支持将输出的内容重定向到文件中,例如执行以下这个命令会将 prettyping ostechnix.com 的输出重定向到 ostechnix.txt 中:

1
$ prettyping ostechnix.com | tee ostechnix.txt

Prettyping 还有很多选项帮助你完成各种任务,例如:

  • 启用/禁用延时图例(默认启用)
  • 强制按照终端的格式输出(默认自动)
  • 在统计数据中统计最后的 n 次 ping(默认 60 次)
  • 覆盖对终端尺寸的自动检测
  • 指定 awk 解释器路径(默认:awk)
  • 指定 ping 工具路径(默认:ping)

查看帮助文档可以了解更多:

1
$ prettyping --help

尽管 Prettyping 没有添加任何额外功能,但我个人喜欢它的这些优点:

  • 实时统计 —— 可以随时查看所有实时统计信息,标准 ping 命令只会在命令执行结束后才显示统计信息。
  • 紧凑的显示 —— 可以在终端看到更长的时间跨度。
  • 检测丢失的数据包并显示出来。

如果你一直在寻找可视化显示 ping 命令输出的工具,那么 Prettyping 肯定会有所帮助。尝试一下,你不会失望的。


via: https://www.ostechnix.com/prettyping-make-the-output-of-ping-command-prettier-and-easier-to-read/

让你提高效率的 Linux 技巧

发表于 2018-09-29
字数统计: 1.8k | 阅读时长 ≈ 7

想要在 Linux 命令行工作中提高效率,你需要使用一些技巧。

巧妙的 Linux 命令行技巧能让你节省时间、避免出错,还能让你记住和复用各种复杂的命令,专注在需要做的事情本身,而不是你要怎么做。以下介绍一些好用的命令行技巧。

命令编辑

如果要对一个已输入的命令进行修改,可以使用 ^a(ctrl + a)或 ^e(ctrl + e)将光标快速移动到命令的开头或命令的末尾。

还可以使用 ^ 字符实现对上一个命令的文本替换并重新执行命令,例如 ^before^after^ 相当于把上一个命令中的 before 替换为 after 然后重新执行一次。

1
2
3
4
5
6
7
8
9
10
11
12
$ eho hello world  <== 错误的命令

Command 'eho' not found, did you mean:

command 'echo' from deb coreutils
command 'who' from deb coreutils

Try: sudo apt install <deb name>

$ ^e^ec^ <== 替换
echo hello world
hello world

使用远程机器的名称登录到机器上

如果使用命令行登录其它机器上,可以考虑添加别名。在别名中,可以填入需要登录的用户名(与本地系统上的用户名可能相同,也可能不同)以及远程机器的登录信息。例如使用 server_name ='ssh -v -l username IP-address' 这样的别名命令:

1
$ alias butterfly=”ssh -v -l jdoe 192.168.0.11”

也可以通过在 /etc/hosts 文件中添加记录或者在 DNS 服务器中加入解析记录来把 IP 地址替换成易记的机器名称。

执行 alias 命令可以列出机器上已有的别名。

1
2
3
4
5
6
7
8
9
10
11
12
$ alias
alias butterfly='ssh -v -l jdoe 192.168.0.11'
alias c='clear'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias list_repos='grep ^[^#] /etc/apt/sources.list /etc/apt/sources.list.d/*'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias show_dimensions='xdpyinfo | grep '\''dimensions:'\'''

只要将新的别名添加到 ~/.bashrc 或类似的文件中,就可以让别名在每次登录后都能立即生效。

冻结、解冻终端界面

^s(ctrl + s)将通过执行流量控制命令 XOFF 来停止终端输出内容,这会对 PuTTY 会话和桌面终端窗口产生影响。如果误输入了这个命令,可以使用 ^q(ctrl + q)让终端重新响应。所以只需要记住 ^q 这个组合键就可以了,毕竟这种情况并不多见。

复用命令

Linux 提供了很多让用户复用命令的方法,其核心是通过历史缓冲区收集执行过的命令。复用命令的最简单方法是输入 ! 然后接最近使用过的命令的开头字母;当然也可以按键盘上的向上箭头,直到看到要复用的命令,然后按回车键。还可以先使用 history 显示命令历史,然后输入 ! 后面再接命令历史记录中需要复用的命令旁边的数字。

1
2
3
!! <== 复用上一条命令
!ec <== 复用上一条以 “ec” 开头的命令
!76 <== 复用命令历史中的 76 号命令

查看日志文件并动态显示更新内容

使用形如 tail -f /var/log/syslog 的命令可以查看指定的日志文件,并动态显示文件中增加的内容,需要监控向日志文件中追加内容的的事件时相当有用。这个命令会输出文件内容的末尾部分,并逐渐显示新增的内容。

1
2
3
4
5
6
7
8
9
10
$ tail -f /var/log/auth.log
Sep 17 09:41:01 fly CRON[8071]: pam_unix(cron:session): session closed for user smmsp
Sep 17 09:45:01 fly CRON[8115]: pam_unix(cron:session): session opened for user root
Sep 17 09:45:01 fly CRON[8115]: pam_unix(cron:session): session closed for user root
Sep 17 09:47:00 fly sshd[8124]: Accepted password for shs from 192.168.0.22 port 47792
Sep 17 09:47:00 fly sshd[8124]: pam_unix(sshd:session): session opened for user shs by
Sep 17 09:47:00 fly systemd-logind[776]: New session 215 of user shs.
Sep 17 09:55:01 fly CRON[8208]: pam_unix(cron:session): session opened for user root
Sep 17 09:55:01 fly CRON[8208]: pam_unix(cron:session): session closed for user root
<== 等待显示追加的内容

寻求帮助

对于大多数 Linux 命令,都可以通过在输入命令后加上选项 --help 来获得这个命令的作用、用法以及它的一些相关信息。除了 man 命令之外, --help 选项可以让你在不使用所有扩展选项的情况下获取到所需要的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.

Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
-Z set SELinux security context of each created directory
to the default type
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
or SMACK security context to CTX
--help display this help and exit
--version output version information and exit

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

谨慎删除文件

如果要谨慎使用 rm 命令,可以为它设置一个别名,在删除文件之前需要进行确认才能删除。有些系统管理员会默认使用这个别名,对于这种情况,你可能需要看看下一个技巧。

1
$ rm -i    <== 请求确认

关闭别名

你可以使用 unalias 命令以交互方式禁用别名。它不会更改别名的配置,而仅仅是暂时禁用,直到下次登录或重新设置了这一个别名才会重新生效。

1
$ unalias rm

如果已经将 rm -i 默认设置为 rm 的别名,但你希望在删除文件之前不必进行确认,则可以将 unalias 命令放在一个启动文件(例如 ~/.bashrc)中。

使用 sudo

如果你经常在只有 root 用户才能执行的命令前忘记使用 sudo,这里有两个方法可以解决。一是利用命令历史记录,可以使用 sudo !!(使用 !! 来运行最近的命令,并在前面添加 sudo)来重复执行,二是设置一些附加了所需 sudo 的命令别名。

1
$ alias update=’sudo apt update’

更复杂的技巧

有时命令行技巧并不仅仅是一个别名。毕竟,别名能帮你做的只有替换命令以及增加一些命令参数,节省了输入的时间。但如果需要比别名更复杂功能,可以通过编写脚本、向 .bashrc 或其他启动文件添加函数来实现。例如,下面这个函数会在创建一个目录后进入到这个目录下。在设置完毕后,执行 source .bashrc,就可以使用 md temp 这样的命令来创建目录立即进入这个目录下。

1
md () { mkdir -p "$@" && cd "$1"; }

总结

使用 Linux 命令行是在 Linux 系统上工作最有效也最有趣的方法,但配合命令行技巧和巧妙的别名可以让你获得更好的体验。


via: https://www.networkworld.com/article/3305811/linux/linux-tricks-that-even-you-can-love.html

1…91011…17
HankChow

HankChow

84 日志
74 标签
0%
© 2019 HankChow | Site words total count: 111.3k