#CentOS on Mac#1.Linux环境配置

2024-01-17 07:18

本文主要是介绍#CentOS on Mac#1.Linux环境配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前因为老师建议在Linux上跑perfect 就用pd装了Ubuntu,了解并不深入仅仅停留在简单命令git wget vim这些,从网上简要比较Ubuntu和CentOS的区别

1.Ubuntu

图形界面漂亮,它最佳的应用领域是桌面操作系统而非服务器操作系统。仅仅安装在自己的电脑中而非服务器中,Ubuntu并没有在VPS安装的操作系统选择之列

2.CentOS

非常多的商业公司部署在生产环境上的服务器都是使用CentOS系统,CentOS是从RHEL源代码编译的社区重新发布版。CentOS简约,命令行下的人性化做得比较好,稳定,有着强大的英文文档与开发社区的支持。与Redhat有着相同的渊源。虽然不单独提供商业支持,但往往可以从Redhat中找到一丝线索。相对Debian来说,CentOS略显体积大一点。是一个非常成熟的Linux发行版。

CentOS 7 配置设备

MacBook Pro (13’’)
处理器2.7 GHz Intel Core i5
内存8GB 1867 MHz DDr3
存储128G

虚拟机Parallels Desktop 11 - CentOS 7
1. 获取CentOS -7.0-64位ISO镜像文件,压缩包2G,解压后5.7G 安装成功这里写图片描述

uname 还可以用来查版本

2.在www.kernel.org 获取 stable版本 4.6.4(release 20160711)

这里写图片描述

1.下载内核源码(用http协议下载)
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.6.4.tar.xz
输入wget后,404 Not Found 网址有错误,我将v4.x写成4.6
后来用浏览器获取地址后解决了问题

这里写图片描述

加个小步骤 改正root权限 方便后面的操作
方法如下:

1)sudo passwd root //修改root密码
跟着步骤重设新的root密码
(2)su root 切换到root密码 输入新密码
(3)打开vim vi /etc/sudoers
修改文件 找到## all members of group wheel ...这句
将wheel前的#注释去掉

这里写图片描述
plus常用vim指令
开始用i进行插入,x删除,:wq为保存退出若为只读文件,:wq!强制保存exit

2.解压文件并移动到/usr/src/
tar.xz 对应的解压指令为-jxvf

#tar -jxvf linux-4.6.4.tar.xz

这里写图片描述

tar xvf将目标文件或目录解包
tar cvf 将目录下的文件或目录打成tar包
tar zxvf将目录或文件解压缩并解包
tar zcvf将目录或文件打成tar包并压缩]

  # cd /usr/src/linux-4.6.4

进入文件夹内

!!清理以前的编译痕迹
如果内核源码是刚解压缩出来的,可以跳过这一步,否则执行以下两条命令:

make mrproper
make clean

3.设置内核编译选项

make menuconfig

