Linux学习

目录、文件和路径

系统目录

在这里插入图片描述
Linux的文件系统中只能有一个根目录,它没有父目录,其他目录都必须有父目录。
/ 根目录
/bin (Binary)存放必要的命令。
/boot 存放内核以及启动所需的核心文件,包括一些连接文件以及镜像文件。
/cdrom 只读光盘,用来存储大量数据的外部存储媒体。
/dev (Device)存放设备文件
/etc 存放系统配置文件
/home 普通用户的宿主目录,用户数据存放在其主目录中,一般以用户的账号命名的
/lib 存放必要的运行库
/lost+found 一般情况下为空,当系统非法关机后,这里就存放了一些文件。
/media 挂载U盘、光驱等设备。
/mnt 存放临时的映射文件系统,通常用来挂载使用。我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt 存放主机额外安装的软件。默认是空的。
/proc 存放存储进程和系统信息
/root 超级用户的主目录
/run 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
/sbin 存放系统管理程序。
/srv 存放一些服务启动之后需要提取的数据。
/sys 文件系统
/tmp 存放临时文件
/usr 存放应用程序,命令程序文件、程序库、手册和其它文档。
/var 系统默认日志存放目录

路径

  1. 绝对目录:从根目录出发,以斜杠开始的路径
  2. 相对路径:从本级目录出发,不以斜杠开始的路径
    ./ 本级目录
    . ./ 上级目录
    目录名以 . 开头,表示隐藏目录

用户和权限

linux是多用户的操作系统,多个用户可以同时登录操作,不同用户有不同的权限。
root用户有最高的权限;其他用户的权限有相应的限制

每个文件都有三组权限标志,分别针对所属用户,所属组和其他用户
每组权限又包括三种权限:读权限 r,写权限 w,执行权限 x
示例

d:文件类型meaning
-普通文件
d目录
c字符设备
b块设备
p命名管道
s套接字
l链接文件(快捷方式)

d rwx rwx rwx
   (u)   (g)  (o)

权限代表值,可以用rwx表示,也可以用数值表示
rwx r-x r–
421  0

  • 如果用户对一个文件有读权限,那么他就可以查看这个文件的内容;
  • 如果有写权限,就可以修改文件的内容;
  • 如果有执行权限,那么就可以把这个文件作为可执行文件来运行。

常用命令

基础命令

  1. su root/qingyu 切换用户(switch user)
  2. man 查看Linux上的手册页
    man [n] item
    n一般为1-8:
    1 可执行程序
    2 系统调用
    3 可函数
    q退出
  3. chgrp 群组名称,目录 改变群组名称(change group)
  4. chown 用户名,目录 修改用户名
    -R 后加,递归,表示子文件可一起修改
  5. chmod 改变权限
    chmod [-R] 0777
    chmod u + r
    g - w
    o = x
    a(ugo都有)
    chomd u=rwx,og=rx tmp
    chomd a-x tmp

目录处理类命令

  1. cd 进入某一目录(changedir)
  2. pwd 显示绝对路径表示的当前工作目录(print working dir)
  3. mkdir 创建目录 只能创建一个空目录
    mkdir -p a/b/c依次创建多个空目录
    mkdir -m 创建目录的同时设置权限
  4. rmdir 删除空目录(removedir)
    rmdir -rf(递归强制删除)

文件,目录管理类命令

  1. ls 以列表方式查看目录名
    ls -l 长格式显示,显示属性,也可以写作 ll
    ls -a 显示所有文件,包括隐藏文件
    ls -la 以长格式显示所有文件
    ls -lh 以长整型且以MB、KB形式显示文件大小(ll -h)
  2. cp 文件拷贝
    cp 源,目标
    cp -rf 强制拷贝(当有同名文件时)
    cp -i 拷贝(遇到同名函数时,有提示)
    cp -ir 连同子文件一起复制
  3. rmdir 删除目录,删除的目录必须为空目录
    后可加-irf
  4. mv 移动目录
    mv 源文件 新文件

