shell 状态代码

shell 状态代码 https://blog.csdn.net/hongkangwl/article/details/16184883 Linux提供 $? 特殊变量来保存最后一条命令执行结束的退出状态。执行完一条命令后,立即执行 echo $?, 可以查看最后一条命令的退出状态值。 正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令执行有错。 该命令可以用于检查命令是否正确执行,比如在解压包的时候,检查解压包是否成功十分有效。 自定义退出状态码,可以在脚本中定义自己的退出状态代码,然后使用 echo $? 检查。 退出状态码最高是255,一般自定义的代码值为0~255,如果超出255,则返回该数值被256除了之后的余数。 shell 退出状态代码 0 命令成功完成 1 通常的未知错误 2 误用 shell 命令 126 命令无法执行 127 没有找到命令 128 无效的退出参数 128+x 使用Linux信号x的致命错误。 130 使用Ctrl-C终止的命令 255 规范外的退出状态 作者: 王伴农 来源: CSDN 原文: https://blog.csdn.net/hongkangwl/article/details/16184883 版权声明: 本文为博主原创文章,转载请附上博文链接!

2019-01-07 · 1 min · 46 words · -

java Keytool

java Keytool keytool -list -v -keystore /usr/java/default/jre/lib/security/cacerts sudo /usr/lib/jvm/java-8-openjdk/bin/keytool -importcert -keystore /usr/lib/jvm/java-8-openjdk/jre/lib/security/cacerts -storepass changeit -noprompt -file xxx.crt -alias "xxx.crt" # jdk 导入 证书 keytool.exe -importcert -keystore "C:\Program Files\Java\jdk1.8.0_201\jre\lib\security\cacerts" -storepass changeit -noprompt -file E:\xxx.cer -alias "xxx" Keytool 是一个Java 数据证书的管理工具 ,Keytool 将密钥 (key) 和证书 (certificates) 存在一个称为keystore的文件中 在keystore里,包含两种数据: 密钥实体 (Key entity) ——密钥 (secret key) 又或者是私钥和配对公钥 (采用非对称加密) 可信任的证书实体 (trusted certificate entries) ——只包含公钥 ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 JDK中keytool 常用命令: param comments -genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书 -alias 产生别名 -keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中) -keysize 指定密钥长度 -validity 指定创建的证书有效期多少天 -keyalg 指定密钥的算法 (如 RSA DSA (如果不指定默认采用DSA) ) -dname 指定证书拥有者信息 例如: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码” -keypass 指定别名条目的密码(私钥的密码) -storepass 指定密钥库的密码(获取keystore信息所需的密码) -list 显示密钥库中的证书信息 -v 显示密钥库中的证书详细信息 -export 将别名指定的证书导出到文件 -printcert 查看导出的证书信息 -file 参数指定导出到文件的文件名 -import 将已签名数字证书导入密钥库, keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书

2019-01-06 · 1 min · 108 words · -

SSL/TLS 握手过程

SSL/TLS 握手过程 Client Hello 握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件 (Support Ciphers) 和 SSL Version 等信息。通过 Wireshark 抓包,我们可以看到如下信息: Wireshark 抓包的用法可以参考这篇文章: https://segmentfault.com/a/1190000018746027 Server Hello 第二步是服务端向客户端发送 Server Hello 消息,这个消息会从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 Random2。注意,至此客户端和服务端都拥有了两个随机数 (Random1+ Random2) ,这两个随机数会在后续生成对称秘钥时用到。 Certificate 这一步是服务端将自己的证书下发给客户端,让客户端验证自己的身份,客户端验证通过后取出证书中的公钥。 Server Key Exchange 如果是DH算法,这里发送服务器使用的DH参数。RSA算法不需要这一步。 Certificate Request Certificate Request 是服务端要求客户端上报证书,这一步是可选的,对于安全性要求高的场景会用到。 Server Hello Done Server Hello Done 通知客户端 Server Hello 过程结束。 Certificate Verify 客户端收到服务端传来的证书后,先从 CA 验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3 生成 PreMaster Key。 Client Key Exchange 上面客户端根据服务器传来的公钥生成了 PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端,服务端再用自己的私钥解出这个 PreMaster Key 得到客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 + Random2 + Random3,两边再根据同样的算法就可以生成一份秘钥,握手结束后的应用层数据都是使用这个秘钥进行对称加密。为什么要使用三个随机数呢?这是因为 SSL/TLS 握手过程的数据都是明文传输的,并且多个随机数种子来生成秘钥不容易被暴力破解出来。客户端将 PreMaster Key 传给服务端的过程如下图所示: ...

