OS

预备

gcc -o hello hello.c : 用gcc来编译hello.c(c语言文件)为名为hello的可执行文件,若是gcc hello.c则编译结果为a.out,若想运行则:./a.out;-g :显示代码信息,方便调试

gcc -v: gcc版本信息

gdb:用于调试程序,gdb a.out,调试a.out,输入 l 后回车可以查看代码,使用 r 可以运行代码,输入 q 退出

cc:编译生成对象文件(.c => .o)

virtualbox这是一款虚拟bai机,和VMWare是同类型软件,可du以在当前运行的系统上构建出zhi一台虚拟电脑

make:根据MakeFile文件的指导创建目标,对于不需要生成的目标,就不会管,这优于shell脚本(它会全部执行一遍)

Makefile由相关行构成

相关行格式:目标 :目标所依赖的文件

命令(根据冒号右边的文件产生冒号左边的目标)

Makefile文件示例:

1   #It is a example for describing makefile

2   prog : filea.o fileb.o filec.o

3   cc filea.o fileb.o filec.o -LS -o prog

4   filea.o : filea.c a.h defs

5   cc -c filea.c

6   fileb.o : fileb.c b.h defs

7   cc -c fileb.c

8   filec.o : filec.c c.h

9    cc -c filec.c

该文件包含4个相关行。第一个为注释行。第一个非注释行指定prog依赖文件filea.o、fileb.o和filec.o。第三行描述了如何从prog所依赖的文件建立可执行文件。

若有相关行为:

clean:

rm -f *.o

则运行 make clean 时,将执行 rm -f *.o 命令,最终删除所有编译过程中产生的所有中间文件。

file 文件名:查看指定文件的信息

ls 目录:列出指定目录下的东西

ls -l 文件:查看该文件的详细信息

gcc -S -m32 circle.c : 将circle.c翻译成汇编语言文件circle.s,  -m32 : 编译出来的是32位程序,既可以在32位操作系统运行,又可以在64位操作系统运行

c语言:int  bit1:3 : 3是位域,表示bit1只占3bit,%x:输出十六进制

c语言:char a[20] ; int *p = (int *)a  :把a强制类型转换为int*,a本身不变 

c语言:#include <stdio.h> :<>表示到系统默认目录中去找文件,一般是标准库文件;

#include "aaa.h":引号表示先到用户目录找,再找系统默认目录找,一般是用户自定义文件

 

gedit a.c:用gedit也能编辑文件 

宏定义加入()是为了满足运算期望:

 

 rz:可以实现windows文件传到linux中

wc -l a : 打印a 文件的行数 

 who  :   显示系统中有哪些使用者正在上面

& : 把条命令放到后台执行

Linux从哪里输入,是从标准输入读入(0),从哪里把信息输出,是从标准输出中读(1),标准错误输出是2。

默认情况下是标准输入输出是终端,但是可以指定:

command1 > file1 : 执行command1然后将输出的内容存入file1。
command1 < file1 : 将输入重定向到 file1。
command >> file1: 将命令的输出以追加方式重定向到file1
command1 < infile > outfile : 执行command1,从文件infile读取内容,然后将输出写入到outfile中
who > users :执行后,并没有在终端输出信息,这是因为输出已被从默认的标准输出设备(终端)重定向到指定的文件users

2>&1 : 将标准错误输出指向标准输出

command >log 2>&1 : 执行命令后,标准输出(1)指向了log,然后2也指向1,即2指向log,即1和2都指向log

tee a.txt : 从标准输入(可能是终端)读取,将读取的内容一方面输出到标准输出(可能是终端),另一方面存到a.txt中

SELInux是linux的一个模块

openStack是一个云操作系统,管理多个物理机器,负责分配任务给某个物理机器

ssh客户端有:xshell,secureCrt,putty,能登录到远程服务器进而操控,22端口就是ssh端口

