1. gcc 扩展名简介:
.c c语言
.cc c++语言
.C c++语言
.cpp c++语言
.h 头文件
.i 预处理过的c语言
.ii 预处理过的c++语言
.o 编译后的目标文件,二进制
.s 汇编语言代码
.a 静态库(多个 .o 文件打包,就形成 .a)
.so 共享库(动态库)
2. linux GCC 常用命令 (终端输入)
注意:该目录下有好多命令都是以后课程才学到的;
whoami 可以知道当前使用的帐号
who 查看用户名和终端类型
uname 查看内核版本
-a
date 查看系统时间
umask 查看当前系统权限掩码
cal 显示日历
bc 计算器
locale 查看系统字体
df 显示文件系统
-h
mount 列出所有分区
pwd 查看当前目录的绝对路径
clear 把当前屏幕上的所有内容清除
cd 切换目录命令
cd /usr/include/c++
ls 查看目录内容命令
ls 命令支持 -a 和 -l 选项,
-a 选项可以把所有内容都显示在屏幕上,不显示每个文件的详细信息
-l 选项可以显示每个文件或目录的详细信息;
-a 选项和 -l 选项可以合并成 -al。
-i 文件 i 节点
ls /sys/bus 查看系统总线
touch 新建文件,如果文件已经存在,则会修改文件时间
mkdir 新建文件夹
用 -p 命令可以同时创建多个具有父子关系的目录(循环创建)
rmdir 删除空文件夹
rm 删除文件或空文件夹
rm -r aa 强制删除 aa 非空文件夹
mv 移动或更名文件
mv a.c aa.c 把 a.c 改名为 aa.c
mv a.c /c 把 a.c 移动到 c 文件夹
mv *.c /c 把所有 .c 文件移动到 c 文件夹
cp 复制
cp a.c aa.c 同文件夹下,a.c 复制为 aa.c
cp *.c /c 所有 .c 文件复制到 c 文件夹下
cp -r xxx xxxxx 文件夹复制
cp -a xxx 当有软链接的时候,需要加 -a
ln 命令可以制作链接文件,分为硬链接和软链接
硬链接:
# ln 文件 硬链接名
软链接:
ln -s 文件/目录 软链接名
more 显示文件内容
clare 清屏
ps 可以察看当前终端窗口中运行的所有程序,每个程序都有一个进程 ID
# ps -efl
# ps -efl | grep 10086 // 查看具体某一个进程
# ps -efl | grep a.out
# ps -efl | more // 按页显示;回车查看;
(详情参见《UC笔记》DAY07)
pstree 以树状图显示程序
ipcs 查看共享内存/消息队列
# ipcs -m // 显示共享内存 (m: memory)
# ipcs -q // 显示消息队列 (q: queue)
# ipcs -s // 显示信号量 (s: semphore)
# ipcs -a // 显示所有 IPC 对象 (a: all)
ipcrm 删除共享内存/消息队列
# ipcrm -m ID // 删除具体某一个共享内存;
# ipcrm -q ID
# ipcrm -s ID
kill 可以强制终止一个程序的运行,需要使用那个程序的进程 ID,可以使用 -9 选项强制终止
kill -2 xxxxxxx,相当于 <Ctrl+C>,终止某一个进程;
jobs 查看后台暂停程序
top 查看后他程序,每两秒更新一次,相当于 windows 的资源管理器
fg 将后台程序调到前台
bg 让工作在后台进行
free 显示内存状态
uptime 显示目前系统开机时间
netstat 显示网络状态
echo 查看环境变量/显示指定文本
$ echo hello word ! 1>xxx.txt // 把 hello word! 字符串写入 xxx.txt 文件里(输出重定向)
$ echo hello, word >xxx.txt // 如果不写 1 就不能写感叹号,bashell 不识别;
wc 查看文件信息
cat 查看文件内容
cat xxx.txt
cat /dev/null>xxx.dat // 清空 xxx.dat 文件
cat /proc/cpuinfo // 查看系统信息
cat /proc/devices // 查看正在运行的设备号
sudo 可以使用最高权限执行某些命令
chmod 文件权限设置
chmod +x arr.c
find 查找
find ./ -name xxx
which 查找
file 查看文件信息
man 系统帮助
man rand 或者 man 2 rand
info 和 man 一样,查看帮助手册
yum 在线升级
startx 进入图形界面
tar 可以用来实现打包压缩处理,和解压缩
压缩方法:
tar -zcvf day03.tar.gz day03
(这个命令可以把 day03 目录制作成 day03.tar.gz 文件)
压缩文件名应该以.tar.gz作为扩展名
解压缩方法:
tar -zxvf day03.tar.gz
tar xf day03.tar.gz
z:调用 zip 压缩工具;
x:解压缩的意思;
v:显示解压缩过程;
f:解压缩文件命令;
nm 查看目标或者库文件
nm xxx.o
hexdump 十六进制查看
diff 判断两个文件是否一样
diff a.out b.out
poweroff 关机
reboot 重启
ifconfig 显示网络设备(查看 ip 地址)
history 历史记录
insmod 加载内核模块
rmmod 移除内核模块
lsmod 查看运行中内核模块
modinfo 查看具体某一个内核模块
grep -R "xxxx" ./* 查找某些函数或者函数名 /**/
grep -R "xxxx" ./* | grep '\.h' /**/
export PS1=## 配置终端前头提示符只显示 ##
mount -t proc proc /tmp 挂载文件系统
mknod console c 5 1 挂载设备文件
mkfs.ext4 /dev/sdb1 格式化硬盘
du -hs xxx 查看文件夹大小
export CC=arm-linux-gcc 修改默认编译器,对当前 shell 有效
sudo passwd root 设置超级用户密码
sudo apt-get install xxx 在线安装软件
dpkg -i 安装包名字 离线安装,后缀名 .deb,UBUNTU 系统
rpm -ivh 安装包名字 离线安装,后缀名 .rpm,RED HAT 系统
sudo /etc/init.d/tftpd-hpa restart 重启 tftp 服务
sudo /etc/init.d/nfs-kernel-server restart 重启 nfs 服务
arm-linux-readelf -d xxx 查看和 xxx 文件相关的动态库
arm-linux-strip hello.o 减小目标文件体积
arm-linux-objdump -S hello.o >hello.asm 反汇编
arm-linux-objcopy -O binary hello.elf hello.bin 去掉头文件信息
gcc code.c 编译
./a.out 执行
ctrl + c 中断死循环
编辑: vi hello.c -> hello.c
预编译:gcc -E hello.c -o hello.i -> hello.i ---+
编译: gcc -S hello.i -> hello.s | GCC
汇编: gcc -c hello.s -> hello.o | 工具链
链接: gcc hello.o -o hello -> hello ---+
gcc -c code.c 只编译,不生成可执行程序。编译后生成 .o 目标文件,通常用于编译不包含主程序的子程序文件;
gcc hello.o -o hello 给 hello.o 重命名为 hello
gcc -x c++ code.c -lstdc++ 指定 gcc 编译器用 c++ 的方式编译
-std=c89/-std=c99 指定编译所采用的规范版本
gcc -std=c99 xxx.c
大型应用程序调试,一般使用 gdb 工具查看 core 文件,依次执行下面五行命令:
ulimit -c unlimited 取消禁止生成 core 文件,该文件里保存出错信息
gcc mian.c -g 重新编译程序,-g 允许 gdb 调试
a.out 重新执行错误文件,会生成 core 文件
gdb a.out -c core 用 gdb 查看 core 文件
(gdb) bt 打印执行路径
内核出错调试命令:
cat /proc/kallsyms > info.txt 内核用到的所有函数都以符号的形式列在 kallsyms 里
arm-linux-objdump -D xxx.ko > error.txt 反汇编,根据 pc 寄存器指向地址找到出错代码
终端下,不同颜色对应的文件类型:
绿色:可执行文件
亮蓝色:软链接
暗蓝色:文件夹
暗红色:套接字
黑底黄字:设备文件(c-字符设备,b-块设备/存储设备)
黑底红字:没有目标文件的软链接/错误软链接
这些命令都是在 shell 里面输入的,那么什么是 shell 呢 ?
1)shell 是操作系统最外面的一层,俗称壳,
2)shell 基本上是一个命令解释器,相当于 windows 下的 cmd 命令框;管理你于操作系统之间的交互;
3. 普通模式下输入:
:w 保存文件
:q 退出
:q! 强制退出,不保存
:wq 保存退出
:x 保存退出
:e 刷新
:nohls 清除标记
:129 跳到 129 行
/xxx 查找 xxx
ZZ 保存退出,不需要冒号
:r /root/code.c 把 code.c 文件拷贝到当前文档后面
:%s /;/, 把所有分号换为逗号
:22,28 co 29 把 22 到 28 行复制到 29 行之后;
:22,28 mo 29 把 22 到 28 行剪切到 29 行之后;
4. 普通模式下键入:
i 当前插入;
I 当前行首插入;
a 后移一位插入;
A 当前行尾插入;
o 下一行插入;
O 上一行插入;
r 替换当前一个字符;
R 替换当前 n 个字符,直到按 esc 结束;
H 屏幕首;
M 屏幕中;
L 屏幕尾;
G 跳到文件尾;
gg 跳到文件首; // 相当于 :1
x 删除当前字符;
dd 剪切当前行;
ndd 剪切n行;
yy 复制当前行;
nyy 复制n行;
p 粘贴;
u 取消上一次修改;
U 取消所有修改;
. 重复上一次修改;
5. vi编译器格式设置:
vi ~/.vimrc 进入enter
// 常用的四个设置:
set nu // 显示行号;
set cindent // 自动缩进;
set shiftwidth=4
set tabstop=4 // 设置 tab 键
// 不常用的设置:
set nonu // 取消行号;
set hlsearch // 高亮搜索;
set backup // 自动存档,当你改变文件时,原文件会被另存为 filename~ 的一个文件;
set ruler // 显示右下角状态栏;
set showmode // 在左下角显示 --INSERT--等字样;
set backspace=(012) // 为 2 的时候,backspace 键可以删除任意字符;为 0/1 时,仅可删除刚输入的字符,原字符无法删除;
set all // 在保存完文件时,显示目前所有环境参数设定值;
syntax on // 语法高亮;
syntax off // 关闭语法高亮;
set bg=light // 设定关键字颜色(默认);
set bg=dark // 设定关键字颜色;
vi 和 vim 的区别:
1)多极撤销
在 vim 里可以不限制的撤销
2)易用性
vi 只能运行于 unix 系统,vim 可以运行于多系统;
3)语法加亮
4)完全兼容 vi
6. 所有绝对路径都是以/做开头的;
相对路径是从某一个文件夹开始描述另外一个文件夹的位置;
. 代表当前文件夹
.. 代表当前目录的父目录
7. 脚本文件可以包含多条操作命令,执行脚本文件就相当于按顺序执行内部的所有操作命令。
脚本文件制作完成后需要添加执行属性,使用 chmod 命令,方法如下
chmod <属性值> 文件路径
.c c语言
.cc c++语言
.C c++语言
.cpp c++语言
.h 头文件
.i 预处理过的c语言
.ii 预处理过的c++语言
.o 编译后的目标文件,二进制
.s 汇编语言代码
.a 静态库(多个 .o 文件打包,就形成 .a)
.so 共享库(动态库)
2. linux GCC 常用命令 (终端输入)
注意:该目录下有好多命令都是以后课程才学到的;
whoami 可以知道当前使用的帐号
who 查看用户名和终端类型
uname 查看内核版本
-a
date 查看系统时间
umask 查看当前系统权限掩码
cal 显示日历
bc 计算器
locale 查看系统字体
df 显示文件系统
-h
mount 列出所有分区
pwd 查看当前目录的绝对路径
clear 把当前屏幕上的所有内容清除
cd 切换目录命令
cd /usr/include/c++
ls 查看目录内容命令
ls 命令支持 -a 和 -l 选项,
-a 选项可以把所有内容都显示在屏幕上,不显示每个文件的详细信息
-l 选项可以显示每个文件或目录的详细信息;
-a 选项和 -l 选项可以合并成 -al。
-i 文件 i 节点
ls /sys/bus 查看系统总线
touch 新建文件,如果文件已经存在,则会修改文件时间
mkdir 新建文件夹
用 -p 命令可以同时创建多个具有父子关系的目录(循环创建)
rmdir 删除空文件夹
rm 删除文件或空文件夹
rm -r aa 强制删除 aa 非空文件夹
mv 移动或更名文件
mv a.c aa.c 把 a.c 改名为 aa.c
mv a.c /c 把 a.c 移动到 c 文件夹
mv *.c /c 把所有 .c 文件移动到 c 文件夹
cp 复制
cp a.c aa.c 同文件夹下,a.c 复制为 aa.c
cp *.c /c 所有 .c 文件复制到 c 文件夹下
cp -r xxx xxxxx 文件夹复制
cp -a xxx 当有软链接的时候,需要加 -a
ln 命令可以制作链接文件,分为硬链接和软链接
硬链接:
# ln 文件 硬链接名
软链接:
ln -s 文件/目录 软链接名
more 显示文件内容
clare 清屏
ps 可以察看当前终端窗口中运行的所有程序,每个程序都有一个进程 ID
# ps -efl
# ps -efl | grep 10086 // 查看具体某一个进程
# ps -efl | grep a.out
# ps -efl | more // 按页显示;回车查看;
(详情参见《UC笔记》DAY07)
pstree 以树状图显示程序
ipcs 查看共享内存/消息队列
# ipcs -m // 显示共享内存 (m: memory)
# ipcs -q // 显示消息队列 (q: queue)
# ipcs -s // 显示信号量 (s: semphore)
# ipcs -a // 显示所有 IPC 对象 (a: all)
ipcrm 删除共享内存/消息队列
# ipcrm -m ID // 删除具体某一个共享内存;
# ipcrm -q ID
# ipcrm -s ID
kill 可以强制终止一个程序的运行,需要使用那个程序的进程 ID,可以使用 -9 选项强制终止
kill -2 xxxxxxx,相当于 <Ctrl+C>,终止某一个进程;
jobs 查看后台暂停程序
top 查看后他程序,每两秒更新一次,相当于 windows 的资源管理器
fg 将后台程序调到前台
bg 让工作在后台进行
free 显示内存状态
uptime 显示目前系统开机时间
netstat 显示网络状态
echo 查看环境变量/显示指定文本
$ echo hello word ! 1>xxx.txt // 把 hello word! 字符串写入 xxx.txt 文件里(输出重定向)
$ echo hello, word >xxx.txt // 如果不写 1 就不能写感叹号,bashell 不识别;
wc 查看文件信息
cat 查看文件内容
cat xxx.txt
cat /dev/null>xxx.dat // 清空 xxx.dat 文件
cat /proc/cpuinfo // 查看系统信息
cat /proc/devices // 查看正在运行的设备号
sudo 可以使用最高权限执行某些命令
chmod 文件权限设置
chmod +x arr.c
find 查找
find ./ -name xxx
which 查找
file 查看文件信息
man 系统帮助
man rand 或者 man 2 rand
info 和 man 一样,查看帮助手册
yum 在线升级
startx 进入图形界面
tar 可以用来实现打包压缩处理,和解压缩
压缩方法:
tar -zcvf day03.tar.gz day03
(这个命令可以把 day03 目录制作成 day03.tar.gz 文件)
压缩文件名应该以.tar.gz作为扩展名
解压缩方法:
tar -zxvf day03.tar.gz
tar xf day03.tar.gz
z:调用 zip 压缩工具;
x:解压缩的意思;
v:显示解压缩过程;
f:解压缩文件命令;
nm 查看目标或者库文件
nm xxx.o
hexdump 十六进制查看
diff 判断两个文件是否一样
diff a.out b.out
poweroff 关机
reboot 重启
ifconfig 显示网络设备(查看 ip 地址)
history 历史记录
insmod 加载内核模块
rmmod 移除内核模块
lsmod 查看运行中内核模块
modinfo 查看具体某一个内核模块
grep -R "xxxx" ./* 查找某些函数或者函数名 /**/
grep -R "xxxx" ./* | grep '\.h' /**/
export PS1=## 配置终端前头提示符只显示 ##
mount -t proc proc /tmp 挂载文件系统
mknod console c 5 1 挂载设备文件
mkfs.ext4 /dev/sdb1 格式化硬盘
du -hs xxx 查看文件夹大小
export CC=arm-linux-gcc 修改默认编译器,对当前 shell 有效
sudo passwd root 设置超级用户密码
sudo apt-get install xxx 在线安装软件
dpkg -i 安装包名字 离线安装,后缀名 .deb,UBUNTU 系统
rpm -ivh 安装包名字 离线安装,后缀名 .rpm,RED HAT 系统
sudo /etc/init.d/tftpd-hpa restart 重启 tftp 服务
sudo /etc/init.d/nfs-kernel-server restart 重启 nfs 服务
arm-linux-readelf -d xxx 查看和 xxx 文件相关的动态库
arm-linux-strip hello.o 减小目标文件体积
arm-linux-objdump -S hello.o >hello.asm 反汇编
arm-linux-objcopy -O binary hello.elf hello.bin 去掉头文件信息
gcc code.c 编译
./a.out 执行
ctrl + c 中断死循环
编辑: vi hello.c -> hello.c
预编译:gcc -E hello.c -o hello.i -> hello.i ---+
编译: gcc -S hello.i -> hello.s | GCC
汇编: gcc -c hello.s -> hello.o | 工具链
链接: gcc hello.o -o hello -> hello ---+
gcc -c code.c 只编译,不生成可执行程序。编译后生成 .o 目标文件,通常用于编译不包含主程序的子程序文件;
gcc hello.o -o hello 给 hello.o 重命名为 hello
gcc -x c++ code.c -lstdc++ 指定 gcc 编译器用 c++ 的方式编译
-std=c89/-std=c99 指定编译所采用的规范版本
gcc -std=c99 xxx.c
大型应用程序调试,一般使用 gdb 工具查看 core 文件,依次执行下面五行命令:
ulimit -c unlimited 取消禁止生成 core 文件,该文件里保存出错信息
gcc mian.c -g 重新编译程序,-g 允许 gdb 调试
a.out 重新执行错误文件,会生成 core 文件
gdb a.out -c core 用 gdb 查看 core 文件
(gdb) bt 打印执行路径
内核出错调试命令:
cat /proc/kallsyms > info.txt 内核用到的所有函数都以符号的形式列在 kallsyms 里
arm-linux-objdump -D xxx.ko > error.txt 反汇编,根据 pc 寄存器指向地址找到出错代码
终端下,不同颜色对应的文件类型:
绿色:可执行文件
亮蓝色:软链接
暗蓝色:文件夹
暗红色:套接字
黑底黄字:设备文件(c-字符设备,b-块设备/存储设备)
黑底红字:没有目标文件的软链接/错误软链接
这些命令都是在 shell 里面输入的,那么什么是 shell 呢 ?
1)shell 是操作系统最外面的一层,俗称壳,
2)shell 基本上是一个命令解释器,相当于 windows 下的 cmd 命令框;管理你于操作系统之间的交互;
3. 普通模式下输入:
:w 保存文件
:q 退出
:q! 强制退出,不保存
:wq 保存退出
:x 保存退出
:e 刷新
:nohls 清除标记
:129 跳到 129 行
/xxx 查找 xxx
ZZ 保存退出,不需要冒号
:r /root/code.c 把 code.c 文件拷贝到当前文档后面
:%s /;/, 把所有分号换为逗号
:22,28 co 29 把 22 到 28 行复制到 29 行之后;
:22,28 mo 29 把 22 到 28 行剪切到 29 行之后;
4. 普通模式下键入:
i 当前插入;
I 当前行首插入;
a 后移一位插入;
A 当前行尾插入;
o 下一行插入;
O 上一行插入;
r 替换当前一个字符;
R 替换当前 n 个字符,直到按 esc 结束;
H 屏幕首;
M 屏幕中;
L 屏幕尾;
G 跳到文件尾;
gg 跳到文件首; // 相当于 :1
x 删除当前字符;
dd 剪切当前行;
ndd 剪切n行;
yy 复制当前行;
nyy 复制n行;
p 粘贴;
u 取消上一次修改;
U 取消所有修改;
. 重复上一次修改;
5. vi编译器格式设置:
vi ~/.vimrc 进入enter
// 常用的四个设置:
set nu // 显示行号;
set cindent // 自动缩进;
set shiftwidth=4
set tabstop=4 // 设置 tab 键
// 不常用的设置:
set nonu // 取消行号;
set hlsearch // 高亮搜索;
set backup // 自动存档,当你改变文件时,原文件会被另存为 filename~ 的一个文件;
set ruler // 显示右下角状态栏;
set showmode // 在左下角显示 --INSERT--等字样;
set backspace=(012) // 为 2 的时候,backspace 键可以删除任意字符;为 0/1 时,仅可删除刚输入的字符,原字符无法删除;
set all // 在保存完文件时,显示目前所有环境参数设定值;
syntax on // 语法高亮;
syntax off // 关闭语法高亮;
set bg=light // 设定关键字颜色(默认);
set bg=dark // 设定关键字颜色;
vi 和 vim 的区别:
1)多极撤销
在 vim 里可以不限制的撤销
2)易用性
vi 只能运行于 unix 系统,vim 可以运行于多系统;
3)语法加亮
4)完全兼容 vi
6. 所有绝对路径都是以/做开头的;
相对路径是从某一个文件夹开始描述另外一个文件夹的位置;
. 代表当前文件夹
.. 代表当前目录的父目录
7. 脚本文件可以包含多条操作命令,执行脚本文件就相当于按顺序执行内部的所有操作命令。
脚本文件制作完成后需要添加执行属性,使用 chmod 命令,方法如下
chmod <属性值> 文件路径