wake on lan – 网络唤醒电脑

1. 主板上开启

这里使用的是微星主板

  1. 高级–整合周边设备–网卡ROM启动,设置为允许
  2. 高级–电源管理设置–Erp ,设置为禁止
  3. 高级–唤醒事件设置–PCIE设备唤醒,设置为允许

2 检查主机板块和网卡是否支持Wol

检查主板是否支持

sudo apt install ethtool -y  (-y 参数是如果出现询问 默认 y)
sudo ethtool eth40ss  (eth40ss 指你的网卡可以用 ip a 或者ifconfig 查看)

如果出现一下信息, 则通过

Supports Wake-on: pumbg

Wake-on: g

如果没有则需要开启

sudo ethtool –change enp4s0 wol g

3. ubuntu 20.04设置

which ethtool # 查看命令源 我的是/usr/sbin/ethtool
  1. 设置开机启动启动 wol 服务,新建服务
sudo vim /etc/systemd/system/wol.service

编辑内容如下

[Unit]
Description=Configure Wake On Lan

[Service]
Type=oneshot
ExecStart=/sbin/ethtool --change enp43s0 wol g


[Install]
WantedBy=basic.target

启用服务

#To enable it you can do this:

sudo systemctl daemon-reload
sudo systemctl enable wol.service
sudo systemctl start wol.service
#查看设置状态
systemctl status wol

2.使用netplan 永久自动开发方法

需要添加mac 地址

network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
      match:
        macaddress: 50:e5:49:b3:fc:97
      dhcp4: true
      wakeonlan: true

4. 关闭服务器, 本地使用 命令 启动服务器

唤起远程服务端的客户端上需要安装

Command-line tools

unbuntu 可以安装

sudo apt install wakeonlan

wakeonlan mac地址 #唤醒电脑

mac python脚本 wol.py

#!/usr/bin/env python

import socket
import sys

if len(sys.argv) < 3:
    print "Usage: wakeonlan.py <ADR> <MAC>     (example: 192.168.1.255 00:11:22:33:44:55)"
    sys.exit(1)

mac = sys.argv[2]
data = ''.join(['FF' * 6, mac.replace(':', '') * 16])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(data.decode("hex"), (sys.argv[1], 9))
python wol.py 192.168.1.255 00:11:22:33:44:55

在路由上安装

opkg install etherwake

如果你的路由是主路由,那么要设置广播的网关段,而小米的网络段是192.168.31.255:
/usr/bin/etherwake -D -i 'lan' "D8:BB:C1:4F:E5:12" 2>&1

如果你的路由是旁路由
wakeonlan -i mac地址

这样通过zerotier远程连接路由器SSH,然后通过命令就可以开启局域网中的指定电脑。

route 操作

Mac

查询可用的路由出口(网卡)

networksetup -listallnetworkservices
1.Wi-Fi
2.AX88x72A

查询指定路由出口(网卡)的路由表配置

networksetup -getadditionalroutes Wi-Fi

router 命令

add 增加路由

del 删除路由

-net 设置到某个网段的路由

-host 设置到某台主机的路由

-netmask :与网域有关,可以设定 netmask 决定网域的大小;

gw 出口网关 IP地址

dev 出口网关 物理设备名 则使用这个设定,后面接 eth0 等

linux: sudo route add –net 192.168.1.0/24 gw 10.0.0.129 

Mac: sudo route -n add -net 192.168.0.0 -netmask 255.255.255.0 192.168.5.254

linux 磁盘操作 dd 和 fdisk gdisk diskutil 命令

dd 命令用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

  1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
  2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
  3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。
  4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
  5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
  6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
    注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
  7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
  8. conv=conversion:用指定的参数转换文件。
dd if=/dev/hdb of=/dev/hdd

备份与恢复MBR

dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分

备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径

dd if=/dev/hdb | gzip > /root/image.gz

将压缩的备份文件恢复到指定盘

gzip -dc /root/image.gz | dd of=/dev/hdb

增加swap分区文件大小

dd if=/dev/zero of=/swapfile bs=1024 count=262144

diskutil mac 磁盘工具

diskutil eraseDisk <format> <name> [APM|MBR|GPT] MountPoint|DiskIdentifier|DeviceNode
diskutil eraseDisk MS-DOS "WINDOWS10" MBR disk2

