登录或启动终端,显示shell提示符——>输入shell命令回车——>shell启动子进程,寻找应用程序并传递参数——>执行应用程序并显示结果——>通知shell执行完毕,子进程终止——>返回shell提示符
例如:sh(进入shell)——>pstree | less(查看进程树)——>exit(退出)
echo $SHELL(查看使用的shell类型)
(1)输入输出重定向:
命令>文件:输出到文件
命令>>文件:输出追加到文件
(2)管道:将某个程序的输出直接送到另一个程序,作为输入。
命令1|命令2|命令3...
(3)后台运行命令:
命令$
jobs(正在运行的程序)
fg %后台运行程序的编号(将这个程序放在前台)
*:若干个字符
?:一个字符
tab键补全命令
上下键调用历史命令
history:查看在终端运行过的命令
history n
! n(运行编号为n的命令)
命令别名
alias |||='ls -l -i'
bin:普通用户常用例程,如date
dev:存放系统中所有设备名
home:普通用户的主目录
lib:内核和应用程序所用的库文件和模块
root:根用户的主目录
usr:用户安装的应用程序
boot:Linux内核、开机配置文件
etc:与系统硬件和软件有关的配置文件
media:关盘、软盘挂载点
mnt:其他临时分区的挂载点
proc:内存文件系统
sbin:根用户用于系统管理的可执行文件
tmp:临时文件
var:各种服务器的数据文件、日志、假脱机打印系统的打印队列数据等
(1)查看文档的命令
cat、more(只能向下翻)、less(上下都能翻)
(2)Linux的帮助系统:
手页册:man command
语法:
man+(选项)+参数
选项:
-a:在所有的man帮助手册中搜索;
-f:等价于whatis指令,显示给定关键字的简短描述信息;
-P:指定内容时使用分页程序;
-M:指定man手册搜索的路径。
section:
1 - commands //普通的命令
2 - system calls //系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 - library calls //库函数,如printf,fread
4 - special files //特殊文件,也就是/dev下的各种设备文件
5 - file formats and convertions //指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 - games for linux //给游戏留的,由各个游戏自己定义
7 - macro packages and conventions //附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 - system management commands //系统管理用的命令,这些命令只能由root使用,如ifconfig
9 - 其他
想要指定section就直接在man的后面加上数字,比如: man 1 ls
info命令
ls:获取目录中的文件列表(文件权限)
mkdir、rmdir:新建目录、删除目录
cd:切换目录
pwd:查看当前目录
touch:新建文件/刷新文件时间
mv:问件改名/移动
cp:复制文件
rm:删除文件
who:确定系统当前用户的信息
ps:列出系统当前进程 ps-aux //列出系统所有进程
pstree:列出系统进程树
top:动态显示系统当前进程
date:显示和设置系统当前日期和时间
grep:查找文本中的字符串
clear:清屏
echo:回显命令
find:文件搜索命令
wc:文字统计工具
bc:计算器工具
head、tail:显示文件的前几行和后几行
(1)用gzip压缩/解压缩
tar -czvf k.tar.gz *
tar -xzvf k.tar.gz
(2)归档并用bzip2压缩/解压缩
tar -cjvf k.tar.bz2 *
tar -xjvf k.tar.bz2
高级语言编写的源代码文件——>交叉编译器——>目标文件——————————————
|
链接器——>可执行程序——>目标机平台
|
用目标机的汇编语言编写的源代码文件——>交叉汇编器——>目标文件————
编译开发工具:把源程序编译为可执行文件,如gcc。
调试工具:对可执行程序进行源码或汇编级调试的软件,如gdb。
软件工程工具:用于协助多人开发或大型软件项目管理的软件,如make等。
链接: link.
链接: link.
用gcc编译程序时,分为四个阶段 分步编译源程序
预处理(pre-processing) gcc -E hello.c -o hello.i
编译(compiling) gcc -S hello.c -o hello.s
汇编(assembing) gcc -c hello.c -o hello.o
链接(linking) gcc hello.c -o hello
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,例如 asm 或 typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO 以字符串"1"定义 MACRO 宏。
-DMACRO=DEFN 以字符串"DEFN"定义 MACRO 宏。
-E 只运行 C 预编译器。
-g 生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
-m486 针对 486 进行代码优化。
-o FILE 生成指定的输出文件。用在生成可执行文件时。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
-shared 生成共享目标文件。通常用在建立共享库时。
-static 禁止使用共享连接。
-UMACRO 取消对 MACRO 宏的定义。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
gcc -v 查看gcc版本
gcc f1.c -o f2 (gcc f1.c(生成的程序为a.out))
(1)函数库:头文件(.h)+库文件(.so、.alias)
(2)系统能够识别的默认路径:
头文件:/usr/include
库文件:/usr/lib
(3)使用非默认路径的文件需在编译时指定路径
头文件用 "-l"
库文件用 "-L",-l后的参数指明要寻找库
要使用gdb调试程序,在用gcc编译源文件时要指定 -g 选项,以使程序中包含必要的信息。
目标文件:依赖文件
[tab]生成规则
(1)make会在当前目录下按顺序寻找GNUmakefile,makefile,Makefile
(2)如未找到则报错,如找到,则把第一个目标作为最终目标
(3)按照“堆栈”顺序,依续找到每一个目标文件,判断新旧关系,必要时生成新的目标文件,知道生成最终目标(可执行文件)
(4)寻找过程中,如某依赖文件不存咋,则make直接退出,并报错
(5)标号不会被关联到,所以不会自动执行,而必须通过命令行指定参数才能执行
(6)如改变了源文件,与之相应的.o文件和最终目标文件都要重新编译,但只需在Linux命令提示符下键入make即可
关于int main(int argc,char* argv[])详解
argc是命令行总的参数个数
argv[]为保存命令行参数的字符串指针,其中第0个参数是程序的全名,以后的参数为命令行后面跟的用户输入的参数,argv参数是字符串指针数组,
其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。指针数组的长度即为参数个数argc。数组元素初值由系统自动赋予。
关于argv[2][0]:是你调用的参数列表。当你使用命令行调用你写的可执行程序的时候,会传入参数,一般参数都会当做字符串处理,
因为你的argv是字符类型的数组,一个字符串是一个一维字符数组,那么多个参数就可以看做一个字符串数组,也就是字符的二维数组了。
argv[2][0]其实指的是传入的第2个参数的第1个字符。
链接: link.