2019-01-06 · 1 min · 193 words · -

数字签名、数字证书与 PKI 系统

数字签名、数字证书与 PKI 系统 https://www.jianshu.com/p/ffe8c203a471 摘要算法 除了加密算法,摘要算法在互联网安全体系中也扮演了重要的角色。摘要算法有以下特性: 只要源文本不同,计算得到的结果,必然不同 (或者说机会很少) 。 无法从结果反推出源数据。 基于以上特性,我们一般使用摘要算法来校验原始内容是否被篡改。常见的摘要算法有 MD5、SHA 等。 Tips: 摘要算法不能算作加密算法,加密算法需要使用秘钥加解密,但摘要算法无法根据结果反推出内容。另外 MD5 目前也不算安全了,例如彩虹表攻击。 数字证书 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。 数字证书里一般会包含公钥、公钥拥有者名称、CA 的数字签名、有效期、授权中心名称、证书序列号等信息。 数字证书如何确保列出的用户就是公钥的拥有者呢?关键点是 CA 的数字签名,CA会用自己的私钥将证书内容的摘要进行加密。因为 CA 的公钥是公开的,任何人都可以用公钥解密出 CA 的数字签名的摘要,再用同样的摘要算法提取出证书的摘要和解密 CA 数字签名后的摘要比对,一致则说明这个证书没有被篡改过,可以信任。 http://blog.wiloon.com/?p=3655 PKI PKI (Public Key Infrastructure) 翻译过来就是公钥基础设施,可以理解为利用公钥技术为网络应用提供加密和数字签名等密码服务以及必需的密钥和证书管理体系。它是一个提供安全服务的基础设施,PKI 技术是信息安全技术的核心,同时也是电子商务的关键和基础技术。 PKI 既不是一个协议,也不是一个软件,它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为 PKI。 PKI是一个标准,它包括一些基本的组件,不同的组件提供不同的服务,主要由一下几个组件组成: 认证中心 CA(证书签发): CA 机构,又称为证书授证 (Certificate Authority) 中心,是 PKI 的"核心",即数字证书的申请及签发机关,CA 必须具备权威性的特征,它负责管理 PKI 结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份,CA 还要负责用户证书的黑名单登记和黑名单发布。 X.500目录服务器(证书保存): X.500目录服务器用于"发布"用户的证书和黑名单信息,用户可通过标准的 LDAP 协议查询自己或其他人的证书和下载黑名单信息。 具有高强度密码算法(SSL)的安全 WWW 服务器(即配置了 HTTPS 的apache): Secure socket layer(SSL)协议最初由 Netscape 企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。 Web(安全通信平台): Web 有 Web Client 端和 Web Server 端两部分,分别安装在客户端和服务器端,通过具有高强度密码算法的 SSL 协议保证客户端和服务器端数据的机密性、完整性、身份验证。 ...

2019-01-06 · 1 min · 82 words · -

golang tcp tls

