0%

GDB 全称 GNU Project debugger,是一个通用的 C / C++ 程序调试器,可以用来深入分析程序的运行过程,或者排查程序崩溃的原因。本文面向的读者是 C / C++ 程序员,主要内容包括 GDB 的基本命令、进阶用法和实践案例。目标是使读者掌握 GDB 的常见使用方法,满足日常开发所需。

阅读全文 »

  • crontab [选项]

    进行定时任务的设置

    • -e

      编辑crontab定时任务

    • -l

      查询crontab定时任务

    • -r

      删除当前用户的所有crontab任务

文件的所有者所在组其他组概念

  • 所有者

    ls -ahl 可查看文件或目录的所有者

    chown 指令改变文件或目录的所有者(change owner)

    案例:chown tom apple.txt

  • 所在组

    文件默认属于用户所在的组

    chgrp 指令改变文件或目录的所在组(change group)

    案例:chgrp fruit orange.txt

  • 其他组

    除了文件所有者和文件所在组外,其余用户对文件而言均在其他组

  • groupadd monster

    创建组

  • useradd -g monster fox

    创建用户并将其加入monster组

  • usermod -g 组名 用户名

    修改用户所在组

    案例:cat /etc/group | grep “wudang” 查看组是否存在

    ​ id zwj 查看用户是否存在

    ​ usermod -g wudang zwj 修改用户所在组

  • usermod -d 目录名 用户名

    修改用户登录的默认初始目录(用户要有进入新目录的权限)

文件操作权限

