Noi Linux的使用

darkflames

2018-02-23 11:56:43

Personal

### 一、Linux 的基本操作(命令行) 1. 打开命令行 在Noi Linux中可以使用快捷键**CTRL + ALT + T**打开命令行终端 2. Linux的目录 Linux是没有Windows下硬盘分区的概念的所有设备均会被挂载到一个统一的文件系统,Linux下的目录有两种: * 绝对目录: 相对于文件系统的根目录(/)来定位文件,如: **/etc/apt/source.list**, **/var/www/** * 相对目录: 相对于当前工作目录而言,比如工作目录位于**/etc**,**/etc/apt/source.list**也可以表示为**apt/source.list**或**./apt/source.list** Linux下一个核心的思想就是一切皆文件,是没有扩展名这一个概念的,有时文件名被写作xxx.xxx也只是为了方便标识或分隔,并不被程序或者操作系统分别处理 同时还有一些特殊的路径表示,比如可以用**./**表示当前目录**../**表示父目录 3. 文件操作的相关命令 * ls 显示当前目录的所有文件与目录 ```bash $ ls ``` 显示指定目录的所有文件与目录 ```bash $ ls [DIR] $ ls /etc $ ls /var/www ``` * cd 进入指定目录 ```bash $ cd [DIR] $ cd /etc $ cd app/src $ cd .. ``` * mkdir 创建子目录(新建文件夹) 可以使用参数 -p 确保目录名称存在,不存在的就建一个 ```bash $ mkdir src $ mkdir -p /home/darkflames/test ``` * mv & cp **mv** 是将一个目录或文件移动到另一个目录 **cp** 是将一个目录或文件复制到另一个目录 ```bash $ mv app/src /etc/app/src $ cp app/src /etc/app/src ``` * rm 删除文件或目录,参数 - **-i** 删除前逐一询问确认。 - **-f** 即使原档案属性设为唯读,亦直接删除,无需逐一确认。 - **-r ** 将目录及以下之档案亦逐一删除。 删除文件可以直接无参数执行,删除目录则需要使用-r 通常我们可以直接使用**-rf**参数直接删除指定的目录或文件 ```bash $ rm -rf app/src $ rm -rf /home/darkflames/app ``` * pwd 显示当前工作目录的绝对路径 ### 二、如何写代码 1. 使用Noi Linux自带的**guide** 2. 使用emacs/vim/gedit 命令行编译,同时可以使用gdb #### 命令行下编辑,编译,运行程序 1. 编辑 ```bash $ vim [FILE] $ gedit [FILE] ``` 2. 编译 ```bash $ g++ code.cpp #输出文件默认为a.out $ g++ code.cpp -o code #输出文件为code $ g++ code.cpp -o code -O2 # 开启O2优化 $ g++ code.cpp -o code -Wall #显示所有警告建议开启 ``` ​ 3. 运行程序 ```bash $ ./code $ ./a.out ``` 4. 其他辅助工具 ```bash $ time ./code #统计运行时间 $ diff -b test.out test.ans # 比较文件差异,-b参数忽略行末空格 ``` ### 对拍 #### CPP ```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 ```bash #!/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 ``` ​