golang tcp tls https://colobu.com/2016/06/07/simple-golang-tls-examples/ 生成TLS证书 http://blog.wiloon.com/?p=12962 server package main import ( "bufio" "crypto/tls" "log" "net" ) func main() { cert, err := tls.LoadX509KeyPair("certs/server.pem", "certs/server.key") if err != nil { log.Println(err) return } config := &tls.Config{Certificates: []tls.Certificate{cert}} address := ":8443" log.Println("listening: ", address) ln, err := tls.Listen("tcp", address, config) if err != nil { log.Println(err) return } defer ln.Close() for { conn, err := ln.Accept() if err != nil { log.Println(err) continue } go handleConn(conn) } } func handleConn(conn net.Conn) { defer conn.Close() r := bufio.NewReader(conn) for { msg, err := r.ReadString('\n') if err != nil { log.Println(err) return } println(msg) n, err := conn.Write([]byte("world\n")) if err != nil { log.Println(n, err) return } } } client package main import ( "crypto/tls" "log" ) func main() { conf := &tls.Config{ InsecureSkipVerify: true, } conn, err := tls.Dial("tcp", "127.0.0.1:8443", conf) if err != nil { log.Println(err) return } defer conn.Close() n, err := conn.Write([]byte("hello\n")) if err != nil { log.Println(n, err) return } buf := make([]byte, 100) n, err = conn.Read(buf) if err != nil { log.Println(n, err) return } println(string(buf[:n])) }

2019-01-05 · 1 min · 180 words · -

newifi 3

newifi 3 newifi 3 处理器 MT7621A, mipsle 32M的ROM 512M的RAM 1个USB3.0接口 双频无线 一个千兆WAN口、 4个千兆LAN口 https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=341067&highlight=newifi%2Bd2%2Bopenwrt https://github.com/coolsnowwolf/lede https://downloads.openwrt.org/releases/18.06.1/targets/ramips/mt7621/

2019-01-03 · 1 min · 16 words · -

kde lock screen

kde lock screen shortcut Go to “System Settings” (KDE menu). Workspace>Workspace Behavior>Screen Locking>Activation>Keyboard shortcut config https://askubuntu.com/questions/783184/how-to-display-kde-lock-screen-time-in-24-hour-format

2019-01-03 · 1 min · 16 words · -

newifi breed

newifi breed https://www.right.com.cn/forum/thread-342918-1-1.html 开启固件 SSH a) 开启路由器,进入管理界面 (假设路由器 IP 地址是 192.168.99.1) b) 在浏览器中输入 http://192.168.99.1/newifi/ifiwen_hss.html 并进入 c) 页面显示 success 即表明已开启 SSH 进入路由器 SSH 环境 上传解锁文件到路由器 a) 下载附件,解压得到 newifi-d2-jail-break.ko b) 用 WinSCP 等工具将其上传到路由器的 /tmp 目录 c) 或者用 HFS 搭建本地 HTTP 服务器,并在 SSH 里用 wget 命令下载 d) 或者用 tftpd32/tftpd64 搭建本地 TFTP 服务器,并在 SSH 里用 tftp 命令下载 e) 用 U 盘当然也行 开始解锁 a) SSH 进入 /tmp 目录 cd /tmp b) 加载 newifi-d2-jail-break.ko insmod newifi-d2-jail-break.ko c) 此时 SSH 会停止响应,因为 newifi-d2-jail-break.ko 会冻结系统的其他功能,强制写入 Newifi D2 专用版 Breed 到 Flash d) 成功后路由器会自动重启。断电后按复位健/USB键开机均可进入 Breed ...

2019-01-02 · 1 min · 112 words · -

systemd-networkd, TAP

systemd-networkd, TAP 手动创建 tap 开机自动创建 tap 手动创建 tap0 sudo ip tuntap add dev tap0 mode tap # set ip sudo ip addr add 192.168.60.1/24 dev tap0 # tap up sudo ip link set tap0 up # --- ## delete ip from tap0 sudo ip addr del 192.168.60.1/24 dev tap0 启动时由 systemd 自动创建 tap0 sudo vim /etc/systemd/network/90-tap0.netdev [NetDev] Description=description0 Name=tap0 Kind=tap sudo vim /etc/systemd/network/tap.network [Match] Name=tap0 [Link] MACAddress=5a:70:70:48:7f:50 https://www.freedesktop.org/software/systemd/man/systemd.netdev.html https://www.freedesktop.org/software/systemd/man/systemd.network.html