写入 
cp -rp /Volumes/CCCOMA_X64FRE_ZH-CN_DV9/* /Volumes/WINDOWS10/

Linux 开机自启

修改 /etc/rc.local 文件,添加启动服务的命令

先写好启动脚本或者启动命令,事先保证启动脚本或命令能正常启动服务,然后将脚本路径或启动命令添加至/etc/rc.local文件中,这个方法适合比较简单的shell脚本,比较方便,具体看最后的本次解决方案。

把可执行程序注册为系统服务,并设定级别的自启动

1. 注册系统服务

我想使用”service xxxx start”这样的简短命令来管理,就必须注册成为系统服务,那就是在目录 /etc/init.d/ 下,新建一个以服务名为文件名的文件。

如果打开目录 /etc/init.d/,看到的文件其实都是服务程序文件,每个文件的内容都大同小异,这里的文件在文件结构上几乎是一样的。几乎每个文件都有 start、stop、restart和status这样的标志,对,我们新建的这个文件也必须具有相同的结构,即可以接受start和stop参数并完成相应的操作。可以这么理解:

service httpd 等价 /etc/rc.d/init.d/httpd
service httpd start 等价 /etc/rc.d/init.d/httpd  start
service httpd stop 等价 /etc/rc.d/init.d/httpd  stop

所以/etc/init.d/下的这个脚本一般都会有start、stop等方法。这里可以参考mysql公司提供的写好的mysqld,所以我们装mysql的时候一般都会cp mysql.server /etc/init.d/mysql

2. 设定级别的自启动(这里又有两种方式:ln -s软连接和chkconfig)

ln -s软连接:

 在 Linux 中有 7 种运行级别(可在 /etc/inittab 文件设置),每种运行级别分别对应着 /etc/rc[0~6].d 这 7个目录。这 7个目录中,每个目录分别存放着对应运行级别加载时需要关闭或启动的服务,如下图 rc3.d 目录所示,其实每个脚本文件都对应着 /etc/init.d/ 目录下具体的服务,K 开头的脚本文件代表运行级别加载时需要关闭的,S 开头的代表需要执行启动的。

格式:ln -s 目标文件名 连接文件名
例子:cd /etc/rc3.d/
ln -s ../init.d/hdz_service  ./S99hdz_service

连接文件名采用“SXX目标文件名”的格式,其中XX一般是一个从1到100的整数,它表示启动优先级,数字越大,优先级越低,比如:服务A的运行要依赖服务B,那A的XX数字就应该大于B的。后跟“目标文件名”是为了一目了然,一看就知道是哪个文件的符号连接。
  目录 /etc/rc3.d/ 是系统启动时自动搜索的目录,该目录下的符号连接文件的目标文件,都将被运行,这就是在这个目录建立符号连接的原因——为了开机就运行。

Chkconfig命令添加管理服务:

  Ps: 服务管理,centos是chkconfig,ubuntu是update-rc.d

1 查看是否已经注册为服务,查看命令:chkconfig –list mysqld(以 mysqld 为例)

通过命令没有查看到,说明还没有添加到启动服务,通过命令 chkconfig –add mysqld添加即可。

2.给服务可执行的权限:

# chmod 755 mysqld 

3.如果需要自启动某些服务,只需使用命令chkconfig <服务名> on 即可,若想关闭,将 on 改为 off。

chkconfig mysqld on

  在默认情况下,chkconfig 会自启动 2345 这四个级别,如果想自定义启动级别可以加上 –leve l选项,后边跟指定的启动级别。

  示例:先将 mysqld 服务的所有启动级别关闭,然后使用 –level选项启动自定义级别。

chkconfig --level 2345 mysqld off   #关闭2345级别启动。

makefile

已上的步骤比较麻烦,能否把这几个步骤自动化一下?这样在一台新机子上部署就方便了。还记得我们那个记录代码文件之间依赖关系的makefile文件吗?我们在这里要用到它了。
  在makefile文件中添加一个标志,并在该标志下添加和下面类似的代码:

install:
 cp ./hdz_pro /usr/sbin/
 cp ./hdz_service /etc/init.d/
 cd /etc/init.d/
 chmod +x hdz_service
 cd /etc/rc3.d/
 ln -sf ../init.d/hdz_service ./S99hdz_service

在标志install下的没一句话,前面一定要留空白,这不仅是有利于阅读,更是一个要求,makefile文件要求每一句可执行语句前都要有空白(空格或tab)。

上面代码中的 hdz_pro 和 hdz_service 分别是可执行文件名和服务名,这两个名称换成你自己的就行了,操作时用以下命令: make install  运行完就一切OK了。

开机启动 (第一种)

1.新建一个脚本,如/home/server/middleware.sh,

#/bin/bash
export JAVA_HOME=/home/dev/jdk/jdk1.8.0_20
export PATH=$PATH:$JAVA_HOME/bin
nohup java -jar /home/server/12301.jar --spring.profiles.active=pressure >> /home/server/nohup.out 2>&1 &

注意两点

  • 有一个nohup: failed to run command ‘java’: No such file or directory的错误就是因为没有导入java的环境变量,所以前两行一定需要。
  •  脚本中一定要用绝对路径,之前写的>> ./nohup.out,就是一个坑,因为开机启动的时候根本没有当前路径。  

2.执行如下命令,将该脚本标记为可执行文件(添加可执行的权限)

 chmod +x /home/server/middleware.sh

3.修改 /etc/rc.local 文件,添加启动服务的命令

#vim /etc/rc.local 

在最后添加 下面语句
/bin/bash /home/server/middleware.sh

4.这样, middleware.sh这个脚本在开机的时候就会被执行了,以后再这里面写启动服务的命令就可以了

总结下,修改 /etc/rc.local 文件的方法一般适用于简单的shell脚本,注册为系统服务(/etc/init.d/)的方法适用于官方就有脚本提供(如mysqld,httpd),或实在有自写服务脚本的需要。

curl

参数 描述
-I/–head 只显示传输文档,经常用于测试连接本身
-o/–output 把输出写到该文件中,必须输入保存文件名
-O/–remote-name 把输出写到该文件中,保留远程文件的文件名
-F/–form 模拟表单提交
-s/–silent 静默模式,不输出任何东西
-S/–show-error 显示错误,在选项 -s 中,当 curl 出现错误时将显示
-L/–location 跟踪重定向
-f/–fail 不输出错误
-n/–netrc 从netrc文件中读取用户名和密码
–netrc-optional 使用 .netrc 或者 URL来覆盖-n
–ntlm 使用 HTTP NTLM 身份验证
-N/–no-buffer 禁用缓冲输出
-p/–proxytunnel 使用HTTP代理
–proxy-anyauth 选择任一代理身份验证方法
–proxy-basic 在代理上使用基本身份验证
–proxy-digest 在代理上使用数字身份验证
–proxy-ntlm 在代理上使用ntlm身份验证
-P/–ftp-port 使用端口地址,而不是使用PASV
-M/–manual 显示全手动
-Q/–quote 文件传输前,发送命令到服务器
-r/–range 检索来自HTTP/1.1或FTP服务器字节范围
–range-file 读取(SSL)的随机文件
-R/–remote-time 在本地生成文件时,保留远程文件时间
–retry 传输出现问题时,重试的次数
–retry-delay 传输出现问题时,设置重试间隔时间
–retry-max-time 传输出现问题时,设置最大重试时间
–socks4 用socks4代理给定主机和端口
–socks5 用socks5代理给定主机和端口
-t/–telnet-option Telnet选项设置
–trace 对指定文件进行debug
–trace-ascii Like 跟踪但没有hex输出
–trace-time 跟踪/ 详细输出时,添加时间戳
-T/–upload-file 上传文件
-u/–user 设置服务器的用户和密码
-U/–proxy-user 设置代理用户名和密码
-V/–version 显示版本信息
-w/–write-out [format] 什么输出完成后
-x/–proxy 在给定的端口上使用HTTP代理
-X/–request 指定什么命令
-y/–speed-time 放弃限速所要的时间。默认为30
-Y/–speed-limit 停止传输速度的限制,速度时间’秒
-z/–time-cond 传送时间设置
-0/–http1.0 使用HTTP 1.0
-1/–tlsv1 使用TLSv1(SSL)
-2/–sslv2 使用SSLv2的(SSL)
-3/–sslv3 使用的SSLv3(SSL)
–3p-quote like -Q for the source URL for 3rd party transfer
–3p-url 使用url,进行第三方传送
–3p-user 使用用户名和密码,进行第三方传送
-4/–ipv4 使用IP4
-6/–ipv6 使用IP6
-#/–progress-bar 用进度条显示当前的传送状态

linux 启动项

(1)编辑文件 /etc/rc.local

/etc/init.d/memcached start #memcache开机启动

#在文件末尾(exit 0之前)加上你开机需要启动的程序或执行的命令即可(执行的程序需要写绝对路径,添加到系统环境变量的除外)如:/usr/local/thttpd/sbin/thttpd  -C /usr/local/thttpd/etc/thttpd.conf

(2)chkconfig

第1步:把上面的脚本放在/etc/init.d/文件夹下。

vim 启动文件,文件前面务必添加如下三行代码,否侧会提示chkconfig不支持

#!/bin/sh 告诉系统使用的shell,所以的shell脚本都是这样
#chkconfig: 35 20 80 分别代表运行级别,启动优先权,关闭优先权,此行代码必须
#description: http server(自己随便发挥)//两行都注释掉!!!,此行代码必须

ln -s ./supervisord  /etc/init.d/supervisord

第2步:将启动脚本权限改为可执行。

chmod a+x /etc/init.d/supervisord

第3步:添加启动项。

chkconfig --add supervisord
chkconfig supervisord on

第4步:检查是否设置成功。

chkconfig --list | grep supervisord
supervisord     0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭

cerbot 使用Certbot获取免费泛域名

所以目前我需求就是获取nginx上使用的.pem.key两个文件.

安装cerbot,并使用

获取泛域名文档  看他的泛域名文档,以下是安装总结

1. 使用snap 安装certbot,关于snapd 包管理,可以到网上查看

ubuntu 已经自带snap, 使用时只要更新命令更新 sudo snap install core; sudo snap refresh core

2. 安装 certbot

安装前先删除 原来的安装的certbot , sudo apt remove certbot

执行安装命令 sudo snap install –classic certbot

把certbot命令添加到全局 sudo ln -s /snap/bin/certbot /usr/bin/certbot

3. 获取证书 ,泛域名 要使用下面的泛域名生成方法

sudo certbot certonly –nginx

4 在nginx 配置关联证书

ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem;

5. 自动更新证书

它到期之前自动更新您的证书,除非你修改配置,更新证书的配置在 /etc/letsencrypt/renewal/下面

sudo certbot renew --dry-run # 测试自动更新是否可用

The command to renew certbot is installed in one of the following locations:
/etc/crontab/
/etc/cron.*/*
systemctl list-timers