查看文件内容

  1. cat 从文件头到文件尾显示
  2. tac 从尾到头显示
  3. more 一页一页显示 只能下翻 空格下一页,回车下翻一行
    less 一页一页显示 可以下翻,也可以上翻 pgup/pgdn
  4. :f 显示当前文件名

ls -al | more 以长文件显示所有目录,包括隐藏文件,一页一页显示(管道符,前面内容作为输入)

  1. head [-n10] tmp 显示文件的前十行
    tail 显示文件的后x行

head -n20 tmp | tail -n10 输出前十行-20行

  1. 压缩 tar -cvzf 文件名.tar.gz 指定文件目录
    解压 tar -xvzf 文件名.tar.gz

  2. find 目录 -name 所找的文件名

    find /home -name str*

  3. ifconfig 查看或者配置虚拟机的IP地址
    ifconfig etho ip 改动的IP地址

  4. clear 清屏

  5. touch 创建库文件

  6. grep 强大的文件关键词搜索命令
    grep 关键词 file

  7. 软连接
    相当于Windows的快捷方式
    ln -s 源 软链接

vim文本编辑器

三种工作模式:

  1. 命令行模式(一般模式)
  2. 插入模式(编辑模式)
  3. 底行模式(命令列模式)

操作过程

  1. vim hello.c
  2. 命令模式到编辑模式 i
  3. 编辑
  4. 编辑模式到命令模式 esc
  5. 命令模式到底行模式 :
  6. 在底行模式下键入wq保存退出

在命令行模式下功能键

命令功能
yy复制光标所在行
[n]yy复制当前光标开始的n行
p粘贴复制到所在光标行
dd剪切当前光标所在行
[n]dd剪切当前光标开始的n行
/name查找光标之后名为name的字符串 x往后查找下一个 X往前查找下一个
G光标移动到文件尾
u取消前一个动作
d1g删除光标所在行到第一行的所有数据
dg删除光标所在行到末行的所有数据
gc询问是否删除
%全文替换

n1,n2 s/word1|word2/g
在n1和n2行间查找word1并替换为word2,也可以把”/”换成”#”

底行模式功能键

命令功能
:w保存
:q退出(系统提示是否保存)
:q!强行退出
:wq保存后退出
:w[filename]另存为filename的文件
:set nu显示行号
:set nonu取消行号
:!不退出vim编辑器,继续执行命令
:open [file]可同时打开多个文件,显示第一个文件
:n切换到第二个文件
:N往前切换文件
:files显示打开的所有文件名
:sp+文件名分屏显示

gcc编辑器

GNU cc(简称gcc)
gcc能够检测出语法错误,功能性错误是难题

C语言从源代码到可执行程序的过程:

  1. 预处理(预处理后的C语言程序.i)
  2. 编译(生成.s文件)
  3. 汇编(生成.o文件)
  4. 链接(生成可执行文件)

预处理做的操作:

  1. 头文件展开 -i gcc -E hello.c gcc -E hello.c >hello.i
  2. 宏替换 gcc hello.c -DMAX=100 (-D从外部定义宏)

-E 控制预处理     gcc -E hello.c -o hello.i
-S 只进行预处理和编译     gcc -S hello.i -o hello.s
-c 只进行预处理、编译和汇编,不链接成为可执行文件     gcc -c hello.s -o hello.o
-o file 指定生成的目标文件名file,gcc给出预设的可执行文件a.out     gcc hello.o -o hello

-g 产生调试工具(GNU的gdb)所必要的符号信息,要想对编译出的程序进行调试,就必须要加入这个选项     gcc -g hello.c -o hello.out

-O 对程序进行优化编译,链接。可执行文件的执行效率可以提高,但是,编译连接的速度就要相应减慢
-O1 优化代码结果
-O2 比-O更好的优化编译、连接,但速度慢。
-O3 优化符号点的…

-Idirname 将dirname所指出的目录加入到程序头文件目录列表中

C程序中的头文件包含两种情况∶

  • #include <myinc.h>
  • #include “myinc.h”