2019-01-01 · 1 min · 69 words · -

raspberry pi 3B

raspberry pi 3B Raspberry Pi 3 Specifications SoC: Broadcom BCM2837 CPU: 4× ARM Cortex-A53, 1.2GHz GPU: Broadcom VideoCore IV - arm 32bit RAM: 1GB LPDDR2 (900 MHz) Networking: 10/100 Ethernet, 2.4GHz 802.11n wireless Bluetooth: Bluetooth 4.1 Classic, Bluetooth Low Energy Storage: microSD GPIO: 40-pin header, populated Ports: HDMI, 3.5mm analogue audio-video jack, 4× USB 2.0, Ethernet, Camera Serial Interface (CSI), Display Serial Interface (DSI)

2018-12-31 · 1 min · 64 words · -

LLMNR

LLMNR https://www.jianshu.com/p/bfcc437a738e 什么是LLMNR 在DNS 服务器不可用时, DNS 客户端计算机可以使用本地链路多播名称解析 (LLMNR—Link-Local Multicast Name Resolution) (也称为多播 DNS 或 mDNS) 来解析本地网段上的名称。例如, 如果路由器出现故障, 从网络上的所有 DNS 服务器切断了子网, 则支持 LLMNR 的子网上的客户端可以继续在对等基础上解析名称, 直到网络连接还原为止。 LLMNR (本地链路组播名称解析) 在DNS服务器不可用时,DNS 客户端计算机可以使用本地链路组播名称解析,通过UDP发送到组播地址224.0.0.252:5355,来解析本地网段上的名称,使用的也是普通DNS的数据包格式。类似的另一种协议是mDNS (组播DNS) ,通过UDP协议发送到组播地址224.0.0.251:5353,用于家庭局域网等小型网络。 LLMNR 为使用 IPv4、IPv6 或者同时使用这两种地址的设备提供了点对点名称解析服务, 可以让同一子网中的 IPv4 和 IPv6 设备不需要 WINS 或 DNS 服务器就可以解析对方的名称。 例如,如果路由器出现故障,从网络上的所有 DNS 服务器切断了子网,则支持 LLMNR 的子网上的客户端可以继续在对等基础上解析名称,直到网络连接还原为止。除了在网络出现故障的情况下提供名称解析以外,LLMNR 在建立临时对等网络方面也非常有用。 除了在网络出现故障的情况下提供名称解析以外,LLMNR 在建立临时对等网络 (例如,机场候机区域) 方面也非常有用。 LLMNRs 工作过程 主机在自己的内部名称缓存中查询名称。如果在缓存中没有找到了名称,那么主机就会向自己配置的主DNS服务器发送查询请求。如果主机没有收到回应或收到了错误信息,主机还会尝试搜索配置的备用DNS服务器。如果主机没有配置DNS服务器,或者如果在连接DNS服务器的时候没有遇到错误但失败了,那么名称解析会失败,并转为使用LLMNR。 主机通过用户数据报协议(UDP)发送多播查询,查询主机名对应的IP地址,这个查询会被限制在本地子网(也就是所谓的链路局部)内。 链路局部范围内每台支持LLMNR,并且被配置为响应传入查询的主机在收到这个查询请求后,会将被查询的名称和自己的主机名进行比较。如果没有找到匹配的主机名,那么计算机就会丢弃这个查询。如果找到了匹配的主机名,这台计算机会传输一条包含了自己IP地址的单播信息给请求该查询的主机。

2018-12-30 · 1 min · 58 words · -

idea 插入当前日期,insert current datetime

idea 插入当前日期,insert current datetime 安装 idea 插件 进入配置页面: File>setting>Plugins 搜索: Current date generator 安装插件并重启idea 设置 快捷键 setting>keymap>plugin>…date…generator https://plugins.jetbrains.com/plugin/9722-current-date-generator