challenge 关于证书获取的简单介绍

Let’s Encrypt需要验证网站的所有权才能颁发证书, 官方称之为challenge(挑战).
在网站上的指定位置发布指定文件(HTTP-01)

当使用Webroot插件或手动插件时,请确保webroot目录存在并且您正确指定它。如果您为example.com设置了webroot目录,/var/www/example.com 那么放置的文件/var/www/example.com/.well-known/acme-challenge/testfile应该出现在您的网站上http://example.com/.well-known/acme-challenge/testfile(此处重定向到HTTPS是可以的,并且不应该阻止工作中的挑战)

sudo certbot certonly --standalone --email 'zbysir@qq.com' -d 'bysir.com'

standalone 就是独立插件, 它需要绑定80端口, 所以先关掉机器上的80端口吧, 或者换一台主机安装.
不出意外的话, 会死在Waiting for verification…,

可以看到他会请求 http://bysir.store/.well-known/acme-challenge/r9NH9hle6_7L9avkG-ID6A1BI4h4IgFVn6nx3VQZRpI以认证网站.
location ~ “^/\.well-known/acme-challenge/(.*)$” {
default_type text/plain;
return 200 “$1.IL3bE2eqHDs1k0Lmxm63CXpLvzmosMuUDIywEIBTPnG”;
}

  • 在网站上提供指定的临时证书(TLS-SNI-01)
  • 在域名系统中发布指定的DNS记录(DNS-01)

