manually install python modules

manually install python modules https://stackoverflow.com/questions/32798137/importerror-no-module-named-appdirs download modules from pypi.python.org wget https://pypi.python.org/packages/48/69/d87c60746b393309ca30761f8e2b49473d43450b150cb08f3c6df5c11be5/appdirs-1.4.3.tar.gz gunzip appdirs-1.4.3.tar.gz tar -xvf appdirs-1.4.3.tar cd appdirs-1.4.3 sudo python setup.py install

2018-06-20 · 1 min · 22 words · -

yubikey

yubikey HMAC-SHA1 challenge-response YubiKey 4 可以同时工作在三种模式: OTP mode: 作为键盘设备 (HID) : Yubico OTP, 第一次使用前需要把 KEY_ID,AES_KEY,SECRET 提交至验证服务器 (Yubico提供或者自己搭建) ,之后应用程序每次通过服务器验证密码的可靠性 (解码后SECRET对应、COUNT增大 (防止重放攻击) ) 。 Challenge-Response: 即可以通过 HID 接口给定一个输入, 输入 HMAC 的计算结果。输入需要本地代码实现。 静态密码, HOTP:算法与Challenge-Response类似,然而使用累加计数器代替了输入,并且HTOP是一个标准协议,许多网站和设备都兼容该标准。 在YubiKey中包含两个configuration slot,每一个slot可以单独配置以上模式中的其中一种,通过短触和长触来选择输入。 U2F mode: U2F 是一个开源的认证标准协议, 使用非对称加密算法, 在每次需要认证是设备可以对 challenge 信息使用私钥进行签名来完成认证。 作为一个开源的标准协议, Google、Dropbox 等网站都支持这种协议的两步验证, 然而现阶段浏览器端仅有 Chrome 支持。 CCID mode, Smartcard 模式: CCID (SmartCard) OpenPGP card 和 PIV card, 可以用来安全地保存 RSA 私钥 YubiKey 还可以作为标准的 OpenPGP Smart Card 使用, 用来存储 PGP 私钥 (设备中私钥是可写不可读的, 解密/签名操作在设备上完成) 。关于 PGP Smart Card 的更多信息, 可以参考这篇文章。 ...

2018-06-20 · 3 min · 579 words · -

date command

date command 输出指定时区的时间 shell 支持在 date 命令前,指定 TZ 参数,即指定时区,这样 dat e输出将会输出指定时区的时间。TZ 是 timezone 的缩写。 TZ=0 date date 打印的日期格式 默认打印12小时制的 # 默认打印 24小时制时间 vim /etc/profile.d/lctime.sh export LC_TIME=POSIX LC_TIME 选择C语言环境的时间格式类别 -d 参数支持自然语言输入,无符号默认为 + date -d "+1 day" date -d "-1 month" date [OPTION]... [+FORMAT] 日期格式化 date '+%Y-%m-%d %H:%M:%S' 纳秒,毫秒 使用 date +%s%N 可以获得一个纳秒级的unix时间戳(当前时间),然后根据需要截取一部分即可得到毫秒级的精度 # 纳秒 date +%s%N # 毫秒 $(($(date +%s%N)/1000000)) # 毫秒, 另外一种作废的不再建议使用的语法 echo $[$(date +%s%N)/1000000] 参数 %s seconds since 1970-01-01 00:00:00 UTC %N nanoseconds (000000000..999999999) # output date and time in RFC 5322 format. Example: Mon, 14 Aug 2006 02:34:56 -0600 date -R # 设置时间和日期 sudo date -s "04/12/2019 09:03:00" sudo date -s "2019-04-12 09:04:00" # 将系统日期设定成2009年11月3日的命令 date -s 11/03/2009 # 将系统时间设定成下午5点55分55秒的命令 date -s 17:55:55 http://jerrybear.blog.51cto.com/629421/393097 ...

2018-06-20 · 3 min · 552 words · -

linux seq

linux seq seq命令用于产生从某个数到另外一个数之间的所有整数。 seq [选项]… 尾数 seq [选项]… 首数 尾数 seq [选项]… 首数 增量 尾数 http://man.linuxde.net/seq

2018-06-20 · 1 min · 16 words · -

算法效率, 算法分析

算法效率, 算法分析 https://blog.csdn.net/zolalad/article/details/11848739 https://www.zhihu.com/question/21387264 算法的时间复杂度和空间复杂度 通常,对于一个给定的算法,我们要做两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序的执行时间通常有两种方法。 一、事后统计的方法 这种方法可行,但不是一个好的方法。该方法有两个缺陷: 一是要想对设计的算法的运行性能进行评测,必须先依据算法编制相应的程序并实际运行;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优势。 二、事前分析估算的方法 因事后统计方法更多的依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。因此人们常常采用事前分析估算的方法。 在编写程序前,依据统计方法对算法进行估算。一个用高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素: (1). 算法采用的策略、方法;(2). 编译产生的代码质量;(3). 问题的输入规模;(4). 机器执行指令的速度。 一个算法是由控制结构 (顺序、分支和循环3种) 和原操作 (指固有数据类型的操作) 构成的,则算法时间取决于两者的综合效果。为了便于比较同一个问题的不同算法,通常的做法是,从算法中选取一种对于所研究的问题 (或算法类型) 来说是基本操作的原操作,以该基本操作的重复执行的次数作为算法的时间量度。 时间复杂度 (1) 时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 (2) 时间复杂度 在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。 另外,上面公式中用到的 Landau符号其实是由德国数论学家保罗·巴赫曼 (Paul Bachmann) 在其1892年的著作《解析数论》首先引入,由另一位德国数论学家艾德蒙·朗道 (Edmund Landau) 推广。Landau符号的作用在于用简单的函数来描述复杂函数行为,给出一个上或下 (确) 界。在计算算法复杂度时一般只用到大O符号,Landau符号体系中的小o符号、Θ符号等等比较不常用。这里的O,最初是用大写希腊字母,但现在都用大写英语字母O;小o符号也是用小写英语字母o,Θ符号则维持大写希腊字母Θ。 T (n) = Ο(f (n)) 表示存在一个常数C,使得在当n趋于正无穷时总有 T (n) ≤ C * f(n) 简单来说,就是T(n)在n趋于正无穷时最大也就跟f(n)差不多大。也就是说当n趋于正无穷时T (n)的上界是C * f(n)。其虽然对f(n)没有规定,但是一般都是取尽可能简单的函数。例如,O(2n2+n +1) = O (3n2+n+3) = O (7n2 + n) = O ( n2 ) ,一般都只用O(n2)表示就可以了。注意到大O符号里隐藏着一个常数C,所以f(n)里一般不加系数。如果把T(n)当做一棵树,那么O(f(n))所表达的就是树干,只关心其中的主干,其他的细枝末节全都抛弃不管。 在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。 按数量级递增排列,常见的时间复杂度有: 常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),…, k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。 ...

2018-06-18 · 2 min · 304 words · -

温度监控, lm-sensors, temperature

温度监控, lm-sensors, temperature 不用安装其它软件的方法 cat /sys/class/thermal/thermal_zone0/temp echo $[$(cat /sys/class/thermal/thermal_zone0/temp)/1000]° sensors apt-get install lm-sensors # 检测传感器 sh -c "yes|sensors-detect" # 查看CPU的温度 sensors 输出 coretemp-isa-0000 Adapter: ISA adapter Package id 0: +57.0°C (high = +105.0°C, crit = +105.0°C) Core 0: +57.0°C (high = +105.0°C, crit = +105.0°C) Core 1: +57.0°C (high = +105.0°C, crit = +105.0°C) Core 2: +57.0°C (high = +105.0°C, crit = +105.0°C) Core 3: +58.0°C (high = +105.0°C, crit = +105.0°C) acpitz-acpi-0 Adapter: ACPI interface temp1: +27.8°C (crit = +119.0°C) nvme-pci-0400 Adapter: PCI adapter Composite: +64.8°C (low = -273.1°C, high = +84.8°C) (crit = +84.8°C) Sensor 1: +64.8°C (low = -273.1°C, high = +65261.8°C) Sensor 2: +74.8°C (low = -273.1°C, high = +65261.8°C) 原贴:http://goodfifagun.pixnet.net/blog/post/21587839 現在購買主機板時都會有廠商提供的監控軟體可以使用,而最常使用到到功 能像溫度監控,系統狀態等等,但是這些軟體都只能在windows 下使用,所 以如果要在 linux下監控CPU溫度,可以透過 lm-sensor這套軟體來監控。安裝環境: ubuntu 8.04.1 安裝步驟: 安裝lm-sensors apt-get install lm-sensors 2. 設定監控選項 sensors-detect 通常都是回答yes即可,注意最後一項,例如下面的資訊 To load everything that is needed, add this to /etc/modules: #--cut here-- I2C adapter drivers modprobe unknown adapter NVIDIA i2c adapter modprobe unknown adapter NVIDIA i2c adapter modprobe unknown adapter NVIDIA i2c adapter i2c-i801 ...

2018-06-17 · 2 min · 314 words · -

elasticsearch

elasticsearch #查看索引 GET /_cat/indices?pretty curl -X GET "localhost:9200/_cat/indices?v" GET /index-2018.09.29/_stats GET /_cat/indices?pretty # elasticsearch 重启后用以下命令观察集群状态。 watch -n 1 -d curl -XGET http://localhost:9200/_cluster/health\?pretty curl -X GET "localhost:9200/_cluster/allocation/explain?pretty" -H 'Content-Type: application/json' -d' { "index": "myindex", "shard": 0, "primary": true } ' unassigned_shards: 没有被分配到节点的分片 unassigned_shards 在elasticsearch 重启后会逐渐减少, 9如果最终unassigned_shards不为0,则需要手动处理。 # 找出未分配到结点的分片 curl -s "http://localhost:9200/_cat/shards" | grep UNASSIGNED curl 'localhost:9200/_cat/master?v' ES_JAVA_OPTS="-Xms2g -Xmx2g" /usr/share/elasticsearch/bin/elasticsearch -d -Ecluster.name=my-application -Enode.name=node-1 -Enode.master=true -Enode.data=false -Epath.data=/data/server/elasticsearch-node1 -Epath.logs=/data/logs/elasticsearch-node1 -Enetwork.host=0.0.0.0 -Ehttp.port=9200 -p /home/elasticsearch/node1_pid kill `cat /home/elasticsearch/node1_pid` curl -XGET http://localhost:9200/_cluster/health\?pretty curl -XGET http://localhost:9200/_cat/shards curl -s "http://localhost:9200/_cat/shards/index-0" curl 'localhost:9200/_nodes/process?pretty' #check if index exist curl --head "localhost:9200/twitter" curl -X GET "localhost:9200/_cat/health?v" curl -X GET "localhost:9200/_cat/nodes?v" curl -X PUT "localhost:9200/customer?pretty" curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d' { "name": "John Doe" } ' curl -X GET "localhost:9200/customer/_doc/1?pretty" # delete index curl -X DELETE "localhost:9200/index-0?pretty" curl -X DELETE "localhost:9200/customer/_doc/2?pretty" curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json" curl "localhost:9200/_cat/indices?v"

2018-06-12 · 1 min · 141 words · -

X11 forwarding

X11 forwarding https://wiki.archlinux.org/title/OpenSSH pacman -S xorg-xauth xorg-xhost /etc/ssh/sshd_config X11Forwarding yes AllowTcpForwarding yes X11UseLocalhost yes X11DisplayOffset 10 systemctl restart sshd pacman -S xorg-xclock https://gist.github.com/vietlq/8b20d09fdfe5f02f8b511c7847df39ee win 10 xserver, x11forward Install VcXsrv Windows X Server Download and install: https://sourceforge.net/projects/vcxsrv/ Check that VcXsrv runs and right-click, get logs to find DISPLAY=127.0.0.1:0.0 Note down the value of $DISPLAY and pass it ot PuTTY Configure PuTTY Navigate to SSH => X11 => Tick Enable X11 forwarding Pass the value of $DISPLAY (which is 127.0.0.1:0.0) to the field X display location Launch from Ubuntu Use PuTTy to log in as normal Run gvim for example on the Ubuntu via PuTTY Use the GVim window ...

2018-06-11 · 1 min · 110 words · -

rancher

rancher https://rancher.com/docs/rancher/v2.6/en/ RKE: Rancher Kubernetes Engine EKS: Amazon EKS (Elastic Kubernetes Service) GKE: Google Kubernetes Engine https://github.com/rancher/rancher https://helm.sh/ https://k3s.io/ k3s k3s 将安装 Kubernetes 所需的一切打包进仅有 XXMB 大小的二进制文件中。并且,为了减少运行 k8s 所需的内存,删除了很多不必要的驱动程序,并用附加组件对其进行替换。这样,它只需要极低的资源就可以运行且安装所需的时间也非常短,因此它能够运行在树莓派等设备上面,即 master 和 agent 运行在一起的模式。 裁剪功能 过时的功能和非默认功能 过时的功能和非默认功能 Alpha 功能 过时的功能和非默认功能内置的云提供商插件 过时的功能和非默认功能内置的存储驱动 过时的功能和非默认功能 Docker 项目特点 使用 SQLite 作为默认数据存储替代 etcd,但 etcd 仍然是支持的 内置了 local storage provider、service load balancer 等 所有 k8s 控制组件如 api-server、scheduler 等封装成为一个精简二进制程序,单进程即可运行 删除内置插件,比如 cloudprovider 插件和存储插件等 减少外部依赖,操作系统只需要安装较新的内核以及支持 cgroup 即可 缺点不足 因为在高可用的场景中,其没有办法做到或很难做到。所以如果你要进行大型的集群部署,那么我建议你选择使用 K8s 来安装部署。如果你处于边缘计算等小型部署的场景或仅仅需要部署一些非核心集群进行开发/测试,那么选择 k3s 则是性价比更高的选择。 在单个 master 的 k3s 中,默认使用的是 SQLite 数据库存储数据的,这对于小型数据库十分友好,但是如果遭受重击,那么 SQLite 将成为主要痛点。但是,Kubernetes 控制平面中发生的更改更多是与频繁更新部署、调度 Pod 等有关,因此对于小型开发/测试集群而言,数据库不会造成太大负载。 ...

2018-06-09 · 2 min · 256 words · -

Remote IP Valve, X-Forwarded-For等http头字段

Remote IP Valve, X-Forwarded-For等http头字段 http://www.10tiao.com/html/308/201702/2650076434/1.html http://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html X-Forwarded-For等http头字段与Tomcat的 Remote IP Valve (Valve源码分析之六) 2017-02-18 16:28 feiying 0 0 阅读 297 Proxies Valve是代理Valve,其作用是可以对负载均衡代理服务器的IP地址与原request的IP地址做请求转换,让服务器端真正识别原IP地址 (如果服务器端有需要的话) ; 本文主要讨论这种地址转换是如何做的; 1.X-Forwarded-For等http头字段 在我们现实的真正的场景中,通常Tomcat直接和用户接触的场景不多,主要是通过代理转发机制进行,如下: 真正的用户客户端是Client1,代理转发服务器采用的是Nginx,Proxy1,那么在此场景下,如果在Tomcat中进行获取客户端的地址: request.getRemoteAddr,获得的IP地址绝对是Proxy1的,也就是负载均衡的地址; 而如果你想要获取Client1的地址,也是可以获取到的,就是通过X-Forwarded-For字段; X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。 X-Forwarded-For内置在Http协议头中,一般格式如下: X-Forwarded-For: client1, proxy1, proxy2, proxy3 其中的值通过一个 逗号+空格 把多个IP地址区分开,; 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器: proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。 鉴于伪造这一字段非常容易,应该谨慎使用X-Forwarded-For字段。正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址, 这通常是一个比较可靠的信息来源。[1] 其次,还有一个是X-Forwarded-by字段,该字段是标识为负载均衡proxy的可信代理的IP地址; 例如上面的这个例子,X-Forwarded-For: client1, proxy1, proxy2, proxy3,可以配置当前的应用服务器的X-Forwarded-by字段可信IP为 proxy1, proxy2, proxy3; 这样通过X-Forwarded-For,X-Forwarded-by两个字段进行减法,直接就得到client1了; 还有一个是X-Forwarded-Proto,该字段记录最初从浏览器发出时候,是使用什么协议。因为有可能当一个请求最初和反向代理通信时,是使用https,但反向代理和服务器通信时改变成http协议,这个时候,X-Forwarded-Proto的值应该是https; X-Forwarded-For和X-Forwarded-Proto的信息是很有价值的,在Tomcat中可以通过获取这两个字段的信息,拿到真实的客户端的请求IP和协议; 2.Remote IP Valve Remote IP Valve就是利用X-Forwarded-For和X-Forwarded-Proto等字段,反转得到最原始的客户端的IP和请求信息的; Attributes The Remote IP Valve supports the following configuration attributes: ...

2018-06-06 · 3 min · 520 words · -

Linux oom killer

‘Linux oom killer’ https://blog.csdn.net/GugeMichael/article/details/24017515 Linux - 内存控制之oom killer机制及代码分析 2014年04月18日 15:04:29 阅读数: 28048 最近,线上一些内存占用比较敏感的应用,在访问峰值的时候,偶尔会被kill掉,导致服务重启。发现是Linux的out-of-memory kiiler的机制触发的。 http://linux-mm.org/OOM_Killer oom kiiler会在内存紧张的时候,会依次kill内存占用较高的进程,发送Sig15(SIGTERM)或Sig9(SIGKILL),取决于内核版本(可见uname -a,>= 2.6.32只会发送sigkill https://elixir.free-electrons.com/linux/v2.6.18/source/mm/oom_kill.c),。并在/var/log/message中进行记录。里面会记录一些如pid,process,。并在/var/log/message中进行记录。里面会记录一些如pid,process) name,cpu mask,trace等信息,通过监控可以发现类似问题。今天特意分析了一下oom killer相关的选择机制,挖了一下代码,感觉该机制简单粗暴,不过效果还是挺明显的,给大家分享出来。 oom killer初探 一个简单分配 heap memroy 的代码片段 (big_mm.c): #define block (1024L_1024L_MB) #define MB 64L unsigned long total = 0L; for(;;) { // malloc big block memory and ZERO it !! char\* mm = (char\*) malloc(block); usleep(100000); if (NULL == mm) continue; bzero(mm,block); total += MB; fprintf(stdout,"alloc %lum mem\n",total); } 这里有2个地方需要注意: 1、malloc是分配虚拟地址空间,如果不memset或者bzero,那么就不会触发physical allocate,不会映射物理地址,所以这里用bzero填充 2、每次申请的block大小比较有讲究,Linux内核分为LowMemroy和HighMemroy,LowMemory为内存紧张资源,LowMemroy有个阀值,通过free -lm和 ...

2018-06-04 · 4 min · 753 words · -

java onerror

java onerror http://hllvm.group.iteye.com/group/topic/40211 -XX:OnError=“jstack -F %p >/opt/com/test/threaddump.log”

2018-06-04 · 1 min · 7 words · -

Java诊断工具 - btrace

Java诊断工具 - btrace https://github.com/btraceio/btrace/releases 打印慢调用 创建一个java类 // MethodDuration_redis.java import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; import java.util.Date; @BTrace public class MethodDuration_redis{ private static int i=0; @OnMethod(clazz = "com.wiloon.package0.Class0",method = "method0",location=@Location(Kind.RETURN)) public static void printMethodRunTime(@ProbeClassName String probeClassName,@Duration long duration){ long d=duration / 1000000; if (d>9){ //大于9毫秒的调用 i++; println("index: "+ i +", timestamp:"+timestamp("HH:mm:ss")+", "+probeClassName + ", duration: " + d + " ms"); } } } 找到 java 进程并执行 btrace # 打印java进程 jcmd -l # 执行btrace, ctrl-c 退出 /bin/btrace <PID> MethodDuration_redis.java Btrace BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执行过程中的一切信息,并且,注意了,不用重启服务,是的,不用重启服务。写好脚本,直接用命令执行即可,不用动原程序的代码。 ...

2018-06-02 · 2 min · 258 words · -

Java Flight Recorder, jfr

Java Flight Recorder, jfr jcmd 40019 VM.check_commercial_features jcmd 40019 VM.unlock_commercial_features jcmd 40019 JFR.check jcmd 40019 JFR.start name=jfr0 delay=10s duration=10s filename=jfr0.jfr

2018-05-29 · 1 min · 20 words · -

kafka, rabbitmq

kafka, rabbitmq http://www.infoq.com/cn/articles/kafka-vs-rabbitmq?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

2018-05-14 · 1 min · 3 words · -

SSH 密钥类型 RSA, DSA, ecdsa, ed25519

SSH 密钥类型 RSA, DSA, ecdsa, ed25519 rsa ecdsa ed25519 ed25519 是目前最安全、加解密速度最快的 key 类型, 优先选择 ed25519 rsa 兼容性最好, 小于 1024 位密钥长度的 RSA 已经有被攻破的记录, 建议长度 2048, 3072 或更大, 不过作为加密使用的 RSA 有着随密钥长度增加, 性能急剧下降的问题。 DSA 不建议使用, ssh-keygen 在生成 DSA 密钥时, 其长度只能为 1024 位 DSA, RSA 1977 年, 三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法, 可以实现非对称加密。这种算法用他们三个人的名字命名, 叫做 RSA 算法。 原理与安全性 RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解 (两个素数的乘积) ;DSA 的安全性是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。 有点要注意,RSA 的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA 就一定需要作大数分解。不过也不必太过担心,RSA 从诞生以来,经历了各种攻击,至今未被完全攻破 (依靠暴力破解,小于1024位密钥长度的 RSA 有被攻破的记录,但未从算法上被攻破) 。 ...

2018-05-13 · 3 min · 552 words · -

chrome os recover

chrome os recover https://support.google.com/chromebook/answer/1080595?hl=zh-Hans open chrome and install Chromebook Recovery Utility 第 3 步: 进入恢复模式 在出现错误的 Chromebook 上: 如果您在这台 Chromebook 上连接了任何设备 (例如鼠标或外部硬盘) ,请将其取下。 进入恢复模式: Chromebook: 按住 Esc + Refresh 刷新,然后按"电源"电源。之后,松开"电源"。当屏幕上显示一条消息后,再松开其他键。 Chromebox: 首先,关闭 Chromebox。使用回形针或类似物体按住"恢复"按钮。按"电源"按钮以重新开启 Chromebox。当您在屏幕上看到一条消息后,释放"恢复"按钮。 Chromebit: 首先,将 Chromebit 断电。使用回形针或类似物体按住"恢复"按钮。为 Chromebit 重新接通电源。当您在屏幕上看到一条消息后,释放"恢复"按钮。 您会看到以下某条消息: “Chrome 操作系统不存在或已损坏。请插入 USB 记忆棒或 SD 卡。” “请插入 USB 记忆棒或 SD 卡。” 插入用于创建恢复媒体的 U 盘或 SD 卡。 按照屏幕上的说明操作。

2018-05-11 · 1 min · 58 words · -

chromeos linux, crostini

‘chromeos linux, crostini’ vmc start dev run_container.sh -container_name=stretch -user=wiloon -shell switch to dev channel, chrome os version >=67 chrome os will start to download an update update and restart Launch crosh (ctrl-alt-t) Create crostini VM vmc start dev. This’ll download the termina component, and open a shell. Launch a container run_container.sh -container_name=stretch -user=wiloon -shell https://www.youtube.com/watch?v=s9mrR2tqVbQ Crostini 101 from Crostini https://github.com/lstoll/cros-crostini/blob/master/README.md https://support.google.com/chromebook/answer/1086915?hl=en

2018-05-11 · 1 min · 61 words · -

eval command

eval command 语法: eval cmdLine eval 会对后面的 cmdLine 进行两遍扫描, 如果第一遍扫描后, cmdLine 是个普通命令, 则执行此命令;如果 cmdLine 中含有变量的间接引用, 则保证间接引用的语义。 举例如下: set 11 22 33 44 如果要输出最近一个参数,即 44, 可以使用如下命令 echo $4 但是如果我们不知道有几个参数的时候, 要输出最后一个参数, 大家可能会想到使用 $# 来输出最后一个参数 如果使用命令: echo "\$$#" 则得到的结果是 $4,而不是我们想要的44。这里涉及到一个变量间接引用的问题, 我们的本意是输出 $4, 默认情况下, 命令后忽略变量间接引用的情况。 这时候,就可以使用eval命令。 eval echo "\$$#" 得到的结果为44 eval命令将会首先扫描命令行进行所有的替换, 然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。 eval也可以用于回显简单变量, 不一定时复杂变量。 NAME=ZONE eval echo $NAME 等价于 echo $NAME 两次扫描 test.txt内容: hello shell world! myfile=“cat test.txt” (1)echo $myfile#result:cat test.txt ...

2018-05-11 · 1 min · 95 words · -

mbr, gpt

mbr, gpt http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_039_fdisk_gdisk_parted.html 两种分区结构简介 MBR分区 硬盘主引导记录MBR由4个部分组成 主引导程序 (偏移地址0000H-0088H) ,它负责从活动分区中装载,并运行系统引导程序。 出错信息数据区,偏移地址0089H-00E1H为出错信息,00E2H-01BDH全为0字节。 分区表 (DPT,Disk Partition Table) 含4个分区项,偏移地 址01BEH-01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4 结束标志字,偏移地址01FE-01FF的2个字节值为结束标志55AA GPT分区 GPT:GUID (Globals Unique Identifiers) partitiontable 支持128个分区,使用64位,支持8Z (512Byte/block ) 64Z ( 4096Byte/block) 使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位 UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

2018-05-10 · 1 min · 36 words · -