#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

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资