darkflames
2018-02-23 11:56:43
打开命令行
在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
删除文件或目录,参数
删除文件可以直接无参数执行,删除目录则需要使用-r
通常我们可以直接使用-rf参数直接删除指定的目录或文件
$ rm -rf app/src
$ rm -rf /home/darkflames/app
pwd
显示当前工作目录的绝对路径
编辑
$ 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参数忽略行末空格
#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;
}
#!/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