用xshell登录到linux里面后,输入rz命令,将本地文件nachos.tar传到linux里面,再tar -zxvf 解压它

 打开Ubuntu终端快捷键:ctrl + alt + t

Ubuntu初始时需要设置root密码:sudo passwd root

随后用root登录

 virtualBox也是虚拟机

查看gcc版本:gcc -v

Ubuntu从零开启ssh服务:

 下载一个Ubuntu 位

新建虚拟机时直接就指定光盘源,不要稍后指定,因为能自动检测它

网络用桥接不用nat

ifconfig查看ip:192.168.0.108

ps -e  | grep ssh:查看全格式的全部进程,看有么有开启ssh

设置源:

sudo cp /etc/apt/sources.list /etc/apt/sources_init.list

sudo gedit /etc/apt/sources.list

新增阿里源:

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main

deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main

deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe

deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe

更新:sudo apt-get update

安装SSH服务,使用命令:sudo apt-get  install openssh-server

再次查看服务有没有启动:sudo ps -e | grep ssh

使用命令来启动:sudo service ssh start

另外,还有几条命令需要记住:

sudo service ssh status 查看服务状态

sudo service ssh stop  关闭服务

sudo service ssh restart  重启服务

如果出现ssh服务器拒绝了密码,则

1、修改 vim /etc/ssh/sshd_config

 
找到# Authentication:
LoginGraceTime 120
PermitRootLogin without passwd
StrictModes yes
 
改成
 
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

 然后重启:/etc/init.d/ssh restart

 

如果xshell没有Password一栏,则

vi /etc/ssh/sshd_config  ===>  改动 PasswordAuthentication yes 

然后重启ssh:/etc/init.d/ssh restart

 

如果出现E: Unable to locate package,说明没找到软件,可能是没有配置好阿里源

查找文件:find . -name 'srm*'   #表示当前目录下查找文件名开头是字符串‘srm’的文件

apt-get -f install  :修复损坏的软件包,尝试卸载出错的包,重新安装正确版本的

i386 : 32位微处理器的

lab0:

nachos安装:

安装virtualBox和vagrant

 将D:\aaa2222339\download\Git\usr\bin加入到环境变量里面就可以直接在cmd中使用linux命令

course上下载devdir

修改文件,内容改为0:

 

vagrant是管理virtualBox的

在D:\devdir目录下(因为它有Vagrantfile文件)打开命令行:

vagrant up

vagrant ssh

按照:https://www.bilibili.com/video/BV19s41117TL?t=426

lab1

extern关键字:该变量是一个已经定义好的外部变量

利用extern关键字先声明一下num变量,告诉编译器num这个变量是存在的,但是不是在这之前声明的,你到别的地方找找吧

果然,这样就可以顺利通过编译啦。但是你要是想欺骗编译器也是不行的,比如你声明了extern int num;

但是在后面却没有真正的给出num变量的声明,那么编译器去别的地方找了,但是没找到还是不行的。

#include<stdio.h>

int func();

int main()
{
  func(); //1
  extern int num;
  printf("%d",num); //2
  return 0;
}

int num = 3;

int func()
{
  printf("%d\n",num);
}

#define            定义一个预处理宏

#undef            取消宏的定义
#ifdef              判断某个宏是否被定义,若已定义,执行随后的语句:

#ifdef ABC
// ... codes while definded ABC
#elif (CODE_VERSION > 2)
// ... codes while CODE_VERSION > 2
#else
// ... remained cases
#endif // #ifdef ABC

#include <stdio.h>
using namespace std;

main函数参数:

int main(int argc, char ** argv)
{
  int i;
  for (i = 0; i < argc; i++)
  printf("Argument %d is %s\n", i, argv[i]);
  return 0;
}

 

 argc=5 , argv是数组名,argv[ 1 ]:a

posted @ 2020-09-22 15:05  Jary霸  阅读(442)  评论(0编辑  收藏  举报