【Linux】总结1-命令&工具

文章目录

基础指令

  • ls、pwd、touch、mkdir、netstat、cp、mv、cd、tar、zip、unzip、grep、pstack、ps、rm、cat、more、less、head、tail、find、ulimit -a、clear、whoami、man

  • touch:创建文件,也包括源代码文件;要注意,"-":普通文件,"d":文件夹文件。在Linux系统中,一切皆文件,且文件在Linux操作系统当中并不是以后缀来区分文件类型的。

  • rm:删除文件或文件夹,不可逆操作,慎用,删除文件夹加上-r参数:表示递归删除,此外,-i参数表示每一步都询问是否操作;-f:强制执行,不再进行询问

  • cat:查看文件内容;-n参数:在输出文件内容的同时也输出文件行号

  • head:查看文件内容,从文件头部开始默认查看10行

  • tail:查看文件内容,从文件尾部开始默认查看10行

  • find:查看文件所在路径 find [path] -name [filename]

  • grep:在文件中查找字符串的命令

shell命令以及运行原理

  • Linux严格意义上说是一个操作系统,称为"核心 "(kernel),但是我们一般用户 ,不能直接使用kernel,而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通
  • 操作系统 = 操作系统内核 + 一堆应用;操作系统内核:管理计算机中的软硬件资源,本质上是一个软件
  • 从技术角度:shell是命令行解释器,主要是将用户输入的命令递交给操作系统内核;同时将内核执行的结果反馈给用户,起到了一个承上启下的功能
  • 简单总结一下:shell是一个命令行解释器;bash:一个具体的命令行解释器

Linux权限

  • 字符表现形式:r:可读;w:可写;x:可执行;rwx相对位置固定,如果没有某个权限在该权限的位用"-"表示

  • 八进制数值表现形式,有三个十进制数字,最左位标识r权限,中间位标识w权限,最右位标识x权限,每个数字由三位二进制数字转化为为十进制得到。在二进制中:rwx对应三个二进制数字,同样的,最左位标识r权限,中间位标识w权限,最右位标识x权限,每个二进制位若为1,则表示有该权限,为0则表示没有,比如100,则表示有r权限,没有w权限和x权限,转换为十进制是4,则十进制4表示r--权限

  • 第一个字符标识该文件是普通文件还是文件夹,若是字符表现形式,则后面三个一组表示某类用户的权限,第一组表示文件所有者的权限(user--u),第二组表示所属组内用户针对该文件或文件夹的权限(group--g),第三组表示对于其他用户的权限(other--o),若是八进制数值表现形式,则每一个转换后的十进制数字单独为一组

  • 修改权限

    使用chmod命令:

    • 字符修改方式:chmod [u/g/o] [+/-] [r/w/x] [filename],eg:chmod u-w a.out;如果不体现[u/g/o],则针对三类用户都做出修改
    • 八进制数字修改方式:chmod [数字] [filename] eg:chmod 777 a.out
  • 不同权限针对文件/文件夹的作用

    • r:对文件而言,表示是否具有读取文件的权限;对文件夹而言,决定用户是否能够查看文件夹下的内容
    • w:对于文件而言,表示是否具有能够修改文件内容的权限;对于文件夹而言,决定用户是否能够移动/删除文件夹下文件
    • x:对于文件而言,表示是否具有执行文件内容的权限;对于文件夹而言,决定用户是否能够进入到文件夹

粘滞位

  • 使用场景:给文件夹设置粘滞位
  • 作用:设置了粘滞位的文件夹只能被以下用户删除文件:root用户(超级管理用户)、该文件夹的所有者、该文件的所有者
  • 用chmod + t [文件夹] 设置粘滞位

工具

  • 1、yum

    yum的常规操作:查询软件信息、安装软件、移除软件,合称yum的三板斧

  • 2、vim:代码编辑器

    常见的三种模式:正常模式、插入模式、底行模式

正常模式下的快捷操作:

移动:移动光标:

  • 上下左右键

  • h:左移;j:下移;k:上移;l:右移

  • gg:光标回到文本开始

  • G:光标回到文本末尾

  • ^:光标回到所在行行首

  • $:光标回到所在行行尾

删除:删除内容

  • x:删除光标所在字符
  • [num]x:删除num个字符,包含光标所在字符
  • X:删除光标所在位置前一个字符
  • [num]X:删除num个字符,向前删除
  • dd:删除本行内容
  • [num]dd:删除num行内容,向下删除

复制:

  • [num]yy/yy:复制当前光标所在/num行

  • p:粘贴到光标所在行的下一行

  • P:粘贴到光标所在行的上一行