他们之间的主要差别是:

  1. 对于<>类,预处理程序源文件在系统预设包含文件目录(如/usr/include等等)中搜寻相应的文件
  2. 而对于"",源文件则在当前目录中搜寻头文件,这个选项的作用是告诉源文件,如果在当前目录中没有找到需要的头文件,就到指定的dirname目录中去寻找。在程序设计中,如果我们需要的这种包含文件分别分布在不同的目录中,就需要逐个使用-I选项给出搜索路径。

-Ldirname 将dirname所指出的目录加入到程序函数链接库文件目录列表中
-lname 在连接时装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下

  • 例:-lm表示连接名为libm.a的库
    -lm 编译文件时未找到…到libm.a中找

  • 例:gcc hello.c -o hello -I /home/hello/include -L /home/hello/lib -lworld
    -I /home/hello/include : 将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include–>/usr/include–>/usr/local/include
    -L /home/hello/lib : 将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib–>/lib–>/usr/lib–>/usr/local/lib
    -lworld : 在上面的lib的路径中寻找libworld.so动态库文件

.a 静态库

静态库的创建

  1. gcc -c 源文件.c
  2. ar rcs 静态库名(libmycal.a) 目标文件1 目标文件2
  3. gcc main.c -o main -L. -lmycal
    /lib /usr/lib

优缺点:

  • 库和文件拼在一起,文件大,浪费空间资源
  • 在编译时加载(加载时机不同)
  • 容易部署
  • 由于静态库在编译时期打包在执行文件中,静态库更新就需要重新打包发布,比较麻烦;

.so 动态库

建立与库的映射关系
动态库的创建

动态库的使用

  • gcc 源文件 ./库名.so -o 可执行文件名

优缺点:

  • 在执行时加载
  • 程序升级变得简单,动态库的更新可以独立于依赖他的应用程序,只更新动态库即可

-Wall : 生成所有警告信息 gcc hello.c -o hello -Wall
-w : 不生成任何警告信息

gdb调试器

功能:

  1. 运行程序
  2. 设置断点
  3. 动态查看变量状态

gcc -g demo.c -o demo
gdb demo(可执行文件)
run 运行显示结果
list 查看代码
设置断点

  • break +行号
  • break +行号+[if …]
  • break+函数名

print sum
next step 单步调试
continue 跳过当前断点继续执行
info break 查看断点信息
delete+断点编号 删除断点
quit 退出

Make工程管理器

是一种可以提高编译效率的可以实现自动编译的工程管理器

自动编译体现在以下两点:

  1. 按照规定的编译逻辑进行编译
  2. 根据文件是否修改进行选择编译

makefile三元素:目标文件,依赖文件,命令
书写格式为:

  • target file :dependence file
  • Tab command

举个小例子->用“vim Makefile”命令进入写Makefile文件,文件代码如下:

hello:hello.o
    @gcc hello.o -o hello
    echo "make done!"
hello.o:hello.c
    gcc -c hello.c

/*伪目标*/
.PHONY:clean install
clean:
    rm -f hello hello.o
install:
    mv ./hello /bin

//在命令前加*:表示不显示此条命令到终端

执行命令,生成目标所依赖的文件
从第一行开始执行,若依赖文件为目标文件时,跳到该目标文件执行
最后输入make命令进行汇编


为什么要先生成hello.o文件再生成可执行文件hello?原因如下:

若选择直接生成可执行文件,那么如果有多个源代码需要编译,第一次编译时需要将所有的文件从头编译,消耗大量时间,若此时修改其中一个源代码,再次编译时会同第一次编译时一样将所有文件从头编译,浪费大量时间;如果选择先生成hello.o文件的话,若修改其中一个源代码,再次编译时只需要从头编译修改的文件,其他文件可以迅速生成可执行文件,即省去了其他未被修改文件的预处理和编译过程,直接链接。即使用此种方法可以加快编译速度,提高工作效率。


script下的Makefile->总控下的makefile->功能makefile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值