Noi Linux的使用
darkflames · · 个人记录
一、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 & cp
mv 是将一个目录或文件移动到另一个目录
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