例如:-rwxrw—-

  • 0位—文件类型

    • -代表普通文件

    • l 代表链接(link)

    • d 代表目录(directory)

    • c 代表字符设备文件(鼠标、键盘)(char)

    • b 代表块设备(硬盘)(block)

  • rwx权限

    • 1-3位—文件所有者用户的权限
    • 4-6位—文件所在组用户的权限
    • 7-9位—文件其他组用户的权限

    作用于文件

    r:可以读取文件(read)

    w:可以写入文件(write)(但不可创建、删除文件,要有目录的w权限)

    x:可以执行文件(execute)(要求是可执行文件

作用于目录

​ r:可以读取目录下的内容(ls指令)

​ w:可以修改目录里的内容(在目录内创建、删除文件,重命名目录)

​ x:可以进入改目录(cd指令)

  • chmod 指令

    修改文件或者目录的权限

    • 方式1

      u:所有者; g:所在组; o:其他组;a:所有人

      1.chmod u=rwx,g=rx,o=x 文件/目录名

      2.chmod o+w 文件/目录名

      3.chmod a-x 文件/目录名

    • 方式2

      r=4,w=2,x=1

      1=–x

      2=-w-

      3=-wx

      7=rwx

      案例:chmod 751 hello.txt 将文件权限修改为 rwxr-x–x

  • chown

    chown newowner 文件/目录 —- 改变所有者

    chown newowner:newgroup 文件目录 —- 改变所有者和所在组

    • -R 当作用于目录上时,递归生效

    案例1:chown tom abc.txt

  • chgrp

    chgrp newgroup 文件/目录名 —- 改变所在组

    • -R 当作用于目录上时,递归生效

权限管理实践

  • 警察与土匪游戏

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    root@
    groupadd police
    groupadd bandit
    useradd jack -g police
    useradd jerry -g police
    useradd xh -g bandit
    useradd xq -g bandit
    passwd jack
    passwd jerry
    passwd xh
    passwd xq

    jack@
    touch jackfile
    chomd 640 jackfile
    chmod g=rw,o=r jackfile

    root@
    usermod -g police xh

    xh@
    cd /home/jack/

    小结论:要对相应目录内的文件进行操作,首先要获取目录的权限

    1
    2
    3
    #需要以下指令可以达到读写目的
    jack@
    chmod 770 /home/jack/
  • 实践2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    root@
    groupadd sx
    groupadd yg
    useradd tangs -g sx
    useradd shas -g sx
    useradd monkey -g yg
    useradd pig -g yg
    passwd tangs
    passwd shas
    passwd monkey
    passwd pig

    monkey@
    vim Monkey.java
    chmod g=rw Monkey.java
    #注意
    chmod g+r+w+x /home/monkey/

    pig@
    cd /home/monkey/
    vim Monkey.java

    root@
    usermod -g yg shas

    shas@
    cd /home/monkey/
    vim Monkey.java

    小结论:对于目录的 rwx 权限的理解

    • r:读的权限,查看目录里的内容(ls 指令)
    • w:写的权限,删除、创建目录里的文件
    • x:执行权限,可以进入目录,可以根据权限操作目录里的文件(不必获取目录读写权限)
  • 实践3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    root@
    useradd mycentos
    passwd mycentos

    mycentos@
    mkdir -p test/t11/t1/
    cd test/t11/t1/
    touch aa
    vim aa
    chmod u+x aa
    ./aa
    rm -rf test/t11/t1/

    root@
    userdel -r mycentos
    systemctl set-default graphical.target
    reboot
    shutdowm

时间日期指令

  • date

    显示当前时间

    • date +%Y 年
    • date +%m 月
    • date +%d 日
    • date “+%Y-%m-%d %H:%M:%S” 格式化字符串
  • date -s 字符串时间

    设置系统时间

    • date -s “2022-09-22 12:23:30”
  • cal

    查看当月日历

    • cal 2022

      查看全年日历

搜索查找类指令

  • find [搜索范围] [选项]

    查找指定文件或目录

    • -name

      根据文件名查找目录或文件

      案例1:find /home -name hello.txt

    • -user

      根据用户名查找文件或目录

      案例2:find /opt -user root

    • -size

      根据大小查找文件或目录

      案例3:find / -size +200M/-200K/200G(大于200M/小于200K/等于200G)

  • locate

    快速定位文件路径

    【定位前先使用 updatedb 指令更新数据库】

    • locate hello.txt

      定位hello.txt的路径

  • which

    定位指令路径

    which ls

    定位ls指令所在路径

  • grep配合“|”管道符号

    使用grep过滤查找后使用管道符将查找内容传递给后面的命令处理

    • grep [选项] 查找内容 源文件

      • -n 显示匹配行和行号
      • -i 忽略字母大小写

      案例1:在“/home/hello.txt”文件中,查找“yes”所在行,显示行号

      cat /home/hello.txt | grep -n “yes” 或

      grep -n “yes” /home/hello.txt

压缩与解压

  • gzip/gunzip 文件名/文件名.gz

    gzip用于压缩文件,gunzip用于解压文件

    案例1:gzip /home/hello.txt

  • zip [选项] XXX.zip 要压缩的内容

    压缩文件以及文件夹

    • -r 递归压缩

    案例1:zip -r myhome.zip /home/ 将home目录及其子文件夹压缩

  • unzip [选项] XXX.zip

    解压文件

    • -d 目录名 指定解压后的目录

    案例1:unzip /home/myhome.zip -d /opt/tmp

  • tar [选项] XXX.tar.gz 打包内容

    打包、解压或压缩文件及文件夹

    • -c 产生.tar打包文件
    • -v 显示详细信息
    • -f 指定压缩后的文件名
    • -z 打包同时压缩
    • -x 解包.tar文件
    • -C 指定解压位置

    案例1:tar -zcvf pc.tar.gz cat.txt pig.txt

    案例2:tar -zcvf myhome.tar.gz /home/

    案例3:tar -zxvf pc.tar.gz

    案例4:tar -zxvf myhome.tar.gz -C /opt/tmp

指定运行级别

  • 运行级别介绍

    • 0:关机
    • 1:单用户【找回密码】
    • 2:多用户状态无网络服务
    • 3:多用户状态有网络服务
    • 4:系统未使用保留给用户
    • 5:图形界面
    • 6:系统重启
  • init 0/1/2/3/4/5/6

    切换运行级别

  • systemctl get-default

    查看系统默认运行级别

  • systemctl set-default multi-user.target(3)/graphical.target(5)

    设置系统的默认运行级别(CentOS7将运行级别简化为3和5)

找回root密码(CentOS7)

在系统启动时按“e”,编辑所选项

将光标移动至红色方框处,并追加“init=/bin/sh”,追加后按 Ctrl + x 进入单用户模式

接着在光标闪烁出输入”mount -o remount,rw /“,按回车,输入”passwd”,按回车,连续输入新密码两次后光标继续闪烁

接着输入“touch /.autorelabel”后按回车,再输入“exec /sbin/init“后回车,等待系统重启即成功重置密码

帮助指令

  • man 命令或者配置文件

    获取相关命令的帮助信息

  • help 命令

    获得shell内置命令的帮助信息

文件目录相关指令

  • pwd

    显示当前工作目录的绝对路径

  • ls [选项] [文件或目录]

    • -a 显示所有,包括隐藏的(.开头)
    • -l 以列表方式显示信息
    • -al / -la 组合使用
  • cd [目录]

​ 切换至指定目录

​ cd ~ 切换至当前用户的家目录

​ cd ../ 切换至上一级目录pwd

  • mkdir [选项] 要创建的目录

    • -p 创建多级目录

      案例1:mkdir /home/dog 创建一个目录

      案例2:mkdir -p /home/animal/dog 创建多级目录

  • rmdir [选项] 要删除的空目录

    • rm -rf 强制删除目录(无论是否为空)

      案例一:rmdir /home/dog

      案例二:rm -rf /home/animal/dog

  • touch 文件名

    创建新的空文件

  • cp [选项] 源文件/目录 目标目录

    • -r 递归复制整个目录
    • \cp 强制覆盖原有的旧文件
  • rm [选项] 要删除的文件或目录

    • -r 递归删除目录
    • -f 强制删除,不提示
  • mv 旧名 新名

    重命名文件或目录

  • mv 文件或目录 新目录

    移动文件或目录

  • cat [选项] 要查看的文件

    查看文件

    • -n 显示行号
  • more 要查看的文件

    按页显示文件

    • 空格键 向下翻一页
    • Enter 向下翻一行
    • q 离开more不在显示文件
    • Ctrl + f 向下滚动一屏
    • Ctrl + b 向上滚动一屏
    • = 输出当前行的行号
    • :f 输出文件名和当前行的行号
  • less 要查看的文件(适合查看较大的文件)

    分屏查看文件内容,支持各种显示终端,并非一次全部加载整个文件,而是根据显示的需要加载

    • 空格键 向下翻一页
    • pagedown 向下翻一页
    • pageup 向上翻一页
    • /字串 向下搜寻字串;”n“向下查找;”N”向上查找
    • ?字串 向上搜寻字串;”n”向上查找;”N”向下查找
    • q 离开less
  • echo [选项] 输出内容

    输出内容至控制台

​ 案例1:echo $PATH ;输出环境变量

​ 案例2:echo $HOSTNAME;输出主机名

​ 案例3:echo “hello,world”;输出指定内容

  • “>” 目标文件(覆盖写)

    输出重定向指令,将输出内容重新覆盖到目标文件

    案例1:ls -l > 文件

    案例2:cat 文件1 > 文件2

  • “>>” 目标文件(追加写)

    输出重定向指令,将输出内容重新追加到目标文件

    案例1:echo “追加内容” >> 目标文件

    案例2:cal >> /home/mycal (cal命令输出当前日期)

  • head [选项] 文件

    查看文件前10行内容

    • -n 指定显示行数
  • tail [选项] 文件

    查看文件后10行内容

    • -n 指定显示行数
    • -f 实时监控文件的追加内容(Ctrl + c 退出)
  • ln -s [源文件或目录] [软链接名]

    为原文件创建一个软链接

  • history

    查看操作历史

    案例1:history 10 ;显示最新十条

    案例2:!5;重新执行编号为5的指令

关机&重启命令

  • 关闭系统

    • shutdown -h now

      立刻进行关机

    • shutdown -h 1 “hello everyone ,一分钟后关机”

      1分钟后关机并通知所有登陆到该系统的用户

    • shutdown -r now

      立刻重启计算机

    • halt

      关机,作用与”shutdown”相同

    • reboot

      立刻重启计算机

    • sync

      把内存数据写入到磁盘,一般在关机或重启前要执行

用户注销与登录

  • su - 用户名

    用户切换

  • logout(在图形化界面无效,在运行级别3有效)

    注销当前用户

用户管理

  • uesradd 用户名

    添加用户

  • useradd -d 指定目录 用户名

    添加用户并指定用户目录

  • passwd 用户名

    为指定用户修改密码

  • pwd

    显示当前所在目录

  • userdel 用户名

    删除用户账号,但是保留用户的目录

  • userdel -r 用户名(谨慎使用)

    删除用户账号以及用户的目录

  • id 用户名

    查询用户信息(用户id,组id,用户组id)

  • whoami/who am i

    查询当前用户

用户组

类似于角色,系统对有共性(权限)的多个用户进行统一管理

  • groupadd 组名

    添加用户组

  • groupdel 组名

    删除用户组

  • useradd -g 用户组名 用户名

    添加用户至指定组

  • usermod -g 用户组名 用户名

    修改用户所在的用户组

用户和组的相关文件
  • /etc/passwd 文件(用户信息配置文件)

    格式 用户名:口令:uid:gid:注释性描述:主目录:登陆shell

  • /etc/shadow文件(口令配置文件)

    格式 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

  • /etc/group文件 (组配置文件)

    格式 组名:口令:组标识号:组内用户列表

  • vim的模式及切换

  • 快捷键的使用

    • 拷贝/粘贴(一般模式)

      拷贝当前行:yy

      拷贝当前行至下5行:5yy

      粘贴:p

    • 删除(一般模式)

      删除当前行:dd

      删除当前行至下5行:5dd

    • 查找(/命令行模式)

      输入 ”/“ 进入命令行模式,输入要查找的内容,按”n”切换匹配结果

    • 设置/取消文件行号(:命令行模式)

      设置行号:set nu

      取消行号:set nonu

    • 到达文件末行和首行(一般模式)

      到达文件末行:G

      到达文件首行:gg

    • 撤销(一般模式)

      撤销最新的动作:u

    • 移动光标至指定行(一般模式)

      光标移动到第23行:23G

在Linux系统中,一切皆是文件

  • 文件目录结构

  • /

    根目录

  • /boot

    存放系统启动时的核心文件

  • /bin

    Binary的缩写,存放经常使用的命令

  • /etc

    存放系统和应用程序的配置文件

  • /sbin

    System Binary 的缩写,存放可对系统进行配置的命令

  • /home

    存放普通用户的主目录,每个用户有一个目录,一般以用户名命名

  • /lib

    存放最基础的动态链接共享库

  • /usr

    用户安装程序的默认目录,类似win下的“Program Files”

  • /usr/local

    应用程序的安装目录

  • /root

    系统管理员的用户主目录

  • /proc 、 /srv 、/sys

    系统相关的文件[勿动]

  • /tmp

    存放临时文件

  • /dev

    将所有的硬件用文件的形式存储起来,类似win下的设备管理器

  • /mnt

    为了让用户挂载外部存储空间,如虚拟机与母机直接的共享存储空间

  • /opt

    应用程序安装包存放的目录

  • /var

    存放着在不断扩充的东西,如日志文件