。/根目录操作系统的顶层目录
。/bin系统中最基本的命令行工具
。/sbin系统管理员工具目录
。/boot包括了系统中的启动文件,Linux内核等,16M为一个基本内核的最低限度
。/dev设备目录
。/etc配置文件目录
。/home用户的主目录
。/lib程序库文件
。/mnt程序挂载目录
。/opt大型程序安装目录
。/proc当前系统进程目录,包括IRQ port 10 Address DMA channe
。/root系统管理员目录
。/tmp临时目录,系统会定时的清理这个目录的内容
。/usr系统程序目录
。/var系统日志目录
Ctrl+空格 输入法转换(中文)
Ctrl+alt+[F1~F6] 进入命令行终端
Ctrl+alt+F7 进入GUI图形界面
exit 退出 logout 注销 reboot 重启
clear 清屏命令 poweroff 关机 su- 切换用户
ubuntu中系统管理员root在图形界面一般进不去,要在命令行模式下登录
命令 :$ sudo su
Ctrl+d 离开文字界面(相当输入exit),也代表键盘输入结束(end of file,EOF或end of Input)
Ctrl+c 中断目前程序,相当于“停下来”
Ctrl+Tab 显示你可能已经操作的命令数目
rm –rf 文件夹 //删除非空目录(删除后无法恢复)
类似于 Windows 下面的盘符概念。把一个分区挂载到一个目录上(Linux 不支持盘符这种方式),这样才能对这个磁盘上面的文件进行操作。这个时候这个分区需要继承这个目录的目录级别。比如某个分区 sda2 ,挂载到 /usr/src 里(举例啊),这个时候这个 sda2 里面的 aaa 目录,现在就表示为 /usr/src/aaa 。如果他挂载到 /var/www 下面。sda2 里面的 aaa 就变成了 /var/www/aaa 。这点也类似于 Windows 的修改盘符,比如 D:\aaa 。把盘符修改为 E ,这个目录就成了 E:\aaa 。但他们还是一个东西。挂载后,你所修改的内容(包括复制,删除,移动等),只要在这个被挂载的分区所包含的文件、目录,都会保存在这个分区里,而不是原来的目录里。效果和 Windows 里面用 U 盘的效果一样。只不过 U 盘用的是一个盘符,Linux 里面,需要一个目录。你把 Windows 想象成一个最高级别的目录是“我的电脑”,C D E F 这些盘符都是他的一个“目录”,就能发现他和 Linux 的挂载很相似,只不过 Windows 不允许出现没有挂载分区的空的这种挂载点而已。这里面 / 也是一个挂载点,就像 C: 一样,一个不允许随便改的专用挂载点。
光盘 cdrom U盘 usb
高级命令相关
用户管理
创建用户:useradd (adduser)
修改用户密码:passwd
切换用户:su username
目录与文件操作
SHELL输出:echo
目录的软件链接:ln
压缩与解压工具:tar gzip
# tar –zcvf test.tar.gz 1 2 3
# tar –zxvf test.tar.gz
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-c或--create 建立新的备份文件。
-x或--extract或--get 从备份文件中还原文件。
-v或--verbose 显示指令执行过程。
-f<备份文件>或--file=<备份文件> 指定备份文件。
文本查看:cat tail head grep find
grep [关键字] [文件名] 文档中关键字的查找
-color 给关键字添加颜色
-n 显示行号
管道:连接前一个命令句与后一个命令句,后面命令语句一般是承接前的语句的输出内容。 |
查找文本时配合使用:
Cat passwd | grep root
表示筛选出包含root字段的文件
可以多次使用筛选
重定向输入输出:> < >> <<
# cat passwd > passwd1 相当于 cp passwd passed1
# echo hello.c > passwd1
使用 > 多次重定向输入时,文件中只显示最后一次的输入内容
多次输入时,应使用 >>
# cat >>test<<EOF
表示输入文本直到输入EOF时结束,并保存在test文件中。
Linux下C语言编辑技巧
配置文件:/etc/vimrc
set smartindent
set cindent shiftwidth=4 智能缩进
set tabstop=4 (C语言缩进风格)
神兵天降:变态的宏
qaq 记录重复内容为a
n@a 显示结果(n重复次数)
all:first //目标
first.o:first.c
gcc -c first.c
first:first.o
gcc first.o -o first
clean:
rm *.o first -f
目标文件:依赖文件
<TAB>操作
执行:make
清理中间及最终二进制文件:make clean
make伪目标:make 伪目标
复习一下——Makefile规则的中心思想:目标文件的内容是由依赖文件决定,依赖文件的任何一处改动,将导致目前已经存在的目标文件的内容过期,规则的命令为重建目标提供了方法,这些命令运行在系统shell之上。
? Makefile的命名
(1)默认的情况下
make会在工程目录(执行make的目录)下按照文件名顺序寻找makefile 文件读取并执行,查找的文件名顺序为: “GNUmakefile”、“makefile”、“Makefile”。
(2)指定文件Makefile(自定义的make文件使用)
使用make -f 文件名
? Makefile的内置变量
CC:指定编译器
CFLAGS:指定编译的额外依赖条件,如头文件,编译选项等等
LDFLAGS:链接时要链接的动态库(下一节课讲动态库生成的时候再讲)
? Makefile的自定义变量
自定义变量应用大写字母表示
以”$(变量名)”符号引用变量
? Makefile的隐晦规则(强烈推荐)
CC=gcc
CFLAGS=-I ../ -g -Wall -O2
#arm-linux-gcc
BIN=main
all:$(BIN)
main:main.o hello.o
clean:
rm -f $(BIN) *.o
Makefile会自动去推导依赖文件与目标文件
? 伪目标
all:main
main:main.o
.PHONY:clean 防止目录中有名为clean的文件名或文件夹,而无法使用
clean: make clean命令
rm *.o main -f
? 内置变量LDFLAGS
-lm libmath.so
用于库的链接建立。(在后面的动态库的创建中继续讲解)
? 自动化变量
$@
表示规则的目标文件名。
$<
规则的第一个依赖文件名。 如:
foo.o : foo.c defs.h hack.h
gcc -c $(CFLAGS) $< -o $@
翻译过来:gcc -c -g foo.c -o foo.o
自动化变量“$<”代表规则中通过目录搜索得到的依赖文件列表的第一个依赖文件。关于自动化变量我们在后续有专门的讨论。
$?
所有比目标文件更新的依赖文件列表,空格分割。如:
.c.o:
${CC} -o $@ -c $? ${CFLAGS}
说明:.c.o为Makefile中的后缀规则,因此当定义了一个目标是“.c.o”的规则时。make会将它作为一个双后缀规则来处理,它的含义是所有“.o”文件的依赖文件是对应的“.c”文件。
$^ (shift + 6)
规则的所有依赖文件列表,使用空格分隔。如:
$(BIN):${OBJECT}
${CC} -o $@ $^ $(LDFLAGS) $(LIBS)
翻译过来:gcc -o main main.o hello.o -lm ...
? 模式替换函数
格式:$(patsubst <pattern>,<replacement>,<text> )
名称:模式字符串替换函数——patsubst。
功能:查找<text>中的单词,以“空格”、Tab”或“回车”“换行”分隔
如果<pattern>匹配的话,则以<replacement>替换。
返回:函数返回被替换过后的字符串。
? Makefile中的通配符
一般我们可以使用“$(wildcard *.c)”来获取工作目录下的所有的.c文件列表。
分析:$(patsubst %.c,%.o,$(wildcard *.c))代表什么?
#sample Makefile (适合在单个工程目录下面进行该工程的编译)
objects := $(patsubst %.c,%.o,$(wildcard *.c))
foo : $(objects)
cc -o foo $(objects) -lm
.PHONY:clean
clean:
rm $(objects) foo -f