NOI Ubuntu 20.04.1 系统的一些基本操作
这是 NOI Ubuntu 20.04.1 系统中一些程序的基本使用方法。
Linux 是内核!内核!内核!Ubuntu 才是系统的名字,就像 Windows 一样。
Terminal:终端
按 Ctrl+Alt+T 打开终端。
按 Ctrl+C 强行停止当前执行的命令。
按 Ctrl+D 退出终端
Ubuntu 的目录
Ubuntu 是没有 Windows 下硬盘分区的概念的,所有设备均会被挂载到一个统一的文件系统,Ubuntu 的目录有两种:
-
绝对目录:
相对于文件系统的根目录 "/" 来定位文件,如:/etc/apt/source.list,/var/www/ -
相对目录:
相对于当前工作目录而言,比如工作目录位于 "/etc/apt" ,/etc/apt/source.list也可以表示为source.list或./source.list。
输入文件路径可以将文件直接拖入终端中,使用拖放 输入路径、移动复制文件 的操作只能在 nautilus(文件管理器)的窗口中使用。
注意:密码、路径或文件名中有空格时需要加引号!!!
$ l [DIR]
-
l查看当前目录下的文件和文件夹,显示规则如下:普通文件: a.cpp
可执行文件: unnamed*
文件夹: abc/
用户有写入权限的文件夹: abc/
压缩文件: 123.tar
图像/Socket文件: a.png
链接文件: lib@
设备文件: tty -
l DIR查看 "DIR" 目录下的文件和文件夹 -
l -l查看文件属性
$ ls [DIR](常用)
- 是 l simplified 的意思,将
l [DIR]的显示做了简化,用法相同。显示规则如下:
普通文件: a.cpp
可执行文件: unnamed
文件夹: abc
用户有写入权限的文件夹: abc
压缩文件: 123.tar
图像/Socket文件: a.png
链接文件: lib
设备文件: tty
$ cd [DIR](常用)
-
cd DIR进入 "DIR" 文件夹 -
cd ..后退一层目录 -
cd ../..后退两层目录,以此类推,目录层数不足(超过根目录)时执行失败
$ pwd Print Working Directory ,显示当前所在目录的绝对路径
$ touch a.cpp 在当前目录下新建名为 "a.cpp" 的文件[1]
$ mkdir abc Make Directory ,在当前目录下新建名为 "abc" 的文件夹,也可以使用 右键 > New Folder 新建文件夹。
$ mv [FROM] [TO] Move ,移动文件
$ cp [FROM] [TO] Copy ,复制文件
$ nautilus 打开文件资源管理器
$ rm [FILENAME/DIR] Remove
-
rm a.cpp删除当前目录下的文件 "a.cpp" -
rm -r abc删除当前目录下的文件夹 "abc" -
rm -f a.cpp强制删除文件 "a.cpp" -
rm -rf abc强制删除文件夹 "abc"
$ g++ [INPUT] -o [OUTPUT] 编译命令(常用)
一般使用:g++ a.cpp -o unnamed -Wall -g 将代码 "a.cpp" 编译为程序 "unnamed" ,如果文件名中有空格要加引号。
-
g++ :C / C++ 编译器
-
-o编译命令 -
-wall开启所有错误提示(warn all) -
-Wall开启所有错误提示和警告 -
-g将调试信息写入程序,不常用gdb调试也可以不加。
以下命令的不会在比赛中涉及:
-
-O2开启O2优化 -
-lpthread开启多线程 -
-D [TEXT]定义宏[2]
$ ./unnamed 运行当前目录下名为 "unnamed" 的程序,注意:Ubuntu 中没有后缀名的概念。(常用)
$ time ./unnamed 计时启动程序 "unnamed" ,可以用来卡时间
$ zip [OUTPUT] [DIR/FILENAME] 压缩文件
-
zip a.zip abc将文件夹 "abc" 压缩为 "a.zip" -
-rP 123456设置密码 "123456"
$ unzip [INPUT] 解压文件(常用)
-
unzip a.zip解压 "a.zip" 至当前目录 -
-P 123456压缩包有密码,使用密码 "123456" 解压 -
-d abc将文件解压至 "abc" 文件夹中(Destination Floder)
$ diff [FILENAME1] [FILENAME2] 比较文件
-
diff test.out test.ans比较两文件的差异 -
-b忽略行末空格
$ cat a.txt Concatenate(还不如记成“猫”),显示 "a.txt" 的内容
$ echo “123” >a.txt 或 printf “123” >a.txt 将 "123" 写到 "a.txt" 中
$ man [COMMAND] 或 * --help 显示命令用法(常用)
$ exit 退出终端 (常用)
Nautilus:文件资源管理器
-
按
F2 重命名(桌面也可用) -
Ctrl+X 剪切, Ctrl+C 复制, Ctrl+V 粘帖
-
按 Ctrl+N 新建一个在当前目录的文件资源管理器窗口
-
按 Ctrl+Shift+N 新建文件夹
-
按 Back 后退一层目录
-
在两个窗口间拖放文件以复制和移动
gdb 调试
GNU Debug ,在终端中输入 $ gdb unnamed 使用 gdb 对程序 "unnamed" 进行调试,前提是编译时写入了调试信息。
-
l n或list n:查看代码(第 n 行上下 10 行)。例如:l 9查看第 4 到 12 行的代码 -
b n或break n:在第 n 行设置断点 -
b n if i==9:当变量 i 等于 9 时,在第 n 行设置断点,可以用于 for 循环的调试 -
r或run:运行 -
n或next:单步执行 -
s或step:单步进入(某函数) -
c或continue:继续执行 -
p a或print a:查看变量 a 的值 -
disp a:持续显示变量 a -
q或qiut:退出 -
info break或info breakpoints:查看断点信息 -
d n或d n-m:删除第 n 个断点 或 删除第 n-m 个断点
Code::Blocks
新建源码
-
点击 File -> New -> Project -> console application(控制台程序)新建 C/C++ 程序。
-
不要新建 Empty File(空文件),在 Code::Blocks 中空文件不能进行调试。
-
Project Filename 的后缀名就是 .cbp ,不要随意更改。
-
主程序代码在左侧 Sources 文件夹中,名为 "main.cpp" ,内容默认为 Hello World 例程。
设置选项
-
在 Settings(设置)-> Editor(编辑器)-> Font(字体)中,点击 Choose 设置字体(就在第一行)。
-
在 Settings(设置) -> Compiler(编译器)-> Font(字体)-> Global compiler settings(全局编译设置)右面下方的 Debugging 菜单中勾选 " ...... [-g]" 一项。
开始编程
-
按 F5 设置断点
-
编译按钮 翻译:
编译,运行,编译并运行,重新生成。 -
调试按钮 翻译:
调试/继续,运行到光标处,下一行,跟进,跟出,下一条指令,转到指令,中断调试,停止调试器。 -
调试窗口 翻译:
(从上到下)断点,CPU寄存器,调用栈,反汇编,内存崩溃信息,运行线程,监视变量。
Gedit
简单写一下,具体可以看我写的 如何把Ubuntu的Gedit改成简单的IDE 。
在终端中输入 $ gedit a.cpp 用 gedit(文本编辑器)打开 "a.cpp" ,如果不存在,gedit 将新建一个名为 "a.cpp" 的空白文件。注意:gedit 中可以识别文件的后缀名。
Preference:
-
Editor:设置 Tab 距离为 4 ,自动缩排
-
Font & Colors:不使用系统字体,选择 Ubuntu Mono Regular 20
-
Plugins:勾选 External Tools 扩展工具
Manage External Tools:
-
Compile:
#!/bin/sh cd $GEDIT_CURRENT_DOCUMENT_DIR g++ $GEDIT_CURRENT_DOCUMENT_NAME -o unnamed -Wall -g快捷键:F2
保存:当前文档
输入:无
输出:展示在下方面板 -
Run:
#!/bin/sh cd $GEDIT_CURRENT_DOCUMENT_DIR time ./unnamed快捷键:F3
保存:无
输入:无
输出:展示在下方面板 -
Open:
#!/bin/sh killall unnamed gedit ./*.out快捷键:F4
保存:无
输入:无
输出:展示在下方面板 -
Open 需要程序有输出,在 C/C++ 中:
输入:apple.in
输出:apple.out#include <cstdio> int main() { freopen("apple.in","r",stdin); freopen("apple.out","w",stdout); ... }
Vim
在终端中输入 $ vim a.txt 用 vim(文本编辑器)打开 "a.txt" 。
文件操作
-
r a.txt读取文件 "a.txt" -
w a.txt写入(保存到)"a.txt" -
q退出 vim -
wq写入并退出
编辑
-
iinsert ,进入插入模式,按 ESC 退出 -
[[将光标移动到代码块的开头 -
]]将光标移动到代码块的结尾 -
G将光标移动到最后一行 -
xG将光标移动到第 x 行
详细用法
想深入学习 Vim 编辑器的用法可以看看这些文章:
快捷键
很多和 Windows 是一样的:
Ctrl+A:全选
Ctrl+C:复制
Ctrl+X:剪切
Ctrl+V:粘帖
Ctrl+F:查找
Ctrl+G/H:替换
Ctrl+N:新文档
Ctrl+O:打开文档
Ctrl+S:保存文档
Ctrl+Z:撤销
Ctrl+Y:重做
Ctrl+Tab:切换窗口
Win+D:显示桌面
Win+Space:切换输入法
Ctrl+Alt+Delete:注销
Ctrl+Alt+F1:强行注销
Ctrl+Alt+F2:退出完全终端
Ctrl+Alt+F3F4F5F6:完全终端
注释:
touch的本意并非创建文件,而是:- touch — change file access and modification times (BSD)
- touch — change file timestamps (GNU)
即“修改文件的访问和修改时间”、“修改时间戳”,也就是摸一下好看上去最近动过了。
↩︎-D ONLINE_JUDGE定义名为 "ONLINE_JUDGE" 的宏,洛谷、Vjudge 等OJ平台一般都有此定义。
在程序中可以这样使用:
↩︎int function() { #ifdef ONLINE_JUDG printf("如果定义了ONLINE_JUDG,这句就会被编译到程序里"); #endif #ifndef ONLINE_JUDG printf("如果没有定义ONLINE_JUDG,这句就会被编译到程序里"); #endif }

浙公网安备 33010602011771号