这里写图片描述
执行该命令需要ncurses库,如果执行出错则执行如下命令安装ncurses:(Ncurses 提供字符终端处理库,包括面板和菜单

yum install ncurses-devel
yum -y install gcc

这里写图片描述

这里写图片描述
错误:一开始提示找不到openssl 用了

sudo yum install openssl-devel

//编译内核压缩镜像

make bzImage

编译会生成bzImage文件,对应于/boot目录下的vmlinuz文件,是压缩过的内核文件。启动加载时将该文件解压缩到内存中之后才能执行操作系统。

4.编译内核模块

make   
make modules_install

这里写图片描述
内核在运行过程中,除需要内核文件之外,还需要加载一些外围模块(例如驱动程序)等才能运行。
安装内核模块

一般都会安装到/lib/modules目录下。

5.安装内核

make install
这句命令很简单,它会在/boot目录下生成vmlinux/System.map两个文件,并且在/boot/grub目录中生成menu.lst/grub.conf文件。

注:要是遇到找不到内核模块的错误,执行以下两个命令
cp arch/x86/boot/bzImage /boot/vmlinuz-4.6.4
cp System.map /boot/System.map-4.6.4

算一算时间

# time make
这里写图片描述

这里写图片描述

6.修改启动顺序

/boot/grub/grub.conf default=0

7.reboot

问题与解决方法:
之前出现了无法换内核的现象No valid domains in Package 0
将空白的grub.conf写满(各个机子的文件都差不多

1.如何在多核环境加速linux编译

[转载]
tmpfs
有人说在Windows下用了RAMDisk把一个项目编译时间从4.5小时减少到了5分钟,把文件放到内存上做编译应该是比在磁盘上快多了吧,尤其如果编译器需要生成很多临时文件的话。
这个做法的实现成本最低,在Linux中,直接mount一个tmpfs就可以了。而且对所编译的工程没有任何要求,也不用改动编译环境。

mount -t tmpfs tmpfs ~/build -o size=1G

用2.6.32.2的Linux Kernel来测试一下编译速度:
用物理磁盘:40分16秒
用tmpfs:39分56秒
看来编译慢很大程度上瓶颈并不在IO上面。但对于一个实际项目来说,编译过程中可能还会有打包等IO密集的操作,所以只要可能,用tmpfs是有益无害的。当然对于大项目来说,需要有足够的内存才能负担得起这个tmpfs的开销。

make -j

那CPU就应该是一个影响编译速度的重要因素了。
用make -j带一个参数,项目进行并行编译
比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。
还是用Kernel来测试:
用make: 40分16秒
用make -j4:23分16秒
用make -j8:22分59秒
在多核CPU上,适当的进行并行编译还是可以明显提高编译速度的。但并行的任务不宜太多,一般是以CPU的核心数目的两倍为宜。

如果项目的Makefile不规范,没有正确的设置好依赖关系,并行编译的结果就是编译不能正常进行。如果依赖关系设置过于保守,则可能本身编译的可并行度就下降了,也不能取得最佳的效果。

ccache
ccache用于把编译的中间结果进行缓存,以便在再次编译的时候可以节省时间。再重新编译,而这两次编译大部分东西可能都没有发生变化。对于平时开发项目来说,也是一样。为什么不是直接用make所支持的增量编译呢?还是因为现实中,因为Makefile的不规范,很可能这种“聪明”的方案根本不能正常工作
只有每次make clean再make才行。

安装完ccache后,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic
link,链到/usr/bin/ccache上。总之确认系统在调用gcc等命令时会调用到ccache就可以了(通常情况下/usr/local/bin会在PATH中排在/usr/bin前面)。

继续测试:
用ccache的第一次编译(make -j4):23分38秒
用ccache的第二次编译(make -j4):8分48秒
用ccache的第三次编译(修改若干配置,make -j4):23分48秒
修改配置对ccache的影响是很大的,因为基本头文件发生变化后,就导致所有缓存数据都无效了,必须重头来做。但如果只是修改一些.c文件的代码,ccache的效果还是相当明显的。而且使用ccache对项目没有特别的依赖,布署成本很低,这在日常工作中很实用。

ccache -s

来查看cache的使用和命中情况:
cache directory /home/lifanxi/.ccache
cache hit 7165
cache miss 14283
called for link 71
not a C/C++ file 120
no input file 3045
files in cache 28566
cache size 81.7 Mbytes
max cache size 976.6 Mbytes
可以看到,显然只有第二编次译时cache命中了,cache miss是第一次和第三次编译带来的。两次cache占用了81.7M的磁盘,还是完全可以接受的。

distcc

使用distcc,只要求源代码可以用make -j并行编译,并且参与分布式编译的电脑系统中具有相同的编译器。因为它的原理只是把预处理好的源文件分发到多台计算机上,预处理、编译后的目标文件的链接和其它除编译以外的工作仍然是在发起编译的主控电脑上完成,所以只要求发起编译的那台机器具备一套完整的编译环境就可以了。
distcc安装后,可以启动一下它的服务:

/usr/bin/distccd –daemon –allow 10.64.0.0/16

默认的3632端口允许来自同一个网络的distcc连接。
然后设置一下DISTCC_HOSTS环境变量,设置可以参与编译的机器列表。通常localhost也参与编译

export DISTCC_HOSTS="localhost 10.64.25.1 10.64.25.2 10.64.25.3"

然后与ccache类似把g++,gcc等常用的命令链接到/usr/bin/distcc上就可以了。
在make的时候,也必须用-j参数,一般是参数可以用所有参用编译的计算机CPU内核总数的两倍做为并行的任务数。
同样测试一下:
一台双核计算机,make -j4:23分16秒
两台双核计算机,make -j4:16分40秒
两台双核计算机,make -j8:15分49秒

在编译过程中

distccmon-text

来查看编译任务的分配情况。distcc也可以与ccache同时使用,通过设置一个环境变量就可以做到,非常方便。
总结一下:

tmpfs: 解决IO瓶颈,充分利用本机内存资源
make -j: 充分利用本机计算资源
distcc: 利用多台计算机资源
ccache:减少重复编译相同代码的时间

常用内核编译器
gcc

这篇关于#CentOS on Mac#1.Linux环境配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/615250

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方