泛域名证书

certbot certonly --preferred-challenges dns --manual -d *.mydomain.com --server https://acme-v02.api.letsencrypt.org/directory

–preferred-challenges dns: 认证方式选择DNS, 泛域名支持DNS
–manual: 手动模式, 这里为了简单就使用手动认证了, 下面会说自动模式的使用.
-d *.mydomain.com: 就是要申请的泛域名了
–server https://acme-v02.api.letsencrypt.org/directory: 泛域名证书是新功能, 如果要使用就得加上这个参数

注意这一步 命令里会有提示,需要手动配置TXT记录, 在域名解析服务商添加一个泛解析就可以了, 设置好了再敲下回车.

泛域名证书docker 方法 (不推荐)

sudo docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot certonly -d *.mical.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

根据提示 在域名供应商里添加txt 记录

dig -t txt _acme-challenge.michnal.com

再次更新

docker run -it --rm --name certbot
-v "/etc/letsencrypt:/etc/letsencrypt"
-v "/var/lib/letsencrypt:/var/lib/letsencrypt"
certbot/certbot certonly --manual -d '*.michan.cn'

泛域名证书-插件方法认证域名(推荐)

此法就不需要手动在 dns 服务器商那里 添加txt 记录了

以下用 cloudflare  dns 服务器 ,除了 第三步不一样,其他都一样