替换:

  • r:替换光标所在字符,一次替换一个

  • R:替换光标所到之处的字符,一次可以替换多个

撤销:

  • u:撤销上一次误操作的操作

  • ctrl+r:反撤销

更改:

  • cw:更改光标所在处的字到字尾处,用了该命令后直接进入插入模式
  • [c#w]:#代表的是几个字,表示说能修改几个字

跳跃:

  • [#G]:#代表的是数字,eg:3G表示跳转到3行行首

删除:删除内容

  • x:删除光标所在字符
  • [num]x:删除num个字符,包含光标所在字符
  • X:删除光标所在位置前一个字符
  • [num]X:删除num个字符,向前删除
  • dd:删除本行内容
  • [num]dd:删除num行内容,向下删除

复制:

  • [num]yy/yy:复制当前光标所在/num行

  • p:粘贴到光标所在行的下一行

  • P:粘贴到光标所在行的上一行

替换:

  • r:替换光标所在字符,一次替换一个

  • R:替换光标所到之处的字符,一次可以替换多个

撤销:

  • u:撤销上一次误操作的操作

  • ctrl+r:反撤销

更改:

  • cw:更改光标所在处的字到字尾处,用了该命令后直接进入插入模式
  • [c#w]:#代表的是几个字,表示说能修改几个字

跳跃:[#G]:#代表的是数字,eg:3G表示跳转到3行行首

  • 3、编译器:gcc/g++

    gcc:编译C语言程序,后缀为.c

    g++:编译C++/C程序,后缀可以为:.c/.cpp/.cc/.cxx/.hpp

    生成可执行程序的4个过程:预处理(-E)、编译(-S)、汇编(-c)、链接

  • 4、gdb:调试器

    程序的发布方式有两种,一种是debug模式,一种是release模式,Linux下要得到debug版本的程序在编译时需要增加一个-g命令行参数,因为默认是不加-g的,则为release版本。debug比release多了调试信息,用gdb调试的时候一定是调试debug版本

    调试的基础方法:

    • l:查看源码,从main函数开始
    • l[func_name]:查看某个函数的源码
    • r:程序执行起来
    • n:逐过程
    • s:逐语句
    • b [行号]:在改行设置断点
    • i b:查看断点
    • c:继续执行
    • delete breakpoints:删除所有断点
    • delete breakpoints n:删除序号为n的断点
    • disable breakpoints:禁用断点
    • enable breakpoints:启用断点
    • info locals:查看当前栈帧局部变量的值
    • p [变量名]:查看变量的值,不仅可以查看内置类型变量,也可以查看自定义类型变量(struct、class、this)
    • bt:展示调用堆栈,可以通过调用堆栈来看代码执行的函数调用关系
    • q:退出

    三种使用场景:

    • 事前:可执行程序执行之前
    • 事中:可执行程序正在执行时
    • 事后:运行完毕,发生崩溃,调试崩溃程序产生的coredump文件,coredump文件:核心转储文件,是在程序在崩溃(内存访问越界、解引用空指针、double free)的一瞬间内存的映像(相当于案发现场)
  • 5、自动化构建项目:make

    make是一个命令,是自动化构建项目的工具;makefile/Makefile是一个文件,文件内容包含了编译程序时的规则。make根据makefile的文件内容,进行解析,编译程序(构建项目)

    make的工作方式:

    • 只为生成第一个目标对象而服务,如果生成了目标对象,则后续文件当中的内容不再进行解析,如果为了生成第一个目标对象,需要先生成依赖对象,则在makefile文件中查找生成依赖对象的方法,如果发现依赖对象不存在,就报错返回
    • 若依赖对象的最后一次修改时间先于目标对象的最后一次修改时间,则不再重新生成,意思就是依赖文件没有更新,目标对象就不必更新,不必再重新生成

makefile文件当中的自定义变量和内置变量:

内置变量:

  • $^:所有依赖的对象
  • $@:目标对象
  • $<:代表第一个依赖对象

自定义变量:自己给变量起名字,后续使用$符号进行解析

  • 6、git:版本管理工具

    • 克隆仓库
    • 提交到本地仓库
    • 推送到远端仓库
    • 将远端仓库内容更新到自己本地仓库
    • git status
相关推荐
hjjdebug1 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal
其乐无涯1 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
斑布斑布1 小时前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
Spring_java_gg1 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
✿ ༺ ོIT技术༻1 小时前
Linux:认识文件系统
linux·运维·服务器
会掉头发2 小时前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
我言秋日胜春朝★2 小时前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器
饮啦冰美式2 小时前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu