linux的初步了解

命令解析器

  1. shell就是命令解释器
  2. 命令解析器的作用:对用户输入到终端的命令进行解析,调用对应的执行程序。

用户在终端输入命令, 由shell命令解释器对命令进行解析(按照$PATH环境变量搜索命令), 解析成内核能够识别的指令, 然后由内核执行命令, 最后由终端显示命令执行的结果给用户.

注意:shell在寻找命令的时候是按照$PATH环境变量去查找的,如果找到了就执行对应的命令,若找不到就报错, 执行echo $PATH可以查看PATH环境变量的值.


  1. 常用的命令解析器:
    1. shell -- Bourne Shell
      1. /bin/sh
    2. bash -- Bourne Again Shell
      1. /bin/bash
  2. 当前系统所使用的shell    :echo $SHELL
  3. 当前系统下有哪些shell       cat /etc/shells

Linux下常用快捷键

tab键的作用

  1. 补齐命令

如:在终端输入his然后按tab键, 会补齐history命令;

如:输入l然后按tab键, 会显示所有以l开头的命令.

    2. 补齐文件(包括目录和文件)

例如: 如果在执行ls, 然后按tab键, 会显示当前目录下所有的文件

使用tab键的优点: 减少用户输入, 加快输入速度, 减少出错的机会.

linux下的目录结构

Linux系统的目录结构是一个倒立的树状结构, 根目录用/表示,对比windows目录结构理解linux的目录结构

linux下主要目录介绍

  • /bin: binary,二进制文件,可执行程序,shell命令
  •   如: ls , rm , mv, cp等常用命令
  • /sbin: s是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
    • 如ifconfig, halt, shutdown, reboot等系统命令
  • /dev: device,在linux下一切皆文件
    • 硬盘, 显卡, 显示器
    • 字符设备文件、块设备文件   
    • 如: 在input目录下执行: sudo cat mouse0, 移动鼠标会显示有输入
  • /lib: linux运行的时候需要加载的一些动态库
  •           如: libc.so、libpthread.so等
  • /mnt: 手动的挂载目录, 如U盘等
  • /media: 外设的自动挂载目录, 如光驱等。
  • /root: linux的超级用户root的家目录
  • /usr: unix system resource--类似于WINDOWS的programe files目录
    • include目录里存放头文件, 如: stdio.h、stdlib.h、string.h、pthread.h
    • games目录下的小游戏-如: sl小火车游戏
  • /etc: 存放配置文件
    • /etc/passwd
      • man 5 passwd可以查看passwd文件的格式信息
    • /etc/group
  •      man 5 group可以查看group文件的格式信息
  • /etc/profile
      • 系统的配置文件, 修改该文件会影响这个系统下面的所有的用户
  • /opt: 安装第三方应用程序
  •     比如安装oracle数据库可以在这个目录下
  • /home: linux操作系统所有用户的家目录
    • 用户家目录:(宿主目录或者主目录)
      • /home/itcast
  • /tmp: 存放临时文件
    • 新建在这个目录下的文件会在系统重启后自动清除

文件和目录操作相关的命令

tree命令

  • 以树状形式查看指定目录内容,使用该命令需要安装软件tree
  • sudo apt-get update    sudo apt-get install tree
  • 命令使用方法
  • tree  --  树形结构显示当前目录下的文件信息
  • tree 目录  -- 树形结构显示指定目录下的文件信息

ls命令

ls  --显示当前目录下文件信息

ls 目录或文件名  --显示指定目录下文件信息

  1.  ls -la : 列出当前目录下所有文件的相信信息, 包括隐藏文件

        • - : 普通文件
        • d : 目录
        • l :  符号链接,相当于windows中的快捷方式
        • s : 套接字
        • p : 管道
        • b : 块设备
        • c : 字符设备

ls -l 结构图

cd 命令

切换目录(change directory), 命令使用方式:cd + 路径

路径可以使用相对路径或者绝对路径

cd  /home/itcast   绝对路径(从根目录开始)

cd  ./itcast/test    相对路径(从当前工作目录开始)

  1. 切换到家目录(例如: /home/itcast)
    1. cd
    2. cd ~
    3. cd /home/itcast
    4. cd $HOME

pwd命令

查看用户当前所处的工作目录,

which命令

显示命令所在的目录

touch命令

如果文件不存在, 创建新文件, 如果文件存在, 更新文件的最后修改时间。

命令使用方式:touch 文件名

mkdir命令

创建新目录, make directory

创建方式:mkdir目录名

如果创建多级目录需要添加参数 -p

   在当前目录下创建目录:  mkdir mydir

在宿主目录下创建多级目录:  mkdir -p ~/test/hello/world/aa

rmdir命令

删除空目录,只能删除空目录,使用方式:rmdir 目录名

rm命令

  1. 删除文件: rm 文件名
  2. 删除目录: rm  -r 目录名
      • -r:递归删除目录,删除目录必须添加此参数
      • -i:提示用户是否删除文件或目录
      • -f:强制删除
  1. 注意事项:

使用rm命令删除的文件或目录不会放入回收站中,数据不易恢复

cp 命令

命令使用方式:cp 源目录或文件 目标目录或文件

若有目录的拷贝需要使用-r参数

  1. cp 要拷贝的文件(file1 file(不存在)
    1. 创建file,将file1中的内容拷贝到file
  2. cp file1 file(存在)
    1. file1覆盖file
  3. cp file dir(存在)
    1. 拷贝filedir目录
  4. cp -r dir(存在) dir1(存在)  
    1. dir目录拷贝到dir1目录中
    2. 包括dir目录
  5. cp -r dir(存在) dir1(不存在)
    1. 创建dir1
    2. dir中的内容拷贝到dir1, 不包括dir目录
  6. cp 拷贝目录也可以用-a参数, 这样可以保留被拷贝的文件的一些属性信息

mv命令

  • 改名或者移动文件 mv file1 file2
  • 改名
      1. mv file(存在) file1(不存在)
      2. mv dir(存在) dir1(不存在)
      3. mv file(存在) file2(存在)
        1. file文件覆盖file2文件,file改名为file2
  • 移动(第二个参数一定是目录文件)
  • mv file(文件) dir(存在目录)
  • file文件移动到dir
  • mv dir(目录存在) dir1(目录存在)
  • dir移动到dir1, dir就会作为dir1的子目录而存在

cat命令

  1. 将文件内容一次性输出到终端。
  2. 使用方式: cat 文件名
  3. 缺点:终端显示的内容有限,如果文件太长无法全部显示
  4. 可用于文件重定向: cat file1>file2, 相当于cp file1 file2

more命令

  1. 文件内容分页显示到终端,但是只能一直向下浏览,不能回退。
  2. 使用方式:more + 文件名
  3. 相关操作:
    1. 显示下一行:回车
    2. 显示下一页:空格
    3. 退出:q(ctrl + c)

less命令

  1. 文件内容分页显示到终端,可以自由上下浏览。
  2. 使用方式:less 文件名
  3. 相关操作:
    1. 显示下一行:回车、ctrl + p、键盘向下键
    2. 显示上一行:ctrl + n、键盘向上键
    3. 显示下一页:空格、PageDown
    4. 显示上一页:PageUp
    5. 退出:q

head命令

  1. 从文件头部开始查看前n行的内容
  2. 使用方式:head -n[行数] 文件名
    1. head -20 hello.txt
  3. 如果没有指定行数,默认显示前10行内容

tail命令

  1. 从文件尾部向上查看最后n行的内容
  2. 使用方式:tail -n[行数] 文件名
  3. 如果没有指定行数,默认显示最后10行内容
  4. 一个比较重要的应用:显示日志 : tail -f test.log

一个终端tail -f test.log , 另一个终端: echo “hello world” >>test.log

软链接

例如:ln -s aa aa.soft

例如:ln -s tmp tmp.link

  • 软连接类似于windows下的快捷方式
  • 如何创建软连接
    1. ln -s 文件名 快捷方式的名字
    1. 目录也可以创建软连接
  • 创建软链接应注意事项
    1. ln创建软连接要用绝对路径,因为如果不使用绝对路径,一旦这个连接文件发生位置变动,就不能找到那个文件了。
    2. 软连接文件的大小是: 路径+文件名的总字节数

硬链接

修改file的内容, 会在其余三个硬链接文件上同步.

删除文件的时候, 只要硬链接计数不为0, 不会真正删除, 起到保护文件的作用.

  • ln 文件名 硬链接的名字
  • ln test.log test.log.hard
  • 使用硬链接应注意事项
    1. 硬链接不能建在目录上
    2. 硬连接对绝对路径没有要求
    3. 硬连接不能跨文件系统
  • 硬链接文件和源文件的inode是相同的,文件系统的inode要求唯一,跨文件系统可能会使inode不同, 所以硬链接不能跨文件系统

  • 硬链接的本质
  • 硬连接的本质是不同的文件名所在的inode节点是相同的,相同的inode节点指向了相同的数据块,所以他们的文件内容是一样的,文件内容会同步。
      1. ls -i 文件名 ------à可以查看文件的i节点
      2. stat 文件名 ---à可以查看i节点信息
      3. 如下图, file.hard是file的硬链接, 这个两个文件指向了同一个inode, 同一个inode指向了相同的数据块(文件内容).
      • 当新创建了一个文件, 硬链接计数为1
      • 给文件创建了一个硬链接后, 硬链接计数加1
      • 删除一个硬链接后, 硬链接计数减1
      • 如果删除硬链接后, 硬链接计数为0, 则该文件会删除
  • 硬链接应用场合
  • 可以起到同步文件的作用
  • 可以起到保护文件的作用

wc 命令

  • 显示文件行数, 字节数, 单词数
  • wc -l file显示文件的总行数
  • wc -c file显示文件的总字节数
  • wc -w file显示文件的总单词数
  • wc file 显示文件的总行数, 单词数和总字节数

whoami 命令

  1. 显示当前登陆的用户名

修改文件权限chmod

linux是通过权限对文件进行控制的, 通过使用chmod命令可以修改文件相关的权限.

  • 文字设定法
  • 命令:chmod [who] [+|-|=] [mode] 文件名
  •    操作对象【who】
    • u -- 用户(user)
    • g -- 同组用户(group)
    • o -- 其他用户(other)
    • a -- 所用用户(all)【默认】
    • 操作符【+-=】
    • + -- 添加权限
    • - -- 取消权限
    • = -- 赋予给定权限并取消其他权限
  • 权限【mode】
    • r -- 读
    • w -- 写
    • x -- 执行
    • 示例:给文件file.txt的所有者和所属组添加读写权限
    • chmod ug+wr file.txt
  • 数字设定法
    • 命令:chmod [+|-|=][mode] 文件名
    • 操作符【+-=】
    • + -- 添加权限
    • - -- 取消权限
    • = -- 赋予给定权限并取消其他权限 (默认为=)
  • 数字表示的含义
    • 0 -- 没有权限(-)
    • 1 -- 执行权限(x)
    • 2 -- 写权限(w)
    • 4 -- 读权限(r)
  • 例:给file.txt文件设置 rw-rw-r--
    • chmod 664 file.txt

修改文件所有者和所属组

  • 修改文件所有者chown
    1. 用法:chown 文件所有者 文件名
      1. sudo chown mytest file.txt
  • 修改文件所有者和所属组chown
    1. 用法:chown 文件所有者:文件所属组 文件名
      1. sudo chown mytest:mytest file.txt
      2. sudo chown mytest.mytest file.txt
  • 注意:普通用户需要使用管理员用户权限执行该命令
  • 注意: 若系统没有其他用户, 可以使用sudo adduser 用户名 创建一个新用户.

修改文件所属组

  • chgrp命令
  • 使用方法:chgrp 用户组 文件或目录名
    • 示例:修改文件所属组为mytest
    • sudo chgrp mytest file.txt

  • 普通用户需要使用管理员权限执行该命令。

find命令

  • 按文件名查询:使用参数 -name
    1. 命令:find  路径  -name   "文件名"
    2. 示例:find /home -name "*.c"
  • 按文件类型查询:使用参数 -type
    1. 命令:find 路径 -type 类型
      1. 类型        
        • 普通文件类型用f表示而不是 -
        • d -> 目录
        • l -> 符号链接
        • b -> 块设备文件
        • c -> 字符设备文件
        • s -> socket文件
        • p -> 管道文件
    2. 查找指定目录下的普通文件: find 路径 -type f
  • 按文件大小查询:使用参数 -size
    1. 命令:find  路径  -size  范围
      1. 范围
        • 大于:+表示 --  +100k
        • 小于:-表示  --  -100k
        • 等于: 不需要添加符号 --  100k
      2. 大小
        • M 必须大写(10M
        • k 必须小写(20k
        • c 表示字节数
    2. 例子: 查询目录为家目录
      1. 等于100k的文件:  find ~/ -size 100k
      2. 大于100k的文件:  find ~/ -size +100k
      3. 大于50k, 小于100k的文件:  find ~/ -size +50k -size -100k
  • 按文件日期
    1. 创建日期:-ctime -n/+ n
      • -n: n天以内
      • +n: n天以外
    2. 修改日期:-mtime -n/+n
    3. 访问日期:-atime -n/+n
  • 按深度
    1. -maxdepth n(层数)
      1. 搜索n层以下的目录, 搜索的层数不超过n层
    2. -mindepth n(层数)
      1. 搜搜n层以上的目录,搜索的层数不能小于n层
  • 高级查找
    1. 例:查找指定目录下所有目录,并列出目录中文件详细信息
  • find ./ -type d -exec shell命令 {} \;
  • find ./ -type d -ok shell命令 {} \;
    1. 注意: {}中间不能有空格
    2. ok比较安全, 特别是在执行rm删除文件的时候.
  • find ./ -type d | xargs shell命令
  • grep -r(有目录)查找的内容搜索的路径
    1. -r参数, 若是目录, 则可以递归搜索
    2. -n参数可以显示该查找内容所在的行号
    3. -i参数可以忽略大小写进行查找
    4. -v参数不显示含有某字符串
  • 搜索当前目录下包含hello world字符串的文件
  • grep -r -n "hello world" ./     ------显示行号
  • grep -r -i -n "HELLO world" ./  -------忽略大小小查找

Linux中常用的压缩工具

gzipbzip2

  1. 不能压缩目录,只能一个一个文件进行压缩,压缩之后会使原文件消失
      1. gzip *    压缩当前目录下所有的文件, 但是目录不能压缩
      2. gunzip *  解压当前目录下所有的.gz文件
      3. bzip2 *   压缩当前目录下所有的文件, 但是目录不能压缩
      4. bunzip2 * 解压当前目录下所有的. bz2文件

tar工具

  1. 相关参数说明
    1. z:用gzip来压缩/解压缩文件
    2. j:用bzip2来压缩/解压缩文件
    3. c:create, 创建新的压缩文件, 与x互斥使用
    4. x:从压缩文件中释放文件, 与c互斥使用
    5. v:详细报告tar处理的文件信息
    6. f:指定压缩文件的名字
    7. t:  查看压缩包中有哪些文件
  2. 压缩:
    1. tar cvf 压缩包名字.tar 原材料[要打包压缩的文件或目录]
    2. tar zcvf 压缩包名字.tar.gz 原材料[要打包压缩的文件或目录]
    3. tar jcvf 压缩包名字.tar.bz2 原材料[要打包压缩的文件或目录]
  3. 解压缩:
    1. tar  xvf   已有的压缩包(test.tar.gz)
    2. tar  zxvf  已有的压缩包(test.tar.gz)
    3. tar  jxvf  已有的压缩包(test.tar.bz2)
    4. 解压到指定目录:添加参数 -C(大写)
      • tar zxvf test.tar.gz -C 解压目录(./mytest)
  4. 查看压缩包中有哪些文件
  1. tar -tvf test.tar

rar工具

rar a -r my aa bb dir  ----将aa bb dir压缩到my.rar文件中

rar x my.rar  ----将my.rar解压到当前目录

                                     注意:若解压目录不存在则会报错

zip工具

  • 使用前需要安装 rar 工具
    1. sudo apt-get install rar
  • 压缩:
    1. 命令: rar a -r 要压缩的文件(含文件或者目录)
      • 压缩目录需要使用参数:-r
    1. 打包的生成的新文件不需要指定后缀
  • 解压缩:
    1. 命令:rar x xxx.rar 压缩目录
    1. 解压到指定目录, 直接指定解压目录即可
      • rar x xxx.rar目录
      • rar x my.rar TAR  -----将my.rar解压到TAR目录下
  • 压缩:zip -r 压缩包名 要压缩的文件(含文件或目录)
    1. 压缩目录需要使用参数-r
    2. 使用该命令不需要指定压缩包后缀

                        zip -r xxx file dir ---生成xxx.zip文件

     注意:解压目录若不存在则会创建.

  • 解压缩:unzip压缩包名
    1. 解压缩到指定目录:添加参数 –d 解压目录
  • unzip xxx.zip -d /home/itcast/test/day1

gcc的工作流程


1 预处理: cpp预处理器, 去掉注释, 展开头文件, 宏替换
    gcc -E test.c -o test.i
2 编译: gcc, 将源代码文件编译成汇编语言代码
    gcc -S test.i -o test.s
3 汇编: as, 将汇编语言代码编译成了二进制文件(目标代码)
    gcc -c test.s -o test.o
4 链接: ld, 链接test.c代码中调用的库函数
    gcc -o test test.o

 

  
静态库的制作:


    1 将.c文件编译成.o文件
        gcc -c fun1.c fun2.c
    2 使用ar命令将.o文件打包成.a文件
        ar rcs libtest1.a fun1.o fun2.o
    
静态库的使用:
    1 main.c与head.h和libtest1.a在同一级目录的情况
        gcc -o main1 main.c -I./ -L./ -ltest1
    2 main.c与head.h和libtest1.a在不同一级目录的情况
        gcc -o main1 main.c -I./include -L./lib -ltest1
        

动态库的制作:
    1 将.c文件编译成.o文件
        gcc -fpic -c fun1.c fun2.c
    2 使用gcc将.o文件编译成库文件
        gcc -shared fun1.o fun2.o -o libtest2.so
    
动态库的使用:
    gcc -o main2 main.c -I./include -L./lib -ltest2
    
动态库文件在编译的时候, 连接器需要使用参数-L找到库文件所在的路径;
在执行的时候, 是加载器ldd根据动态库的路径进行加载的, 与编译的时候用的-L
指定的路径无关.

    最常用的解决办法:将LD_LIBRARY_PATH环境变量加到用户级别的配置文件~/.bashrc中, 
    然后生效(. ~/.bashrc    source ~/.bashrc   退出终端然后再登录)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值