https://certbot-dns-cloudflare.readthedocs.io/en/stable/index.html#welcome-to-certbot-dns-cloudflare-s-documentation

  1. 安装dns plugin  这里要安装cloudflare 版的,
  2. 然后到cloudflare 控制台  创建 token ,设置token权限: The Token needed by Certbot requires Zone:DNS:Edit permissions for only the zones you need certificates for.
  3. 然后把token  放到自己创建 cloudfare.ini 文件里, 文件权限 chmod 600
# Cloudflare API token used by Certbot
dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567

下面是命令 执行

这里接安装cerbot 的第二步

sudo snap set certbot trust-plugin-with-root=ok # 确认插件包含级别

sudo snap install certbot-dns-cloudflare # 安装插件, 不同的dns 服务商,不同的插件这是是cloudflare 

sudo mkdir /home/.secrets/  
sudo chmod 700 /home/.secrets/ 
sudo vim /home/.secrets/certbot_cloudflare.ini 
# 輸入: dns_cloudflare_api_token = xxxxtokenxxx 
# 在cloudflare上開token,權限 Zone:Zone:Read, Zone:DNS:Edit for all zones 

sudo chmod 600 ~/.secrets/cloudflare.ini 
sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /home/wei/.secrets/certbot_cloudflare.ini \
  -d xmetal.cc,*.xmetal.cc

linux 各个文件夹用途

/boot  引导程序,内核等存放的目录

 

/sbin  超级用户可以使用的命令的存放目录

