【转载】Mac 上制作 Linux 系统 U 盘安装盘

Linux 【转载】Mac 上制作 Linux 系统 U 盘安装盘 Mac 下将 iso 镜像写入 U 盘可使用命令行工具 dd,操作如下: 找出 U 盘挂载的路径,使用如下命令:diskutil list 将 U 盘 unmount(将 N 替换为挂载路径):diskutil unmountDisk /dev/disk[N] 写入 U 盘:sudo dd if=iso_path of=/dev/rdisk[N] bs=1m,rdisk 中加入 r 可以让写入速度加快 查看所有的disk $ diskutil list /dev/disk2 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: Apple_partition_scheme *15.7 GB disk2 1: Apple_partition_map 4.1 KB disk2s1 2: Apple_HFS 2.6 MB disk2s2 解除其挂载 $ diskutil unmountDisk /dev/disk2 Unmount of all volumes on disk2 was successful 用 dd 命令将 iso 写入 $ sudo dd if=/Users/light/media/CentOS-7-x86_64-DVD-1908.iso of=/dev/rdisk2 bs=1m 利用 pv 监控克隆进度 使用 homebrew 安装 pv 工具,之后使用以下的命令来实现进度条的显示: ...

【转载】Nginx是什么以及简单使用

[[Nginx]] 【转载】Nginx是什么以及简单使用 Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。 常用功能 Http 代理 正向代理:由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助VPN来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。 反向代理:当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。 负载均衡 Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。 Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。 web缓存 Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。 源码安装 yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel ./configure make sudo make install 默认情况下,Nginx 会被安装在 /usr/local/nginx。通过设定编译选项,你可以改变这个设定。 运行结构 Master-Worker模式:启动Nginx后,其实就是在80端口启动了Socket服务进行监听。 Master进程的作用是? 读取并验证配置文件nginx.conf;管理worker进程; Worker进程的作用是? 每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;注意Worker进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。 热部署的实现 修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。 高并发的处理 Nginx采用了Linux的epoll模型,epoll模型基于事件驱动机制,它可以监控多个事件是否准备完毕,如果OK,那么放入epoll队列中,这个过程是异步的。worker只需要从epoll队列循环处理即可。 多个模型可以参考优化 Nginx。 配置 Nginx配置文件主要分成四部分: main(全局设置) server(主机设置) upstream(上游服务器设置,主要为反向代理、负载均衡相关配置) location(URL 匹配特定位置后的设置) 每部分包含若干个指令。 main 部分设置的指令将影响其它所有部分的设置; server 部分的指令主要用于指定虚拟主机域名、IP 和端口 upstream 的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡 location 部分用于匹配网页位置(比如,根目录“/”,“/images”,等等) 他们之间的关系式: ...

【转载】Python 包管理工具解惑

Python 【转载】Python 包管理工具解惑 一、困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑)。主要表现在下面几个方面: 这几个包管理工具有什么不同? distutils setuptools distribute disutils2 distlib pip 什么时候该用pip,什么时候该用 setup.py ,它们有关系么? easy_install、ez_setup.py、setup.py、setup.cfg 分别都是干啥的? wheel 和 pip 的关系? Egg 和 whl 的关系? 如何发布自己的模块(发布到PyPI)? 如何进行模块的私有发布(不发布到PyPI)? 为了弄清这些问题,我找了许多资料。最后发现最好的资料还是 python 的官方文档。 下面是阅读了所有我找到的资料后的一个总结,希望能帮到几个月后又把这些全部忘光的那个自己。 二、python 包管理工具大乱斗 我用时间顺序来描述乱斗过程。 1. distutils distutils 是 python 标准库的一部分,2000年发布。使用它能够进行 python 模块的 安装 和 发布。 setup.py 就是利用 distutils 的功能写成,我们可以看一个简单的 setup.py 的例子。 在这里可以看到关于 setupt.py 格式的所有详细描述:Writing the Setup Script。 要安装一个模块到当前的 python 环境中,可以使用这个模块提供的 setup.py 文件: python setup.py install 下面的代码会发布一个 python 模块,将其打包成 tar.gz 或者 zip 压缩包: ...

【转载】Python 源码安装

Python 【转载】Python 源码安装 这里的 Python 源码指的是从官网下载的 官方版本的解释器:CPython。 官网 python.org 下载压缩包,解压 然后,在 ./configure 的时候,需要加上 –enable-optimizations 参数,这样才能启用很多功能。 网上看到很多人说要用 ./configure –with-ssl,这是没用的,日志上写明白了 not recognized option ‘–with-ssl’。 编译的时候日志跑的很快,很多人就忽略了细节,年轻人,不要慌,回去翻翻日志,你会有新发现,很多东西别人都给了提示的了。 接下来官方步骤 make && make install 重新试试 python3> import ssl 有了。 另外在编译安装git等工具时,都把 –enable-optimizations 参数带上,这样才是以“官方发布的稳定版本”编译。 转载信息 作者:EncoderJ 来源:CSDN 原文:https://blog.csdn.net/Pretendness/article/details/80032016 版权声明:本文为博主原创文章,转载请附上博文链接!

【转载】shell 生成指定范围随机数与随机字符串

Linux Shell 【转载】shell 生成指定范围随机数与随机字符串 使用系统的 $RANDOM 变量 $ echo $RANDOM 17617 $RANDOM 的范围是 [0, 32767] 如需要生成超过 32767 的随机数,可以用以下方法实现。 例:生成 400000~500000 的随机数 #!/bin/bash function rand(){ min=$1 max=$(($2-$min+1)) num=$(($RANDOM+1000000000)) #增加一个10位的数再求余 echo $(($num%$max+$min)) } rnd=$(rand 400000 500000) echo $rnd exit 0 或许可以使用:shuf -i 400000-500000 -n 1 使用date +%s%N 例:生成 1~50 的随机数 #!/bin/bash function rand(){ min=$1 max=$(($2-$min+1)) num=$(date +%s%N) echo $(($num%$max+$min)) } rnd=$(rand 1 50) echo $rnd exit 0 使用 /dev/random 和 /dev/urandom /dev/random 存储着系统当前运行环境的实时数据,是阻塞的随机数发生器,读取有时需要等待。 /dev/urandom 非阻塞随机数发生器,读取操作不会产生阻塞。 例:使用 /dev/urandom 生成 100~500 的随机数,使用 urandom 避免阻塞。 ...

【转载】Supervisord 的使用

Linux [[Supervisor]] 【转载】Supervisord 的使用 Supervisor(http://supervisord.org/)是用 Python 开发的一个 client/server 服务,是 Linux/Unix 系统下的一个进程管理工具,不支持 Windows 系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用 Supervisor 管理的进程,当一个进程意外被杀死, supervisort 监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写 shell 脚本来控制。 因为 Supervisor 是 Python 开发的,安装前先检查一下系统否安装了 Python2.4 以上版本。 下面以 Ubuntu 18.04,Python2.7 版本环境下,介绍 Supervisor 的安装与配置步聚: 安装 supervisor sudo apt-get install supervisor supervisor 安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf,分别是 supervisor 的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。 配置 运行 supervisord 服务的时候,需要指定 supervisor 配置文件,如果没有显示指定,默认在以下目录查找: # $CWD表示运行supervisord程序的目录。 $CWD/supervisord.conf $CWD/etc/supervisord.conf /etc/supervisord.conf /etc/supervisor/supervisord.conf (since Supervisor 3.3.0) ../etc/supervisord.conf (Relative to the executable) ../supervisord.conf (Relative to the executable) 可以通过运行 echo_supervisord_conf 程序生成supervisor的初始化配置文件,如下所示: mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf 配置文件参数说明 supervisor 的配置参数较多,下面介绍一下常用的参数配置,详细的配置及说明,请参考官方文档介绍。 注:分号(;)开头的配置表示注释 ...

【转载】不要在你的代码里出现User

[[杂谈]] 【转载】不要在你的代码里出现User Never use the word “User” in your code You’re six months into a project when you realize a tiny, simple assumption you made at the start was completely wrong. And now you need to fix the problem while keeping the existing system running—with far more effort than it would’ve taken if you’d just gotten it right in the first place. Today I’d like to tell you about one common mistake, a single word that will cause you endless trouble. I am speaking, of course, about “users”. ...

【转载】不要自称为程序员

[[杂谈]] 【转载】不要自称为程序员 每年都有无数年轻程序员,加入软件行业。 他们在学校里学过编程,但是对这个行业的现实一无所知。 Patrick McKenzie 是美国一家小软件公司的老板,他写了一篇长文,介绍这个行业的一些实际情况。我看了以后很感慨,有些地方很受启发。我选择了一部分,翻译如下。 一、90%的编程工作来自内部软件 计算机专业的学生,可能有一种印象,觉得大部分程序员,都在编写公开出售的软件或者通用软件。 这种看法是不对的。大部分程序员,实际上编写的是不公开的企业内部软件,比如追踪费用的软件、优化装运成本的软件、帮助记账的软件、设计新部件的软件、计算保单价格的软件、识别恶意订单的软件等等。各种各样的商业公司,开发内部软件,解决它们自己的问题。市场上对程序员的大部分需求来源于此,只有极少数程序员直接编写面向外部顾客的软件。 内部软件的开发,通常非常乏味,令人厌倦。因为它们的技术复杂性低、技术决策非常保守、预算很少、缺乏长远考虑。但是,世界上大部分编程工作都是这种。 二、别人雇你的目的,是让你创造利润,不是让你编程 商业公司最关心的(或者说唯一在乎的)事情,就是增加收入、降低成本。因此,它们实际上需要的不是程序员,而是能够帮助它们增加收入、降低成本的人。 开发优美的软件,解决技术难题,编写没有 bug 的代码,这些都不是商业公司的目的。它们雇佣你,是为了让你帮它们完成某个可以增加收入、降低成本的项目,而不是为了让你追求个人的软件成就。 你对于公司的唯一价值,就在于能多大程度上为它们增加收入、降低成本。 三、不要自称为程序员 很多公司的经理不懂计算机,在他们心目中,程序员就是一群高成本的劳动力,只会在一台复杂的机器上干一些难懂的事情。 如果你自称为"程序员",当公司需要压缩成本的时候,某些经理首先就会想到解雇你,因为你的工资高。有一家公司叫 Salesforce,口号是"没有软件",意思就是如果经理们购买了他们的服务,就不再需要别的软件管理销售业务了,也就是说,不再需要自己雇佣程序员了。 正确的做法是,你应该把自己描述成与增加收入、降低成本有关系的人,比如"xx产品的开发者"或"改进者"。有一个 Google Adsense 程序员的自我介绍,是这样写的:“Google 公司97%的收入,与我的代码有关。” 四、不要限定自己 年轻学生经常会问,应该选择哪种语言或平台?Java 是不是比 .NET 容易找工作? 过分强调某一种语言或平台,都是不必要的。如果你把自己限定为 Java 程序员或 .NET 程序员,你就已经输了,因为首先你不应该自称为程序员(理由见上一点),其次这种限定使得你自动被排除在世界上大多数编程工作之外。 现实生活中,学会一种新语言,只需要几个星期,然后再过半年到一年,你就会变成老手。那时,根本没人在乎你以前用什么语言。 天才程序员是很少的,可是需要天才程序员的工作机会却很多很多,大多数场合都是需求远远大于供给。这意味着,即使你不是天才程序员,只要你是一个优秀工程师,那些招聘公司也会立刻录用你,因为它们知道招聘到天才程序员的机会微乎其微。(重复一遍,所谓"优秀工程师",就是你的履历上有一连串增加收入、降低成本的记录。) 某些公司的人事部门,会根据某个关键词(比如 Java 或 .NET)过滤简历。虽然这样的公司根本不值得去,但是如果你真的想过这一关,也很容易:投入几个晚上和周末,在你当前的项目中设法用到这个关键词,然后再把它写进简历就行了。 五、如何提高求职时的谈判能力? 记住你不是在求职,不是在展示编程技巧,而是在推销某种商业问题(增加收入或降低成本)的解决方案。 面试时,要有自信,要平等的对话。你要的是一个互利的录用合同,不要每次对方提出要求,你都说Yes。 雇主可能会问"你的上一份工资是多少",他们其实在说"给我一个理由,压低你的报酬"。你要想好如何适当地回答这个问题。 要还价。这里不仅仅指钱,还指其它你关心的方面。如果你无法要求更高的薪水,那就试着要求更多的假期。 在对方决定录用你以后,才开始讨论薪水。因为那时,他们已经在你身上,投入了大量的时间和金钱,产生了一定的成本,此时他们可能觉得一些小问题已经不值得再纠缠了,比如每年的工资增加几千元。 六、创业公司是否适合应届毕业生? 如果你一毕业就加入创业公司,最可能的结果是,接下来几年你都工作得非常辛苦,然后公司悲惨地失败了,你失业了,不得不又去另一家创业公司工作。 如果你真的想去创业公司,应该首先找一家大公司干上两年,攒一点钱,积累一些经验,然后精心挑选一家创业公司,再去实现自己的梦想。 在创业公司工作,一般情况下,你遇到的都是创业者。他们大多数人没有能力在两年后雇佣你;而在大公司工作,你遇到的都是其他大公司的人,他们中很多人将来有能力雇用你或者帮你介绍工作。 七、沟通技能是最重要的职业技能 前面说过,工程师被雇佣,不是因为会编程,而是因为能够创造商业价值。所以,你得让人们相信你能创造价值,这是帮助你找到工作的最重要的能力。这种能力与你真的能创造多少价值,实际上联系不是很紧密。 我认识的一些最优秀的程序员,往往拙于表达。因此,别人不是不想与他们一起工作,就是低估了他们的价值。相反地,如果你看上去很会编程,并且很善于表达,别人就会真的这样看待你。 (完) 转载链接:不要自称为程序员

【转载】你可能还没有使用过的python3特性---但你应该用

Python 【转载】你可能还没有使用过的python3特性—但你应该用 很多人因为看到了Python EOL而将代码从 python2.x 迁移到了 python3.x。不幸的是,大多数的 python3 代码看起来很像 python2.在下面我将展示一些例子来说明部分 python3 特性,希望它们可以让你用 python 解决问题更简单。 以下的代码将以 Python3.7 书写。 f-Strings(3.6+) 在任何编程语言中,没有字符串结构,都很难以工作。大多数人使用 format 格式化文本,如下所示: user = "Jane Doe" action = "buy" log_message = 'User {} has logged in and did an action {}.'.format( user, action ) print(log_message) # User Jane Doe has logged in and did an action buy. 除此之外,Python3 还提供了一种通过 f-string 进行字符串插值的灵活方法。使用 f-strings 的上述代码如下所示: user = "Jane Doe" action = "buy" log_message = f'User {user} has logged in and did an action {action}.' print(log_message) # User Jane Doe has logged in and did an action buy. 有时候会写一种很蠢的写法,如果用 f-String 就能解决,实例如下: ...

【转载】利用srvctl管理RAC数据库

[[Oracle]] 【转载】利用 srvctl 管理 RAC 数据库 srvctl 即 Server Control,是 Oracle 提供的一个命令行工具,用以用于管理 Oracle 的 RAC 环境。srvctl 在 Oracle 9i 中被引入,Oracle10g、11g 对其功能进行了很大的增强和改进。下面介绍下此命令的简单用法。 一、 查看实例状态(srvctl status) 查询所有实例和服务的状态: [oracle@node-rac1 ~]$ srvctl status database -d racdb Instance racdb2 is running on node node-rac2 Instance racdb1 is running on node node-rac1 查询实例 racdb1 的状态: [oracle@node-rac1 ~]$ srvctl status instance -d racdb -i racdb1 Instance racdb1 is running on node node-rac1 查询实例 racdb2 的状态: [oracle@node-rac1 ~]$ srvctl status instance -d racdb -i racdb2 Instance racdb2 is running on node node-rac2 查询特定节点上应用程序的状态: [oracle@node-rac1 ~]$ srvctl status nodeapps -n node-rac2 VIP is running on node: node-rac2 GSD is running on node: node-rac2 Listener is running on node: node-rac2 ONS daemon is running on node: node-rac2 查询特定节点上 ASM 实例的状态 [oracle@node-rac1 ~]$ srvctl status asm -n node-rac2 ASM instance +ASM2 is running on node node-rac2. 在上面的命令行操作中,都用到的参数是: ...