2018-12-28 · 1 min · 18 words · -

linux comm, 两个文件的共同部分或者差异部分

linux comm, 两个文件的共同部分或者差异部分 两个文件的共同部分或者差异部分 1 comm 命令 在我们的开发和运营中,特别是对业务进行监控的时候,我们常常需要写一些监控shell脚本,而这些脚本需要求两个文件的共同的记录列表或者只出现在第一个文件但不出现在第二个文件的记录列表的场景,此时,comm命令则是您解决此类问题的利器和助手。 随意man comm下,可以在linux下看到该命令的使用方法: NAME comm - compare two sorted files line by line SYNOPSIS comm [OPTION]… FILE1 FILE2 DESCRIPTION Compare sorted files FILE1 and FILE2 line by line. With no options, produce three-column output. Column one contains lines unique to FILE1, column two contains lines unique to FILE2, and column three contains lines common to both files. -1 suppress lines unique to FILE1 -2 suppress lines unique to FILE2 -3 suppress lines that appear in both files --help display this help and exit --version output version information and exit 上面是英文说明,下面简单的说明如下: 一,利用comm命令进行处理的文件必须首先通过sort命令进行排序处理并且是unix格式而非dos格式的文本文件; 二,中文说明如下: 功能说明: 比较两个已排过序的文件。 (使用sort排序) ...

2018-12-28 · 3 min · 509 words · -

kafka, celery

kafka, celery 消息队列(kafka/nsq等)与任务队列(celery/ytask等)到底有什么不同? 消息队列和任务队列,最大的不同之处就在于理念的不同 – 消息队列传递的是“消息”,任务队列传递的是“任务”。 消息队列用来快速消费队列中的消息。比如日志处理场景,我们需要把不同服务器上的日志合并到一起,这时就需要用到消息队列。 任务队列是用来执行一个耗时任务。比如用户在购买的一件物品后,通常需要计算用户的积分以及等级,并把它们保存到数据库。这时就需要用到任务队列。 从上面的例子可看出: 消息队列更侧重于消息的吞吐、处理,具有有处理海量信息的能力。另外利用消息队列的生长者和消费者的概念,也可以实现任务队列的功能,但是还需要进行额外的开发。 任务队列则提供了执行任务所需的功能,比如任务的重试,结果的返回,任务状态记录等。虽然也有并发的处理能力,但一般不适用于高吞吐量快速消费的场景。 任务队列其实和远程函数调用差不多,但和thrift、grpc什么不同,它不需要定义描述文件,调用的方式也不是网络请求方式,而是利用消息队列传递任务信息。 因此可以简单认为任务队列就是消息队列在异步任务场景下的深度化定制开发。 转载于:https://my.oschina.net/u/3834410/blog/3101841

2018-12-27 · 1 min · 14 words · -

raspberry pi networking to systemd-networkd

raspberry pi networking to systemd-networkd https://raspberrypi.stackexchange.com/questions/78787/howto-migrate-from-networking-to-systemd-networkd-with-dynamic-failover vim /etc/resolvconf.conf # Set to NO to disable resolvconf from running any subscribers. Defaults to YES. resolvconf=NO systemctl disable networking systemctl disable dhcpcd systemctl enable systemd-networkd systemctl enable systemd-resolved ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf vim /etc/systemd/network/eth0.network [Match] Name=eth0 [Network] DHCP=yes apt install deborphan apt --autoremove purge openresolv apt --autoremove purge ifupdown apt --autoremove purge dhcpcd5 apt --autoremove purge isc-dhcp-client isc-dhcp-common apt --autoremove purge $(deborphan) apt --autoremove purge $(deborphan) #two times

2018-12-26 · 1 min · 75 words · -

VIM 列编辑