存放大多涉及系统管理的命令(例如引导系统的init程序,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令(但是有时普通用户也可能会用到。)我们要记住,凡是目录sbin中包含的都是root权限才能执行的。

/bin  普通用户可以使用的命令的存放目录
系统所需要的那些命令位于此目录,比如ls、cp、mkdir等命令;类似的目录还/usr/bin,/usr/local/bin等等。这个目录中的文件都是可执行的、普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就是放在这里。

/lib  根目录下的所程序的共享库目录
此目录下包含系统引导和在根用户执行命令时候所必需用到的共享库。做个不太好但是比较形象的比喻,点类似于Windows上面的system32目录。理说,这里存放的文件应该是/bin目录下程序所需要的库文件的存放地,也不排除一些例外的情况。类似的目录还/usr/lib,/usr/local/lib等等。

/dev 设备文件目录
在Linux中设备都是以文件形式出现,这里的设备可以是硬盘,键盘,鼠标,网卡,终端,等设备,通过访问这些文件可以访问到相应的设备。设备文件可以使用mknod命令来创建;而为了将对这些设备文件的访问转化为对设备的访问,需要向相应的设备提供设备驱动模块(一般将设备驱动编译之后,生成的结果是一个*.ko类型的二进制文件,在内核启动之后,再通过insmod等命令加载相应的设备驱动之后,我们就可以通过设备文件来访问设备了。一般来说,想要Linux系统支持某个设备,需要 相应的硬件设备,支持硬件的驱动模块,以及相应的设备文件。

/root  用户root的$HOME目录
系统管理员(就是root用户或超级用户)的主目录比较特殊,不存放在/home中,而是直接放在/root目录下了。

/etc 全局的配置文件存放目录。
系统和程序一般都可以通过修改相应的配置文件,来进行配置。例如,要配置系统开机的时候启动那些程序,配置某个程序启动的时候显示什么样的风格等等。通常这些配置文件都集中存放在/etc目录中,所以想要配置什么东西的话,可以在/etc下面寻找我们可能需要修改的文件。

/usr  这个目录中包含了命令库文件和在通常操作中不会修改的文件。
这个目录对于系统来说也是一个非常重要的目录,其地位类似Windows上面的”Program Files”目录(安装程序的时候,默认就是安装在此文件内部某个子文件夹内。输入命令后系统默认执行/usr/bin下的程序(当然,前提是这个目录的路径已经被添加到了系统的环境变量中。此目录通常也会挂载一个独立的磁盘分区,它应保存共享只读类文件,这样它可以被运行Linux的不同主机挂载。

/usr/lib
目标库文件,包括动态连接库加上一些通常不是直接调用的可执行文件的存放位置。
这个目录功能类似/lib目录,理说,这里存放的文件应该是/bin目录下程序所需要的库文件的存放地,也不排除一些例外的情况。

/usr/bin
一般使用者使用并且不是系统自检等所必需可执行文件的目录。
此目录相当于根文件系统下的对应目录(/bin,非启动系统,非修复系统以及非本地安装的程序一般都放在此目录下。

/usr/include
C程序语言编译使用的头文件。
linux下开发和编译应用程序所需要的头文件一般都存放在这里,通过头文件来使用某些库函数。默认来说这个路径被添加到了环境变量中,这样编译开发程序的时候编译器会自动搜索这个路径,从中找到你的程序中可能包含的头文件。

/usr/share
存放共享文件的目录。
在此目录下不同的子目录中保存了同一个操作系统在不同构架下工作时特定应用程序的共享数据(例如程序文档信息)。使用者可以找到通常放在 /usr/doc 或 /usr/lib 或 /usr/man 目录下的这些类似数据。

/usr/local
安装本地程序的一般默认路径。
当我们下载一个程序源代码,编译并且安装的时候,如果不特别指定安装的程序路径,那么默认会将程序相关的文件安装到这个目录的对应目录下。也就是说,这个目录存放的内容,一般都是我们后来自己安装的软件的默认路径,如果择了这个默认路径作为软件的安装路径,被安装的软件的所文件都限制在这个目录中,其中的子目录就相应于根目录的子目录。

另外,有些目录容易混淆,这里简单区分一下:
/bin,/sbin与/usr/bin,/usr/sbin:
/bin一般存放对于用户和系统来说“必须”的程序(二进制文件)。
/sbin一般存放用于系统管理的“必需”的程序(二进制文件),一般普通用户不会使用,根用户使用。
/usr/bin一般存放的只是对用户和系统来说“不是必需的”程序(二进制文件)。
/usr/sbin一般存放用于系统管理的系统管理的不是必需的程序(二进制文件)。

/lib与/usr/lib:
/lib和/usr/lib的区别类似/bin,/sbin与/usr/bin,/usr/sbin。
/lib一般存放对于用户和系统来说“必须”的库(二进制文件)。
/usr/lib一般存放的只是对用户和系统来说“不是必需的”库(二进制文件)。

让进程在后台运行,不受本地关闭终端窗口/网络断开连接干扰

nohup/setsid/&
我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中

&: 当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。例如:sh test.sh &
不过,作业在后台运行一样会将结果输出到屏幕上 可以这样:
command > out.file 2>&1 & //所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

PS:当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。(ps -ef | grep 进程号 或者 kill -9 进程号)

nohup: 使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行
nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:
nohup command &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
使用了nohup之后,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行

setsid: 处理 不属于接受 HUP 信号的终端的子进程
也只需在要处理的命令前加上 setsid 即可 setsid ping www.ibm.com

1.command>out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
2. 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。
3。 试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.