1.创建用户和之前一样。
RHEL7.2用户名和密码的创建以及DHCP服务的安装_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130763469?spm=1001.2014.3001.55012.用yum安装(分别是c,c++,java,javac)(之前我以为是分开安装的,后面老师说只是版本不一样,安装之后java和javac都安装好了)5月29日补:可能需要先yum install java 才有后面的那个yum install java-1.8.0-openjdk-devel.x86_64。不然就是一直在尝试其他镜像。
[root@localhost 桌面]# yum install gcc -y
[root@localhost 桌面]# yum install gcc-c++ -y
[root@localhost 桌面]# yum install java -y
[root@localhost 桌面]# yum install java-1.8.0-openjdk-devel.x86_64 -y
[root@localhost 桌面]# java
[root@localhost 桌面]# javac
参考链接:linux:centos7 yum命令安装java环境并配置JAVA_HOME环境变量_as57147的博客-CSDN博客https://blog.csdn.net/as57147/article/details/109295471
编写一个Java程序看看(不知道是不是我之前配置过环境变量的原因,这个可以直接编译运行)
这个可能不是,用yum安装环境变量好像是自动配置好了。
public class hello {
public static void main(String[] args) {
System.out.println("hello world");
}
}
[root@localhost java]# javac hello.java
[root@localhost java]# java hello
hello world
[root@localhost java]# echo $JAVA_HOME
usr/java/jdk1.8.0_361
3.编写C或C++和Java的语言程序,我这里是用c++和java写的。
参考链接:
(3条消息) 求范围内的质数的个数_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130451290?spm=1001.2014.3001.5502
代码分析:通过用户输入可以得到各自的学号,首先判断他本身是否是质数,如果不是质数就可以将他拆分,那么如何拆分,我们判断质数的时候如果他有因子就不是质数,在将他除以这个因子重复这个过程,整个翻译成程序就是如果他是质数就直接跳出循环,如果他不是质数就将他拆成质数乘以质数的形式,自己本身越来越靠近质数,最后跳出循环把自己也输出就得到了最终的表达式,整个程序不是很难想到,主要就是要注意int类型数据越界的情况。
#include<iostream>
using namespace std;
//202140200126
bool isPrime(long long sno);
int main(){
//用int类型数据越界
long long sno=0;
cout<<"请输入您的学号:";
cin>>sno;
cout<<sno<<"=";
while(!isPrime(sno)){
for(long long i=2;i<sno;i++){
//直接输出因子
if(sno%i==0){
cout<<i<<"*";
sno/=i;
//直接进入下一次的循环
break;
}
}
}
cout<<sno<<endl;
return 0;
}
//判断sno是否是质数
bool isPrime(long long sno){
for(long long i=2;i<sno;i++){
if(sno%i==0){
return false;
}
}
return true;
}
思路知道了用什么语言写就是转换一下就可以了。
import java.util.Scanner;
//202140200126
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入您的学号:");
long sno=sc.nextLong();
System.out.print(sno+"=");
while(!isPrime(sno)){
for(long i=2;i<sno;i++){
if(sno%i==0){
System.out.print(i+"*");
sno/=i;
break;
}
}
}
System.out.println(sno);
}
//判断sno是否是质数
public static boolean isPrime(long sno){
for(long i=2;i<sno;i++){
if(sno%i==0){
return false;
}
}
return true;
}
}
[root@localhost java]# gedit Test.java
[root@localhost java]# javac Test.java
[root@localhost java]# java Test
请输入您的学号:202140200126
202140200126=2*25339*3988717
出现这个说明之前没有那个文件,现在是创建一个新的文件。
** (gedit:5177): WARNING **: 获取文件“/root/桌面/he”的信息出错:没有那个文件或目录
** (gedit:5177): WARNING **: Set document metadata failed: 设置文件元数据出错:没有那个文件或目录
说明:这个寻找质因子是采取一种比较笨的方法,所以整个的效率比较低,对于一些的学号会很久才出来结果,可以通过修改来优化整个程序,如:寻找不用判断每一种可能,主要判断质数就行,因为合数可以拆分成质数和质数相乘的形式,有因为需要时最小的因子,所以总会有一个质数比这个合数大。详细的思路还是看之前的参考链接。
类似参考:
#include<iostream>
using namespace std;
#include<cmath>
//202140200126
bool isPrime(long long sno);
int main(){
//用int类型数据越界
long long sno=0;
cout<<"请输入您的学号:";
cin>>sno;
cout<<sno<<"=";
while(!isPrime(sno)){
long long i=0;
//同样2拿出来单独判断
if(sno%2==0){
//输出2,sno除以2
cout<<2<<"*";
sno/=2;
//这里就不是用break了
continue;
}
double tmp=sqrt(sno);
//缩小可能的范围
for(i=3;i<=tmp;i+=2){
//直接输出因子
if(sno%i==0){
cout<<i<<"*";
sno/=i;
//直接进入下一次的循环
break;
}
}
}
cout<<sno<<endl;
return 0;
}
//判断sno是否是质数
bool isPrime(long long sno){
//把2单独拿出来判断
if(sno%2==0){
return false;
}
double tmp=sqrt(sno);
//之后就仅仅考虑奇数,而且范围也可以缩小
for(long long i=3;i<=tmp;i+=2){
if(sno%i==0){
return false;
}
}
return true;
}
c++编写的程序用gcc编译就会发生报,所以应该要用g++来编译。
[root@localhost c]# gedit sno.c
[root@localhost c]# gcc sno.c -o sno.o
sno.c:1:19: 致命错误:iostream:没有那个文件或目录
#include<iostream>
^
编译中断。
[root@localhost c]# g++ sno.c -o sno.o
[root@localhost c]# ./sno.o
请输入您的学号:202140200126
202140200126=2*25339*3988717
4.这个题目还不确定是什么意思,我是先把.c的文件准备好,如何编写makefile文件。
[root@localhost c]# gedit Makefile
写下面这几行代码
sno.o:sno.c
g++ sno.c -o sno.o
如果出现这个,说明之前已经编译过了,可以删除之后重新执行
[root@localhost c]# make -f Makefile
make: “sno.o”是最新的。
[root@localhost c]# rm -f sno.o
[root@localhost c]# make -f Makefile
g++ sno.c -o sno.o
也可以增加一个clean,修改之前的文件就是成这样了。
sno:sno.c
g++ sno.c -o sno
clean:
rm -f *.o
rm -f sno
之前有一直以为的是,下面是执行sno和clean一起执行,这就导致我的理解是他生成了sno的目标文件然后又删除了。其实不是,他的意思是只执行Makefile里面的clean。也就是我们要删除的时候可以执行这条语句。
[root@localhost c]# make -f Makefile clean
[root@localhost c]# ls
a.out cdx cdx.c Makefile sno.c
[root@localhost c]# make -f Makefile
g++ sno.c -o sno
[root@localhost c]# ls
a.out cdx cdx.c Makefile sno sno.c
[root@localhost c]# ./sno
请输入您的学号:202140200126
202140200126=2*25339*3988717
[root@localhost c]# make -f Makefile clean
rm -f *.o
rm -f sno
[root@localhost c]# ls
a.out cdx cdx.c Makefile sno.c
当然这个老师上课是讲过的,也确实书上还有笔记,以为要在多个文件,为此还特地把文件拆开来用。直接看文件内容吧。(这里我是提前创建了文件,而且把内容写到里面的,所以用cat查看,如果有感兴趣的可以直接创建文件,把内容写进去,我这没有写填写过程,因为我感觉写在一个文件夹里面貌似也是可以的)
[root@localhost make]# ls
bar.c bar.h foo.c foo.h Makefile
[root@localhost make]# cat foo.h
#include<iostream>
using namespace std;
[root@localhost make]# cat foo.c
#include "foo.h"
#include "bar.h"
bool isPrime(long long sno);
int main(){
//用int类型数据越界
long long sno=0;
cout<<"请输入您的学号:";
cin>>sno;
cout<<sno<<"=";
while(!isPrime(sno)){
for(int i=2;i<sno;i++){
//直接输出因子
if(sno%i==0){
cout<<i<<"*";
sno/=i;
//直接进入下一次的循环
break;
}
}
}
cout<<sno<<endl;
return 0;
}
[root@localhost make]# cat bar.h
#include<iostream>
using namespace std;
[root@localhost make]# cat bar.c
#include "foo.h"
#include "bar.h"
//判断sno是否是质数
bool isPrime(long long sno){
for(long long i=2;i<sno;i++){
if(sno%i==0){
return false;
}
}
return true;
}
[root@localhost make]# cat Makefile
sno:foo.o bar.o
g++ foo.o bar.o -o sno
foo.o:foo.c foo.h
g++ -c foo.c -o foo.o
bar.o:bar.c foo.h bar.h
g++ -c bar.c -o bar.o
clean:
rm -f *.o
rm -f sno
[root@localhost make]#
然后就是编译运行,和之前就是一样的了。
[root@localhost make]# ls
bar.c bar.h foo.c foo.h Makefile
[root@localhost make]# make -f Makefile
g++ -c foo.c -o foo.o
g++ -c bar.c -o bar.o
g++ foo.o bar.o -o sno
[root@localhost make]# ls
bar.c bar.h bar.o foo.c foo.h foo.o Makefile sno
[root@localhost make]# ./sno
请输入您的学号:202140200126
202140200126=2*25339*3988717
[root@localhost make]# make -f Makefile clean
rm -f *.o
rm -f sno
[root@localhost make]# ls
bar.c bar.h foo.c foo.h Makefile
[root@localhost make]#
5.我刚开始还以为是环境变量的问题,现在感觉应该是权限的问题。(文件夹位置没有发生改变)
先切换到普通用户,执行上面的语句。发现权限不够,这个时候就想到了sudo。
[root@localhost make]# su lj200126
[lj200126@localhost make]$ ls
bar.c bar.h foo.c foo.h Makefile
[lj200126@localhost make]$ make -f Makefile
g++ -c foo.c -o foo.o
Assembler messages:
Fatal error: can't create foo.o: 权限不够
make: *** [foo.o] 错误 1
结果还是不行。被报告是什么意思,让我们重新回到root用户。(这里是要输入普通用户的密码,不是root用户的密码)
[lj200126@localhost make]$ sudo make -f Makefile
[sudo] password for lj200126:
lj200126 不在 sudoers 文件中。此事将被报告。
[lj200126@localhost make]$
切回到root用户。(也可以用su root)
[lj200126@localhost make]$ exit
exit
您在 /var/spool/mail/root 中有新邮件
[root@localhost make]#
咋还有邮件来了,我到要看看是什么。(末尾显示这个,原来他在打"小报告",会记录这违规的事情)
[root@localhost make]# cat /var/spool/mail/root
localhost.localdomain : May 23 20:51:56 : lj200126 : 用户不在 sudoers 中 ; TTY=pts/0 ; PWD=/root/make ; USER=root ; COMMAND=/bin/make -f Makefile
那现在的思路就是提升他的权限了。
把只读权限修改为可写权限。
[root@localhost make]# ls -l /etc/sudoers
-r--r-----. 1 root root 4188 7月 7 2015 /etc/sudoers
[root@localhost make]# chmod u+w /etc/sudoers
[root@localhost make]# ls -l /etc/sudoers
-rw-r-----. 1 root root 4188 7月 7 2015 /etc/sudoers
[root@localhost make]#
编辑配置文件(增加下面一行,详细思路看参考链接)
[root@localhost make]# gedit /etc/sudoers
恢复权限(440就是9位权限码,里面的每一位就是rwx读,写,可执行,三位对应的是user,group,other。440就是自己是可读的不可写不可执行,组里面也是可读的不可写不可执行,对于其他用户是不可读不可写不可执行的)
[root@localhost make]# ls -l /etc/sudoers
-rw-r----- 1 root root 4209 5月 23 21:05 /etc/sudoers
[root@localhost make]# chmod 440 /etc/sudoers
[root@localhost make]# ls -l /etc/sudoers
-r--r----- 1 root root 4209 5月 23 21:05 /etc/sudoers
[root@localhost make]#
重新编译
[lj200126@localhost make]$ make -f Makefile
g++ -c foo.c -o foo.o
Assembler messages:
Fatal error: can't create foo.o: 权限不够
make: *** [foo.o] 错误 1
[lj200126@localhost make]$ sudo make -f Makefile
[sudo] password for lj200126:
g++ -c foo.c -o foo.o
g++ -c bar.c -o bar.o
g++ foo.o bar.o -o sno
[lj200126@localhost make]$ ls
bar.c bar.h bar.o foo.c foo.h foo.o Makefile sno
[lj200126@localhost make]$ ./sno
请输入您的学号:202140200126
202140200126=2*25339*3988717
[lj200126@localhost make]$
参考链接:
(1条消息) 解决Linux系统下,出现“不在sudoers文件中,此事将被报告”的问题_不在 sudoers 文件中。此事将被报告。_正积分的博客-CSDN博客https://blog.csdn.net/weixin_46984358/article/details/121497015
6.官网下载,可以不用捐助。我是在windows下面下载在移动到虚拟机里面的。.tar.gz后缀的压缩包Thank You for Downloading Eclipse | The Eclipse Foundationhttps://www.eclipse.org/downloads/download.php?file=/oomph/epp/2023-03/R/eclipse-inst-jre-linux64.tar.gz&mirror_id=1142
[root@localhost 下载]# ls
eclipse-inst-linux64.tar.gz
[root@localhost 下载]# tar -zxvf eclipse-inst-linux64.tar.gz
理论上是解压之后进入解压后的文件夹,然后打开eclipse-inst就可以了,但是我这里报错了,不知道是不是文件不对。
[root@localhost eclipse]# cd eclipse-installer
[root@localhost eclipse-installer]# ls
artifacts.xml eclipse-inst features p2 readme
configuration eclipse-inst.ini icon.xpm plugins
[root@localhost eclipse-installer]# ./eclipse-inst
坐等老师发文件。
我的启动没成功。(应该是版本不兼容的原因,官网下载的是最新版的,但是rhel7不是)
老师最终没有发文件,还是要靠自己,终于功夫不负有心人找到一个链接。
RHEL7.2 安装Eclipse-oxygen Hadoop开发环境 - ccskun - 博客园 (cnblogs.com)https://www.cnblogs.com/ccskun/p/7822277.html先下载(可以直接复制到虚拟机里面,然后就直接下载了)
[root@localhost 下载]# wget http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/oxygen/1a/eclipse-java-oxygen-1a-linux-gtk-x86_64.tar.gz
查找文件名字
[root@localhost 下载]# ls -lrt|grep eclipse
-rw-r--r-- 1 root root 186642081 10月 10 2017 download.php?file=%2Ftechnology%2Fepp%2Fdownloads%2Frelease%2Foxygen%2F1a%2Feclipse-java-oxygen-1a-linux-gtk-x86_64.tar.gz
drwxr-xr-x 8 root root 4096 5月 24 18:50 eclipse
解压
[root@localhost 下载]# tar -zxvf download.php?file=%2Ftechnology%2Fepp%2Fdownloads%2Frelease%2Foxygen%2F1a%2Feclipse-java-oxygen-1a-linux-gtk-x86_64.tar.gz
出现eclipse文件
点击文件
搞定了
接下来的操作大家比我熟悉了吧。
他这个不能直接移动到桌面来,要配置一下,感兴趣的同学可以自己尝试一下。
然后把之前写的程序拷贝过来看一下是否可以运行。那就搞定了。
5月25日还是更新一下方法吧移动到桌面的方法吧。
进入目录创建文件,并编辑他。
[root@localhost 桌面]# cd /usr/share/applications
[root@localhost applications]# gedit eclipse.desktop
文件信息
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Comment=Eclipse Luna
Exec=/root/下载/eclipse/eclipse
Icon=/root/下载/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;
可以通过先找到之前的文件然后右键在终端打开
[root@localhost 下载]# cd eclipse
[root@localhost eclipse]# pwd
/root/下载/eclipse
其实就是下面这两个文件的路径把他复制下来粘贴到 eclipse.desktop文件相对应的位置。
保存之后就可以看到图标了。
网上说是可以右键直接发送到桌面,但是我这里右键直接加入软件了,所以还是要用指令拷贝的方式到桌面来。
[root@localhost 桌面]# pwd
/root/桌面
[root@localhost 桌面]# cp /usr/share/applications/eclipse.desktop /root/桌面
注意勾选这个以后每次进入软件的时候就不会总是询问你了。当然路径是自己选择的,自己记得在哪里就行了。
5月27日更新一下eclipse中的c++。
Windows系统下下载下面的安装包(后缀.zip格式)
http://www.eclipse.org/downloads/download.php?file=/tools/cdt/releases/juno/sr2/cdt-master-8.1.2.zip&mirror_id=1093http://www.eclipse.org/downloads/download.php?file=/tools/cdt/releases/juno/sr2/cdt-master-8.1.2.zip&mirror_id=1093解压后移动到虚拟机中。
把features和plugins文件夹复制粘贴到上面的eclipse文件夹中(eclipse文件夹也是你之前编辑配置文件的那个)因为有同名的文件,选择合并,一定是合并不然编译器用不了。(--zsy)
然后再次重启eclipse,就是再次打开这个软件。
7.保存命令也和之前是一样的了。
(1条消息) RHEL7.2用户名和密码的创建以及DHCP服务的安装_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130763469?spm=1001.2014.3001.5501
整个的这篇写下来的不只是怎么操作,仅仅是敲代码,敲指令的话没有什么效果,更加重要的是应该去试错,命令报错可以直接把错误的内容复制粘贴到浏览器上面,基本上互联网上面都会有人同样也出现这种错误,并且有类似的解决方案,我听到一种说法就是如果你的错误在网上没有,那么你就是这个领域的佼佼者了。这就是我把错误的部分也写里面,把解决写在错误后面原因,也不能说这些错误没有意义,至少当有人来问我的时候我可以自信地说这个我之前也错过,但是我现在知道了。