VIM 列编辑 VIM的列编辑操作 插入列 插入操作的话知识稍有区别。例如我们在每一行前都插入"() " 光标定位到要操作的地方。 CTRL+v 进入"可视块" 模式, 选取这一列操作多少行。 SHIFT+i(I) 然后输入要插入的内容。此时输入的内容只会出现在光标所在的行. ESC 按两次, 会在每行的选定的区域出现插入的内容。 删除列 光标定位到要操作的地方。 CTRL+v 进入"可视 块"模式,选取这一列操作多少行。 d 删除。 https://www.cnblogs.com/xiaowant/articles/1992923.html

2018-12-25 · 1 min · 24 words · -

raspberry pi disable ipv6

raspberry pi disable ipv6 /etc/modprobe.d/ipv6.conf alias net-pf-10 off alias ipv6 off options ipv6 disable_ipv6=1 blacklist ipv6 Disable IPv6 on Raspberry Pi3+ https://www.cesareriva.com/disable-ipv6-on-raspberry-pi3/embed/#?secret=RVErZNYd3W

2018-12-24 · 1 min · 22 words · -

raspberry pi mac spoofing

raspberry pi mac spoofing vim cmdline.txt smsc95xx.macaddr=XX:XX:XX:XX:XX:XX https://pimylifeup.com/raspberry-pi-mac-address-spoofing/

2018-12-24 · 1 min · 8 words · -

/etc/passwd, /etc/shadow

/etc/passwd, /etc/shadow https://blog.csdn.net/u012501054/article/details/71522278 Linux系统中,所有用户 (包括系统管理员) 的账号和密码都可以在/etc/passwd和/etc/shadow这两个文件中找到, (用户和密码就放在文件中,不怕被其他人看的或者修改吗?/etc/passwd只有系统管理员才可以修改的,其他用户可以查看,/etc/shadow其他用户看不了) vim /etc/shadow ls -al /etc/passwd /etc/shadow -rw-r-r-. 1 root root 2250 12月 14 00:17 /etc/passwd —-. 1 root root 1263 12月 14 00:17 /etc/shadow 上面分别列出了passwd和shadow文件的访问权限信息,其中passwd保存的是账号,shadow保存的是账号的密码等信息,下面就具体看看这两个文件的内容: /etc/passwd 通过指令 vi /etc/passwd 打开passwd文件来看看,下面列举部分内容如下: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh 上面每一行都代表一个用户,每一行又通过[:]分为七个部分。 账号名称 原先用来保存密码的,现在密码都放在/etc/shadow中,所以这里显示x UID,也就是使用者ID。默认的系统管理员的UID为0,我们添加用户的时候最好使用1000以上的UID,1-1000范围的UID最好保留给系统用。 GID,也就是群组ID 关于账号的一些说明信息 (暂时可以忽略) 账号的家目录,家目录就是你登陆系统后默认的那个目录 账号使用的shell vi /etc/shadow root:!:15324:0:99999:7::: daemon:_:15259:0:99999:7::: bin:_:15259:0:99999:7::: letuknowit:$1$cPf/cIvr$sCws95uSip2ljTK052DDB.:15400:5:60:7:2:15490: 这里也是由[:]来进行分割,但是这里一共分出来九个栏目,每个栏目的解释如下: 账户名称 (密码需要与账户对应的嘛) 加密后的密码, 假如此字段为空,则表示该账号不需要密码就可以登录。如果密码栏的第一个字符为’*‘或者是’!’,表示这个账号不能用来登录。可以使用这个方法来开启或关闭一个账户的登录权限。另外’!!‘两个叹号表示这个账号目前没有密码,也不能用于登录,通常为一些系统账号。 最近改动密码的日期 (不是日期吗,咋是一堆数字,别急,这个是从1970年1月1日算起的总的天数) 。那怎么才能知道今天距1970年1月1日有多少天呢?很简单,你改下密码,然后看下这个栏目中的数字是多少就可以了! 密码不可被变更的天数: 设置了这个值,则表示从变更密码的日期算起,多少天内无法再次修改密码,如果是0的话,则没有限制 密码需要重新变更的天数: 密码经常更换才能保证安全,为了提醒某些经常不更换密码的用户,可以设置一个天数,强制让用户更换密码,也就是说该用户的密码会在多少天后过期,如果为99999则没有限制 密码过期预警天数: 如果在5中设置了密码需要重新变更的天数,则会在密码过期的前多少天进行提醒,提示用户其密码将在多少天后过期 密码过期的宽恕时间: 如果在5中设置的日期过后,用户仍然没有修改密码,则该用户还可以继续使用的天数 账号失效日期,过了这个日期账号就不能用了 保留的 以上面最后用户letuknowit为例 (15400对应的日期为2012年3月1日) ,其保护如下信息: ...

