Noi Linux的使用
一、Linux 的基本操作(命令行)
- 打开命令行在Noi Linux中可以使用快捷键CTRL + ALT + T打开命令行终端
- Linux的目录Linux是没有Windows下硬盘分区的概念的所有设备均会被挂载到一个统一的文件系统,Linux下的目录有两种:
- 绝对目录:相对于文件系统的根目录(/)来定位文件,如: /etc/apt/source.list, /var/www/
- 相对目录:相对于当前工作目录而言,比如工作目录位于/etc,/etc/apt/source.list也可以表示为apt/source.list或./apt/source.list
Linux下一个核心的思想就是一切皆文件,是没有扩展名这一个概念的,有时文件名被写作xxx.xxx也只是为了方便标识或分隔,并不被程序或者操作系统分别处理同时还有一些特殊的路径表示,比如可以用./表示当前目录../表示父目录 - 文件操作的相关命令
- ls显示当前目录的所有文件与目录
$ ls
显示指定目录的所有文件与目录$ ls [DIR] $ ls /etc $ ls /var/www
- cd进入指定目录
$ cd [DIR] $ cd /etc $ cd app/src $ cd ..
- mkdir创建子目录(新建文件夹)可以使用参数 -p 确保目录名称存在,不存在的就建一个
$ mkdir src $ mkdir -p /home/darkflames/test
- mv & cpmv 是将一个目录或文件移动到另一个目录cp 是将一个目录或文件复制到另一个目录
$ mv app/src /etc/app/src $ cp app/src /etc/app/src
- rm删除文件或目录,参数
- -i 删除前逐一询问确认。
- -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
- -r 将目录及以下之档案亦逐一删除。
删除文件可以直接无参数执行,删除目录则需要使用-r通常我们可以直接使用-rf参数直接删除指定的目录或文件$ rm -rf app/src $ rm -rf /home/darkflames/app
- pwd显示当前工作目录的绝对路径
二、如何写代码
- 使用Noi Linux自带的guide
- 使用emacs/vim/gedit 命令行编译,同时可以使用gdb
命令行下编辑,编译,运行程序
- 编辑
$ vim [FILE] $ gedit [FILE]
- 编译
$ g++ code.cpp #输出文件默认为a.out $ g++ code.cpp -o code #输出文件为code $ g++ code.cpp -o code -O2 # 开启O2优化 $ g++ code.cpp -o code -Wall #显示所有警告建议开启
- 运行程序
$ ./code $ ./a.out
- 其他辅助工具
$ time ./code #统计运行时间 $ diff -b test.out test.ans # 比较文件差异,-b参数忽略行末空格
对拍
CPP
#include<bits/stdc++.h>
using namespace std;
#define _DO_CMDS(cmds) for(int _index = 0; _index < sizeof(cmds) / 4; _index++){ system((cmds[_index])); }
char* build[] = {
"g++ test.cpp -o test",
"g++ gen.cpp -o gen -O2",
"g++ std.cpp -o std -O2"
};
char* genData[] = {
"./gen > data.in",
"./std < data.in > data.ans"
};
int main() {
_DO_CMDS(build);
for(int i = 0; i < 100 ; i++) {
_DO_CMDS(genData);
printf("CASE: %d", i);
if(system("./test < data.in > data.out") != 0) {
printf("RE\n");
break;
}
else if(system("diff -b data.out data.ans")) {
printf("WA\n");
break;
}
else printf("AC\n");
printf("#####################################");
}
return 0;
}
Shell
#!/bin/bash
g++ test.cpp -o test
g++ std.cpp -o std -O2
g++ gen.cpp -o gen
i=1
tot=100
while [ $i -le $ tot ]; do
./gen > data.in
./std < data.in > data.ans
./test < data.in > data.out
if [ $? -ne 0 ]; then
echo -e "CASE $i: RE"
break
elif diff -b data.ans data.out ; then
echo -e "CASE $i: AC"
else
echo -e "CASE $i: WA"
break
fi
let i++
done
评论
发表评论