mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-28 23:20:10 +08:00
commit
d996228189
@ -1,180 +0,0 @@
|
||||
@penghuster is translating
|
||||
|
||||
Maneuvering around run levels on Linux
|
||||
============================================================
|
||||
|
||||
### Learn how run levels are configured and how you can change the run level interactively or modify what services are available.
|
||||
|
||||
![Maneuvering around run levels on Linux](https://images.idgesg.net/images/article/2017/09/run-levels-vincent_desjardins-100734685-large.jpg)
|
||||
[Vincent Desjardins][15] [(CC BY 2.0)][16]
|
||||
|
||||
|
||||
On Linux systems, run levels are operational levels that describe the state of the system with respect to what services are available.
|
||||
|
||||
One run level is restrictive and used only for maintenance; network connections will not be operational, but admins can log in through a console connection.
|
||||
|
||||
Others allow anyone to log in and work, but maybe with some differences in the available services. This post examines how run levels are configured and how you can change the run level interactively or modify what services are available.
|
||||
|
||||
The default run state on Linux systems — the one that will be used when the system starts up (unless instructed otherwise) — is usually configured in the **/etc/inittab** file, which generally looks something like this:
|
||||
|
||||
```
|
||||
id:3:initdefault:
|
||||
```
|
||||
|
||||
Some, including Debian systems, default to run state 2, rather than 3, and don’t generally have an /etc/inittab file at all.
|
||||
|
||||
How run levels are set up by default and how they are configured depends in part on the particular distribution you are running. On some systems, for example, run level 2 is multi-user, and run level 3 is multi-user with NFS (file system sharing) support. On others, run levels 2-5 are basically identical. Run level 1 is single-user mode. Run levels on Debian systems, for example, will default to this kind of setup:
|
||||
|
||||
Run levels on Debian systems default to this kind of setup:
|
||||
|
||||
```
|
||||
0 = halted
|
||||
1 = single user (maintenance mode)
|
||||
2 = multi-user mode
|
||||
3-5 = same as 2
|
||||
6 = reboot
|
||||
```
|
||||
|
||||
On Linux systems that use run level 3 to share file systems with other systems, it easy to start or stop file system sharing without changing anything about the system but the run level. Changing run level from 2 to 3 would allow the file systems to be shared. Changing the run level from 3 to 2 would disable sharing.
|
||||
|
||||
<aside class="nativo-promo tablet desktop" id="" style="overflow: hidden; margin-bottom: 16px; max-width: 620px;"></aside>
|
||||
|
||||
What processes are run in any run level depends on the contents of the /etc/rc?.d directory where ? might be 2, 3, 4, or 5 (corresponding to the run level).
|
||||
|
||||
On the system used in the example below (an Ubuntu system), we can see that the content of the directories for these four run states are all set up the same — because the configuration of the directories are the same.
|
||||
|
||||
```
|
||||
/etc/rc2.d$ ls
|
||||
README S20smartmontools S50saned S99grub-common
|
||||
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
|
||||
S20rsync S20sysstat S70pppd-dns S99rc.local
|
||||
/etc/rc2.d$ cd ../rc3.d
|
||||
/etc/rc3.d$ ls
|
||||
README S20smartmontools S50saned S99grub-common
|
||||
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
|
||||
S20rsync S20sysstat S70pppd-dns S99rc.local
|
||||
/etc/rc3.d$ cd ../rc4.d
|
||||
/etc/rc4.d$ ls
|
||||
README S20smartmontools S50saned S99grub-common
|
||||
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
|
||||
S20rsync S20sysstat S70pppd-dns S99rc.local
|
||||
/etc/rc4.d$ cd ../rc5.d
|
||||
/etc/rc5.d$ ls
|
||||
README S20smartmontools S50saned S99grub-common
|
||||
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
|
||||
S20rsync S20sysstat S70pppd-dns S99rc.local
|
||||
```
|
||||
|
||||
And what are these files? They’re all symbolic links that point to scripts in the /etc/init.d directory that start services. And the names of the files are important because they determine the order in which the scripts are run. For example, S20 scripts are run before S50 scripts.
|
||||
|
||||
```
|
||||
$ ls -l
|
||||
total 4
|
||||
-rw-r--r-- 1 root root 677 Feb 16 2016 README
|
||||
lrwxrwxrwx 1 root root 20 Aug 30 14:40 S20kerneloops -> ../init.d/kerneloops
|
||||
lrwxrwxrwx 1 root root 15 Aug 30 14:40 S20rsync -> ../init.d/rsync
|
||||
lrwxrwxrwx 1 root root 23 Aug 30 16:10 S20smartmontools -> ../init.d/smartmontools
|
||||
lrwxrwxrwx 1 root root 27 Aug 30 14:40 S20speech-dispatcher -> ../init.d/speech-dispatcher
|
||||
lrwxrwxrwx 1 root root 17 Aug 31 14:12 S20sysstat -> ../init.d/sysstat
|
||||
lrwxrwxrwx 1 root root 15 Aug 30 14:40 S50saned -> ../init.d/saned
|
||||
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S70dns-clean -> ../init.d/dns-clean
|
||||
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S70pppd-dns -> ../init.d/pppd-dns
|
||||
lrwxrwxrwx 1 root root 21 Aug 30 14:40 S99grub-common -> ../init.d/grub-common
|
||||
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S99ondemand -> ../init.d/ondemand
|
||||
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S99rc.local -> ../init.d/rc.local
|
||||
```
|
||||
|
||||
The /etc/rc1.d directory, as you’d probably suspect, is different because run level 1 is so different. It contains symbolic links that point to a very different set of scripts. Notice, too, that some of the symbolic links start with the letter K, while others start with the more normal S. This is because some services need to **_stop_** when a system enters single user mode. While some of these links point to the same scripts that are used in other run levels, the K (kill) indicates that these scripts will be run with an argument that instructs the services to stop rather than one that instructs them to start.
|
||||
|
||||
```
|
||||
/etc/rc1.d$ ls -l
|
||||
total 4
|
||||
lrwxrwxrwx 1 root root 20 Aug 30 14:40 K20kerneloops -> ../init.d/kerneloops
|
||||
lrwxrwxrwx 1 root root 15 Aug 30 14:40 K20rsync -> ../init.d/rsync
|
||||
lrwxrwxrwx 1 root root 15 Aug 30 14:40 K20saned -> ../init.d/saned
|
||||
lrwxrwxrwx 1 root root 23 Aug 30 16:10 K20smartmontools -> ../init.d/smartmontools
|
||||
lrwxrwxrwx 1 root root 27 Aug 30 14:40 K20speech-dispatcher -> ../init.d/speech-dispatcher
|
||||
-rw-r--r-- 1 root root 369 Mar 12 2014 README
|
||||
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S30killprocs -> ../init.d/killprocs
|
||||
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S70dns-clean -> ../init.d/dns-clean
|
||||
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S70pppd-dns -> ../init.d/pppd-dns
|
||||
lrwxrwxrwx 1 root root 16 Aug 30 14:40 S90single -> ../init.d/single
|
||||
```
|
||||
|
||||
You can change the default run level on a system, though there is rarely a need to do so. For example, you could configure a Debian system to default to a run level of 3 (rather than 2) by setting up an /etc/inittab file that looks, for example, like this one:
|
||||
|
||||
```
|
||||
id:3:initdefault:
|
||||
```
|
||||
|
||||
Once you make the change and reboot, the runlevel command would show you this:
|
||||
|
||||
```
|
||||
$ runlevel
|
||||
N 3
|
||||
```
|
||||
|
||||
Alternately, if you used the **init 3** command, you would also change run levels (rebooting is not required to change run states) and your runlevel output would look like this:
|
||||
|
||||
```
|
||||
$ runlevel
|
||||
2 3
|
||||
```
|
||||
|
||||
Of course, there’s little reason to change your default state by creating or modifying **/etc/inittab** unless you modify the symbolic links in the corresponding /etc/rc?.d directory to differentiate what will be running in the modified run state.
|
||||
|
||||
### How to use run levels on Linux
|
||||
|
||||
To recap, here's a quick Q&A on run levels:
|
||||
|
||||
#### How do you tell what run level you are in?
|
||||
|
||||
Use the **runlevel** command.
|
||||
|
||||
#### How do you see what processes are associated with a particular run level?
|
||||
|
||||
Look at the associated run level start directory (e.g., /etc/rc2.d for run level 2).
|
||||
|
||||
#### How do you know what the default run level is?
|
||||
|
||||
Check **/etc/inittab** if it exists. If not, just ask runlevel. You’re likely already in that run level.
|
||||
|
||||
#### How do you change run levels?
|
||||
|
||||
Use the **init** command (e.g., init 3) to change it temporarily. Modify or set up /etc/inittab to make a permanent change.
|
||||
|
||||
#### Can you change what services run in some particular run level?
|
||||
|
||||
Of course — by modifying the symbolic links in the associated /etc/rc?.d directory.
|
||||
|
||||
#### What else should you consider?
|
||||
|
||||
You should always exercise some caution when changing run levels on a Linux server to ensure that you’re not going to be affecting services that are currently in use or users who are logged in.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.networkworld.com/article/3222070/linux/maneuvering-around-run-levels-on-linux.html
|
||||
|
||||
作者:[Sandra Henry-Stocker][a]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.networkworld.com/author/Sandra-Henry_Stocker/
|
||||
[1]:https://www.networkworld.com/article/3218728/linux/how-log-rotation-works-with-logrotate.html
|
||||
[2]:https://www.networkworld.com/article/3219684/linux/half-a-dozen-clever-linux-command-line-tricks.html
|
||||
[3]:https://www.networkworld.com/article/3219736/linux/how-to-use-the-motd-file-to-get-linux-users-to-pay-attention.html
|
||||
[4]:https://www.networkworld.com/video/51206/solo-drone-has-linux-smarts-gopro-mount
|
||||
[5]:https://www.networkworld.com/article/3222828/home-tech/52-off-299-piece-all-purpose-first-aid-kit-deal-alert.html
|
||||
[6]:https://www.networkworld.com/article/3222847/mobile/save-a-whopping-100-on-amazon-echo-right-now-by-going-refurbished-deal-alert.html
|
||||
[7]:https://www.networkworld.com/article/3221348/mobile/35-off-etekcity-smart-plug-2-pack-energy-monitoring-and-alexa-compatible-deal-alert.html
|
||||
[8]:https://www.networkworld.com/article/3218728/linux/how-log-rotation-works-with-logrotate.html
|
||||
[9]:https://www.networkworld.com/article/3219684/linux/half-a-dozen-clever-linux-command-line-tricks.html
|
||||
[10]:https://www.networkworld.com/article/3219736/linux/how-to-use-the-motd-file-to-get-linux-users-to-pay-attention.html
|
||||
[11]:https://www.networkworld.com/video/51206/solo-drone-has-linux-smarts-gopro-mount
|
||||
[12]:https://www.networkworld.com/video/51206/solo-drone-has-linux-smarts-gopro-mount
|
||||
[13]:https://www.networkworld.com/article/3222847/mobile/save-a-whopping-100-on-amazon-echo-right-now-by-going-refurbished-deal-alert.html
|
||||
[14]:https://www.networkworld.com/article/3221348/mobile/35-off-etekcity-smart-plug-2-pack-energy-monitoring-and-alexa-compatible-deal-alert.html
|
||||
[15]:https://www.flickr.com/photos/endymion120/4824696883/in/photolist-8mkQi2-8vtyRx-8vvYZS-i31xQj-4TXTS2-S7VRNC-azimYK-dW8cYu-Sb5b7S-S7VRES-fpSVvo-61Zpn8-WxFwGi-UKKq3x-q6NSnC-8vsBLr-S3CPxn-qJUrLr-nDnpNu-8d7a6Q-T7mGpN-RE26wj-SeEXRa-5mZ7LG-Vp7t83-fEG5HS-Vp7sU7-6JpNBi-RCuR8P-qLzCL5-6WsfZx-5nU1tF-6ieGFi-3P5xwh-8mnxpo-hBXwSj-i3iCur-9dmrST-6bXk8d-8vtDb4-i2KLwU-5jhfU6-8vwbrN-ShAtNm-XgzXmb-8rad18-VfXm4L-8tQTrh-Vp7tcb-UceVDB
|
||||
[16]:https://creativecommons.org/licenses/by/2.0/legalcode
|
@ -0,0 +1,141 @@
|
||||
操作 Linux 的运行级别
|
||||
=====
|
||||
#### 了解运行级别是如何配置, 如何改变系统运行级别以及修改对应状态下运行的服务.
|
||||
|
||||
![操作 Linux 的运行级别](https://images.idgesg.net/images/article/2017/09/run-levels-vincent_desjardins-100734685-large.jpg)
|
||||
[Vincent Desjardins][15] [(CC BY 2.0)][16]
|
||||
|
||||
在 Linux 系统中, 运行级别是可操作的, 该级别用于描述一种系统运行状态, 在该状态下哪些服务是有效的.
|
||||
|
||||
运行级别 1 是严格限制的, 仅仅用于系统维护; 该级别下, 网络连接将不可操作, 但是管理员可以通过一个控制台连接登录系统.
|
||||
|
||||
其他运行级别的系统允许任何人登录和使用, 但是不同级别中可使用的服务不同. 本文将探索如何配置运行级别, 如何改变系统运行级别以及修改对状态下运行的服务.
|
||||
|
||||
Linux 系统的默认的运行状态通常是在 **/etc/inittab** 文件(除非有其他的指示, 否则该文件将在系统启动时被使用. )中进行配置的, 该文件内容通常如下:
|
||||
```id:3:initdefault```
|
||||
一些系统, 包括 Debian 系统, 默认运行级别为 2, 而不是上述文件中的 3, 另外少数系统甚至都没有 **/etc/inittab** 文件.
|
||||
|
||||
运行级别在默认情况下是如何被配置, 其配置依赖于你所运行的 Linux 操作系统的具体发行版本. 例如, 在部分系统中, 运行级别 2 是多用户模式, 运行级别 3 是多用户模式并支持 NFS (网络文件系统). 在其他系统, 运行级别 2 - 5 基本相同, 运行级别 1 是单用户模式. 例如, Debian 系统的所用运行级别如下:
|
||||
```
|
||||
0 = halted
|
||||
1 = single user (maintenance mode)
|
||||
2 = multi-user mode
|
||||
3-5 = same as 2
|
||||
6 = reboot
|
||||
```
|
||||
在 Linux 系统上, 运行级别 3 支持系统间共享文件的共享文件系统, 可以方便地通过改变系统的运行级别来改变系统支持共享文件系统
|
||||
与否. 系统从运行级别 2 改变到 3 系统将允许文件系统共享, 反之从运行级别 3 改变到 2 则系统不支持文件共享.
|
||||
|
||||
在对应的运行级别中, 系统运行哪些进程依赖于目录 **/etc/rc?.d** 目录的内容, 其中 "?" 可能是 2, 3, 4 或 5 (对应于相应的运行级别).
|
||||
|
||||
在以下示例中的 Ubuntu 系统中, 由于这些目录的配置是相同的, 我们将看见上述 4 个级别对应的目录中的内容是一致的.
|
||||
```
|
||||
/etc/rc2.d$ ls
|
||||
README S20smartmontools S50saned S99grub-common
|
||||
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
|
||||
S20rsync S20sysstat S70pppd-dns S99rc.local
|
||||
/etc/rc2.d$ cd ../rc3.d
|
||||
/etc/rc3.d$ ls
|
||||
README S20smartmontools S50saned S99grub-common
|
||||
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
|
||||
S20rsync S20sysstat S70pppd-dns S99rc.local
|
||||
/etc/rc3.d$ cd ../rc4.d
|
||||
/etc/rc4.d$ ls
|
||||
README S20smartmontools S50saned S99grub-common
|
||||
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
|
||||
S20rsync S20sysstat S70pppd-dns S99rc.local
|
||||
/etc/rc4.d$ cd ../rc5.d
|
||||
/etc/rc5.d$ ls
|
||||
README S20smartmontools S50saned S99grub-common
|
||||
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
|
||||
S20rsync S20sysstat S70pppd-dns S99rc.local
|
||||
```
|
||||
这些都是什么文件? 他们都是指向 **/etc/init.d** 目录下启动服务的符号连接. 这些文件的文件名是重要的, 因为他们决定了这些脚本文件的执行顺序, 例如, S20 脚本是在 S50 脚本前面运行.
|
||||
```
|
||||
$ ls -l
|
||||
total 4
|
||||
-rw-r--r-- 1 root root 677 Feb 16 2016 README
|
||||
lrwxrwxrwx 1 root root 20 Aug 30 14:40 S20kerneloops -> ../init.d/kerneloops
|
||||
lrwxrwxrwx 1 root root 15 Aug 30 14:40 S20rsync -> ../init.d/rsync
|
||||
lrwxrwxrwx 1 root root 23 Aug 30 16:10 S20smartmontools -> ../init.d/smartmontools
|
||||
lrwxrwxrwx 1 root root 27 Aug 30 14:40 S20speech-dispatcher -> ../init.d/speech-dispatcher
|
||||
lrwxrwxrwx 1 root root 17 Aug 31 14:12 S20sysstat -> ../init.d/sysstat
|
||||
lrwxrwxrwx 1 root root 15 Aug 30 14:40 S50saned -> ../init.d/saned
|
||||
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S70dns-clean -> ../init.d/dns-clean
|
||||
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S70pppd-dns -> ../init.d/pppd-dns
|
||||
lrwxrwxrwx 1 root root 21 Aug 30 14:40 S99grub-common -> ../init.d/grub-common
|
||||
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S99ondemand -> ../init.d/ondemand
|
||||
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S99rc.local -> ../init.d/rc.local
|
||||
```
|
||||
如你所想, 目录 **/etc/rc1.d** 因运行级别 1 的特殊而不同. 它包含的符号链接指向许多不同的脚本集合. 同样也将注意到其中一些脚本以 K开头命名, 而另一些与其他运行级别脚本一样以 S 开头命名.这是因为当系统进入单用户模式时, 一些服务需要**停止**. 然而这些 K 开头的符号链接与其他级别对应的 S 开头的符号链接两者指向同一文件. K (kill) 表示这个脚本将执行停止对应服务的命令而不是启动.
|
||||
```
|
||||
/etc/rc1.d$ ls -l
|
||||
total 4
|
||||
lrwxrwxrwx 1 root root 20 Aug 30 14:40 K20kerneloops -> ../init.d/kerneloops
|
||||
lrwxrwxrwx 1 root root 15 Aug 30 14:40 K20rsync -> ../init.d/rsync
|
||||
lrwxrwxrwx 1 root root 15 Aug 30 14:40 K20saned -> ../init.d/saned
|
||||
lrwxrwxrwx 1 root root 23 Aug 30 16:10 K20smartmontools -> ../init.d/smartmontools
|
||||
lrwxrwxrwx 1 root root 27 Aug 30 14:40 K20speech-dispatcher -> ../init.d/speech-dispatcher
|
||||
-rw-r--r-- 1 root root 369 Mar 12 2014 README
|
||||
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S30killprocs -> ../init.d/killprocs
|
||||
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S70dns-clean -> ../init.d/dns-clean
|
||||
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S70pppd-dns -> ../init.d/pppd-dns
|
||||
lrwxrwxrwx 1 root root 16 Aug 30 14:40 S90single -> ../init.d/single
|
||||
```
|
||||
你可以改变系统的默认运行级别, 尽管这很少被用到. 例如, 通过修改前文中提到的 **/etc/inittab** 文件, 你能够配置 Debian 系统的默认运行级别为3 (替代 2), 以下是该文件示例:
|
||||
```id:3:initdefault:```
|
||||
一旦你修改完成并重启系统, 执行运行级别命令将显示如下:
|
||||
```
|
||||
$ runlevel
|
||||
N 3
|
||||
```
|
||||
另外一种可选方式, 使用 **init 3** 命令, 你也能改变系统运行级别(且无需重启立即生效), 另外 **runlevel** 命令的打印输出为:
|
||||
```
|
||||
$ runlevel
|
||||
2 3
|
||||
```
|
||||
当然, 除非你修改了系统默认级别的 **/etc/rc?.d** 目录下的符号链接, 使得系统默认运行在一个修改的运行级别之下. 否则很少需要通过创建或修改 **/etc/inittab** 文件改变系统的运行级别.
|
||||
|
||||
### 在 Linux 系统中如何使用运行级别?
|
||||
为了扼要重述在系统中如何使用运行级别. 下面有几个关于运行级别的快速问答问题:
|
||||
#### 如何查询系统当前的运行级别?
|
||||
使用 **runlevel** 命令.
|
||||
#### 如何查看特定运行级别所关联的服务进程?
|
||||
查看与该运行级别关联的运行级别开始目录(例如, /etc/rc2.d 对应于运行级别 2).
|
||||
#### 如何查看系统的默认运行级别?
|
||||
首先, 查看 **/etc/inittab** 文件是否存在. 如果不存在, 就执行 **runlevel** 命令查询.
|
||||
|
||||
#### 如何改变系统运行级别?
|
||||
用 **init** 命令(例如, init 3) 临时改变运行级别, 通过修改或创建 /etc/inittab 文件永久改变其运行级别.
|
||||
#### 你能改变特定运行级别下运行的服务么?
|
||||
当然, 通过改变对应的 /etc/rc?.d 目录下的符号连接即可.
|
||||
#### 还有一些其他的什么需要考虑?
|
||||
当改变系统运行级别时, 你应该特别小心, 确保不影响到系统上正在运行的服务或者正在使用的用户.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.networkworld.com/article/3222070/linux/maneuvering-around-run-levels-on-linux.html
|
||||
|
||||
作者:[Sandra Henry-Stocker][a]
|
||||
译者:[penghuster](https://github.com/penghuster)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.networkworld.com/author/Sandra-Henry_Stocker/
|
||||
[1]:https://www.networkworld.com/article/3218728/linux/how-log-rotation-works-with-logrotate.html
|
||||
[2]:https://www.networkworld.com/article/3219684/linux/half-a-dozen-clever-linux-command-line-tricks.html
|
||||
[3]:https://www.networkworld.com/article/3219736/linux/how-to-use-the-motd-file-to-get-linux-users-to-pay-attention.html
|
||||
[4]:https://www.networkworld.com/video/51206/solo-drone-has-linux-smarts-gopro-mount
|
||||
[5]:https://www.networkworld.com/article/3222828/home-tech/52-off-299-piece-all-purpose-first-aid-kit-deal-alert.html
|
||||
[6]:https://www.networkworld.com/article/3222847/mobile/save-a-whopping-100-on-amazon-echo-right-now-by-going-refurbished-deal-alert.html
|
||||
[7]:https://www.networkworld.com/article/3221348/mobile/35-off-etekcity-smart-plug-2-pack-energy-monitoring-and-alexa-compatible-deal-alert.html
|
||||
[8]:https://www.networkworld.com/article/3218728/linux/how-log-rotation-works-with-logrotate.html
|
||||
[9]:https://www.networkworld.com/article/3219684/linux/half-a-dozen-clever-linux-command-line-tricks.html
|
||||
[10]:https://www.networkworld.com/article/3219736/linux/how-to-use-the-motd-file-to-get-linux-users-to-pay-attention.html
|
||||
[11]:https://www.networkworld.com/video/51206/solo-drone-has-linux-smarts-gopro-mount
|
||||
[12]:https://www.networkworld.com/video/51206/solo-drone-has-linux-smarts-gopro-mount
|
||||
[13]:https://www.networkworld.com/article/3222847/mobile/save-a-whopping-100-on-amazon-echo-right-now-by-going-refurbished-deal-alert.html
|
||||
[14]:https://www.networkworld.com/article/3221348/mobile/35-off-etekcity-smart-plug-2-pack-energy-monitoring-and-alexa-compatible-deal-alert.html
|
||||
[15]:https://www.flickr.com/photos/endymion120/4824696883/in/photolist-8mkQi2-8vtyRx-8vvYZS-i31xQj-4TXTS2-S7VRNC-azimYK-dW8cYu-Sb5b7S-S7VRES-fpSVvo-61Zpn8-WxFwGi-UKKq3x-q6NSnC-8vsBLr-S3CPxn-qJUrLr-nDnpNu-8d7a6Q-T7mGpN-RE26wj-SeEXRa-5mZ7LG-Vp7t83-fEG5HS-Vp7sU7-6JpNBi-RCuR8P-qLzCL5-6WsfZx-5nU1tF-6ieGFi-3P5xwh-8mnxpo-hBXwSj-i3iCur-9dmrST-6bXk8d-8vtDb4-i2KLwU-5jhfU6-8vwbrN-ShAtNm-XgzXmb-8rad18-VfXm4L-8tQTrh-Vp7tcb-UceVDB
|
||||
[16]:https://creativecommons.org/licenses/by/2.0/legalcode
|
Loading…
Reference in New Issue
Block a user