2018-12-24 · 1 min · 84 words · -

Console(控制台), Terminal(终端), tty, shell

Console(控制台), Terminal(终端), tty, shell https://blog.csdn.net/on_1y/article/details/20203963 使用 linux 已经有一段时间, 却一直弄不明白这几个概念之间的区别。虽然一直在用, 但是很多概念都感觉模糊不清, 这样不上不下的状态实在令人不爽。下面就澄清一下这些概念。 这些概念本身有着非常浓厚的历史气息, 随着时代的发展, 他们的含义也在发生改变, 它们有些已经失去了最初的含义, 但是它们的名字却被保留了下来。 控制台(Console) 控制台(Console)是物理设备,用于输入输出,它直接连接在计算机上,是计算机系统的一部分。计算机输出的信息会显示在控制台上,例如BIOS的输出,内核的输出。 终端(Terminal) 终端(Terminal)也是一台物理设备,只用于输入输出,本身没有强大的计算能力。一台计算机只有一个控制台,在计算资源紧张的时代,人们想共享一台计算机,可以通过终端连接到计算机上,将指令输入终端,终端传送给计算机,计算机完成指令后,将输出传送给终端,终端将结果显示给用户。 虚拟控制台(Virtual Console),虚拟终端(Virtual Terminal) 虚拟控制台(Virtual Console)和虚拟终端是一样的。我们只有一台终端 (物理设备) ,这是我们与计算机之间的用户接口。假如有一天,我们想拥有多个用户接口,那么,一方面我们可以增加终端数目 (物理设备) ,另一方面,还可以在同一台终端 (物理设备) 上虚拟出多个终端,它们之间互相不影响,至少看起来互相不影响。这些终端就是虚拟终端。 在Ubuntu中,我们按下Ctrl+Alt+Fx时,会进入第x个虚拟终端,一共有七个虚拟终端,其中第七个虚拟终端,就是我们默认使用的图形用户界面。 终端模拟器(Terminal Emulator) 我们知道,终端是一种物理设备,而终端模拟器(Terminal Emulator),是一个程序,这些程序用来模拟物理终端。图形用户界面中的终端模拟器一般称为终端窗口(Terminal Window),我们在Ubuntu下打开的gnome-terminal就属于此类。 tty tty 的全称是 TeleTYpewriter, 这就是早期的终端 (物理设备), 它们用于向计算机发送数据, 并将计算机的返回结果打印出来。显示器出现后, 终端不再将结果打印出来,而是显示在显示器上。但是tty的名字还是保留了下来。 在Ubuntu中,我们按下Ctrl+Alt+F1时,会进入第1个虚拟终端,你可以看到屏幕上方显示的tty1。 shell shell 和之前说的几个概念截然不同, 之前的几个概念都是与计算机的输入输出相关的, 而 shell 是和内核相关的。内核为上层的应用提供了很多服务, shell 在内核的上层, 在应用程序的下层。例如,你写了一个 hello world 程序,你并不用显式地创建一个进程来运行你的程序,你把写好的程序交给shell就行了,由shell负责为你的程序创建进程。 我们在终端模拟器中输入命令时, 终端模拟器本身并不解释执行这些命令, 它只负责输入输出, 真正解释执行这些命令的, 是 shell。 我们平时使用的sh, bash, csh 是 shell 的不同实现。 ...

2018-12-24 · 2 min · 256 words · -