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