美文网首页
Linux基本使用

Linux基本使用

作者: 攻城老狮 | 来源:发表于2021-04-07 15:07 被阅读0次

一.快捷键

# ctrl+a 移动至开头
# ctrl+e 移动至结尾
# ctrl+u 删除光标之前内容
# ctrl+l 清屏

二. 常用命令总结(Ubuntu)

# 1.查看当前系统网络情况
ifconfig

# 2.查看端口占用情况
netstat -nplt

# 3.查看防火墙状态
ufw status

# 4.查看当前目录大学
du -h

# 5.查看磁盘使用情况
df -h

# 6.查看内存使用情况
free -m

# 7.修改文件权限
# 文字设定法:
# 1) who:文件所有者(u)、文件所属组(g)、其他人(o)、所有人(a)
# 2) +:增加权限、-:减少权限、=:覆盖原来权限
# 3) mode:读(r)、写(w)、执行(x)
chmod [who] [+|-|=] [mode] 文件名
# 数字设定法:
# 1) r:读权限(4)
# 2) w:写权限(2)
# 3) x:执行权限(1)
chmod 777 【文件名】

# 8.改变文件或目录的所有者或所属者
chown 【所有者】【文件】
chown 【所有者:所属组】【文件】

# 9.查找和检索
# 按文件属性查找:
# 1)文件名:
find + 查找的目录 + -name +“文件的名字”
# 2)文件大小:
find + 查找的目录 + -size + 文件的大小
# 3)文件类型:
find + 查找的目录 + -type + d(目录)/f(普通文件)/b(块设备)/c(字符设备)/s(套接字)/p(管道)/l(链接符号)
# 按文件内容查找:
grep -r “查找内容”+查找路径

# 10.软件的安装和卸载
# 在线安装:
# 1)安装:
sudo apt-get install xxx
# 2)卸载:
sudo apt-get remove xxx
# 3)更新:(升级所有包同时也升级软件和系统内核。更新软件列表。)
sudo apt-get update
# 4)清空:(情况安装包缓存,实际清理的是:/var/cache/apt/archives目录下的.deb文件)
sudo apt-get clean
# deb包安装:
# 1)安装:
sudo dpkg -i deb包
# 2)卸载:
sudo dpkg -r 卸载包
# 源码安装:
# 1) 解压缩源代码包
# 2) 进入到安装目录:cd dir
# 3) 检测文件是否缺失,创建Makefile,检测编译环境:./configure
# 4) 编译源代码,生成库和可执行程序make
# 5) 把库和可执行程序,安装到系统目录下:sudo make install
# 6) 删除和卸载软件:sudo make distclean
# 7) 上述安装步骤并不绝对,应该查看附带的README文件,会有详细说明。

# 11.挂载U盘
# 挂载(mount命令):
# 1)系统默认挂载目录:/media
# 2)手动挂载目录:/mnt,可用sudo fdisk -l查看设备信息
sudo mount 【设备名】【/mnt】
# 卸载(umount命令):(注意:不能在要卸载的目录中)
sudo umount 【卸载路径】

# 12.压缩包管理
# 1)gzip: .gz格式的压缩包,不会打包压缩也不会保留原文件
# 压缩
gzip 【文件名】
# 解压缩
gunzip【文件名】
# 2)bzip2: .bz2格式的压缩包,不能压缩目录,只能压缩文件
# 压缩
bzip2 【文件名】
# 解压缩
bunzip2【文件名】
# 3)tar:
# 参数:
# a) c -- 创建
# b) x -- 释放(与c互斥,不能一起用)
# c) v -- 显示提示信息 -- 压缩解压缩时可以省略
# d) f -- 指定压缩文件名字(压缩解压缩时都要使用)
# e) z -- 使用gzip方式压缩文件 -- .gz
# f) j -- 使用bzip2方式压缩文件 -- .bz2
# 压缩:
tar zcvf 【生成的压缩包的名字(xxx.tar.gz)】【要压缩的文件或目录】
tar jcvf  【生成的压缩包的名字(xxx.tar.bz2)】【要压缩的文件或目录】
# 解压缩
tar zxvf 【压缩包的名字】(解压到当前目录)/tar zxvf 【压缩包的名字】-C 【路径】(压缩到指定路径)
tar jxvf 【压缩包的名字】(解压到当前目录)/tar jxvf 【压缩包的名字】-C 【路径】(压缩到指定路径)
# 4)rar: (必须手动安装该软件)
# 参数:
# a) 压缩:a
# b) 解压缩:x
# 压缩:
rar a 【生成的压缩文件的名字(无需指定后缀,会自动生成)】【要压缩的文件或目录】
# 解压缩:
rar x 【压缩文件名】/rar x 【压缩文件名】【指定路径】
# 5)zip:
# 参数:压缩目录需要加递归参数 -r / 解压缩到指定路径要加-d
# 压缩
zip 【生成的压缩包名字】【压缩到的文件或目录】
# 解压缩
unzip 【压缩包的名字】/unzip 【压缩包的名字】 -d 【解压缩到指定路径】

# 13.进程管理
# 1)查看整个系统内部运行的进程状况
# 参数:一般使用aux,三个可以一起连用
# a) a(查看所有用户信息)
# b) u(用户的信息)可与a连用:ps au
# c) x(查看没有终端的应用程序)ps aux,终端的作用是与用户进行交互。
ps aux | grep xxx(查找进程里的xxx进程,ps aux是查看所有进程信息,grep是查找这些进程中有没有xxx进程)
# 2)杀死进程
kill -9 【进程PID】
# 3)查看当前进程的环境变量:(所有环境变量设置)
env
# 4)任务管理器
top

# 14.用户管理
# 1)创建用户
# 方法一(是一个脚本)
sudo adduser 【用户名(不能包含大写字母)】
# 方法二
1) -s指定新用户登录时shell类型
2) -g指定所属组,该组必须已经存在
3) -d用户家目录
4) -m用户家目录不存在时自动创建该目录
5) 如果组不存在,则sudo groupadd 【组名】
sudo useradd -s 【/bin/bash】 -g 【xxx】-d 【/home/xxx】 -m 【xxx】
# 2)删除用户
# 方法一(手动删除家目录)
sudo deluser 【用户名】
# 方法二(-r的作用是把用户的主目录一起删除)
sudo userdel -r 【用户名】
# 3)切换用户
su 【用户】
# 4)设置密码
sudo passwd 【用户】

# 15.其他
# 1)创建终端
ctrl + alt + t
# 2)更改tty
ctrl + alt + F1~7
# 3)查看别名
alias
# 4)关机
poweroff
# 5)重启
reboot

三 Vim使用

image-20210310100756541.png
## 命令模式下的操作
# 1.光标移动
0(行首)、$(行尾)、gg(文本首)、shift+G(文本尾),N+G(跳到N行)
# 2.删除操作
x(删除光标上的字符(也就是光标后的))、shift+x(X删除光标前的字符)、d0(从光标往前删到行首)、d$(删除光标以后的部分)、dd(删除整行)、4dd(删除从光标开始数四行)
# 3.撤销操作
u(撤销)、Ctrl+r(反撤销)
# 4.复制粘贴操作
p(粘贴,粘贴至光标所在行的下一行)、shift+p(粘贴至光标所在行)、yy(复制光标所在行)、Nyy(复制N行)
# 5.可视模式
v(切换为可视模式)复制(y)或者删除(d)
# 6.查找操作
/【要查找的单词】 (输入n可在查找高亮目标进行切换)
# 7.缩减
向右>>,向左<<

## 文本(编辑)模式下的操作
i:插入字符到光标前面

## 末行模式下的操作
# 1.替换:
1) 先将光标移动到要替换的单词那一行
2) 输入:切换至末行模式,输入s/【要替换的内容】/【替换成的内容】
3) 若要替换当前行所有的这个内容,需输入s/【要替换的内容】/【替换成的内容】/g
4) %s/【要替换的内容】/【替换成的内容】:替换文本中每一行第一个该内容
5) s/【要替换的内容】/【替换成的内容】/g:替换文本中所有该内容
6) 27,30s/【要替换的内容】/【替换成的内容】/g:替换27到30行
# 2.保存退出
wq

## 分屏操作
1)水平分屏:末行模式下输入sp,Ctrl+w+w可以上下切换屏幕操作,wqall全部退出,不加all在哪个文件操作哪个
2)垂直分屏:末行模式下输入vsp,Ctrl+w+w可以在两个屏幕之间切换,vsp 【当前目录下文件名字】即可用一个分屏操作另一个文件。

四 gcc使用

image-20210310135511603.png
# 1.直接由C文件生成exe文件'
gcc hello.c -o myapp
# 2.gcc的一些参数使用
i. -E:预处理(.i文件)
ii. -S:C转汇编(例如gcc -S hello.i -o hello.s,其他同理)(.s文件)
iii. -c:汇编转二进制(.o文件)
iv. -o:生成文件
v. -I:gcc hello.c -I 【头文件路径】-o app(要么头文件与C文件在同一目录下,要么指定头文件目录)
vi. -D:gcc hello.c -I 【头文件路径】-o app -D 【宏】(编译时定义宏)
vii. -O:优化(0、1、3三个等级优化,可以优化冗余代码,例如-O0没有优化、-O1缺省值、-O3优化级别最高)
viii. -Wall:输出警告信息
ix. -g:添加调试信息(文件会变大)(gdb调试的时候必须加此参数)

五 静态库

# 1.命名规则
lib + 库的名字 + .a(所有静态库都是.a结尾),例如libmytest.a(库的名字就是mytest)
# 2.制作步骤
i. 生成对应的.o文件(xxx.c---->xxx.o,只需要-c即可转换):gcc  -c  *.c
ii. 将生成的.o文件打包(打包工具ar)ar rcs 【静态库的名字】【生成的所有的.o文件】
iii. -L(指定库的目录),-l(指定库的名字mytest,掐头去尾)
iv. nm 【libmytest.a】查看库的内容
# 3.优缺点
i. 优点:
    1) 发布程序的时候不需要提供对应的库
    2) 加载库的速度快
ii. 缺点:
    1) 库被打包到应用程序中导致库的体积很大
    2) 库发生了改变,需要重新编译

示例

image-20210310151036285.png
  1. 编写需要生成静态库的程序
  • head.h
#ifndef __HEAD_H
#define __HEAD_H
int add(int num1,int num2);
int sub(int num1,int num2);
int mul(int num1,int num2);
int div(int num1,int num2);
#endif
  • add.c,sub.c,mul.c,div.c
#include "head.h"
int add(int num1,int num2){
    return num1 + num2;
}

#include "head.h"
int sub(int num1,int num2){
    return num1 - num2;
}

#include "head.h"
int mul(int num1,int num2){
    return num1 * num2;
}

#include "head.h"
int div(int num1,int num2){
    return num1 / num2;
}
  1. 生成对应的.o文件
gcc -c *.c -I ../include
  1. 将生成的.o文件打包
ar rcs libMyCalc.a *.o
mv libMyCalc.a ../lib/ # 移动到lib目录
  1. 编写文件使用静态库 main.c
#include <stdio.h>
#include "head.h"
int main(void){
    int addResult = add(10,20);
    int subResult = sub(10,20);
    int mulResult = mul(10,20);
    int divResult = div(10,20);
    
    printf("add: %d\n",addResult);
    printf("sub: %d\n",subResult);
    printf("mul: %d\n",mulResult);
    printf("div: %d\n",divResult);
    return 0;
}
  1. 生成可执行程序
gcc main.c -I include/ -L lib/ -l MyCalc -o app
  1. 查看库内容
nm lib/libMyCalc.a 

六 动态库

# 1.命名规则
lib+名字+.so
# 2.制作步骤:
i. 生成与位置无关的代码(生成与位置无关的.o(静态库是与位置有关的.o))
gcc -fPIC -c *.c
ii. 将.o打包成共享库(动态库)(这里不是使用ar打包):
gcc -shared -o 【生成的共享库名字libmytest.so】 *.o 
iii. 使用:
1) 第一种:gcc main.c libmytest.so -o app
2) 第二种:gcc main.c -L【库的路径】 -l mytest -o app
# 3.解决程序执行时动态库无法被加载的问题
ldd myapp (查看执行文件的动态链接库)
1) 粗暴设置:将库复制粘贴到lib目录即可使用动态链接器(PATH环境变量),
sudo cp lib/libmytest.so /lib
2) 临时设置:可以将动态库路径指定到环境变量:LD_LIBRARY_PATH(临时的,关掉就没有了,开发过程中测试场景)
    a) echo $LD_LIBRARY_PATH(发现没有值)
    b) 赋值:$LD_LIBRARY_PATH=【动态库路径】
    c) export $LD_LIBRARY_PATH(将设置的值导入到系统环境变量中)
3) 永久设置(不推荐):
    a) 在家目录下,ls -a找到.bashrc(配置文件,重启终端生效)
    b) vi  .bashrc
    c) G将光标移动到最后一行,将export LD_LIBRARY_PATH=【绝对路径】写在在最后一行即可永久操作动态库。
4) 第四种设置方法:     
    a) 需要找到动态链接器的配置文件————ls -l ld.so.conf(/etc目录下)
    b) 动态库的路径写到配置文件中————sudo vi ld.so.conf
    c) o添加一行(将动态库绝对路径写上即可),wq
    d) 更新————sudo ldconfig -v(-v信息输出,tar zxvf中有)
    e) ldd发现链接好了
# 4.优缺点:
i. 优点:
    1) 执行程序体积小
    2) 动态库更新不需要重新编译(前提是接口不变,内容可以变)
ii. 缺点:
    1) 需要把动态库提供给用户
    2) 没有被打包到应用程序中,相对静态库较慢

示例

  1. 编写使用动态库的程序文件(延续使用静态库的案例)

  2. 生成对应与位置无关的.o文件

gcc -fPIC -c *.c -I ../include/
  1. 将.o打包成共享库
 gcc -shared -o libMyCalc.so *.o
 mv libMyCalc.so ../lib/ # 移动到lib目录
  1. 生成可执行文件
gcc main.c lib/libMyCalc.so -o app -I include/
# 或者使用下面命令,需解决程序执行时动态库无法被加载的问题
gcc main.c -I include/ -L lib -l MyCalc -o app

七 gdb调试

gdb调试:gcc *.c -o app -g(-g的作用是输出调试信息)
a. 启动gdb:gdb 【应用程序名字】
b. 查看代码:l (默认打开包含main的文件)、l 【文件名】:20(打开其他代码文件的第20行代码)、l【文件名】:【函数名】(再按l继续查看下面的内容)
c. 设置断点:break 7(在第七行打断点)break也可简写为b
    i. 设置当前文件断点:break b 
    ii. 设置指定文件断点:b 【文件名】:行号/【函数名】
    iii. 设置条件断点:b 15 if i==15(如果i==15则停)
    iv. 删除断点:
        1) info break(查看断点信息,找到要删除的断点编号)
        2) d 【编号】
d. 查看设置的断点:i b (info break)查看断点信息
e. 开始执行gdb调试:
    i. 执行一步操作:start (只执行一步)
    ii. 继续执行:n(单步执行、跳过函数体)、c(继续执行,知道停在断点位置)、s(单步、可进入函数体内部)
    iii. 执行多步,最直接停在断点处:run或者r
f. 单步调试
    i. 进入函数体内部:s
    ii. 从函数体内部跳出:finish
    iii. 不进入函数体内部:n
    iv. 退出当前循环:u(跳出单次循环)
g. 查看变量的值:p 【要查看的值】
h. 查看变量的类型:ptype 【要查看的变量】
i. 设置变量的值:set  var i=10
j. 设置追踪变量:display 【要追踪的变量】
k. 取消追踪变量:
    i. info dispaly(第一步要先查看设置的追踪变量的编号)
    ii. undisplay 【追踪变量的编号】
l. 退出gdb调试:quit

八 Makefile

image-20210311150738580.png
  • makefile1
# 第一种方法修改后,修改任一.c文件都需要将整个重新编译
app:main.c add.c sub.c mul.c div.c
    gcc main.c add.c sub.c mul.c div.c -o app
  • makefile2
# 第二种方法修改后,依据依赖和目标的生成时间不同可以实现按需编译
app:main.o add.o sub.o mul.o div.o
    gcc main.o add.o sub.o mul.o div.o -o app

main.o:main.c
    gcc -c main.c
add.o:add.c
    gcc -c add.c
sub.o:sub.c
    gcc -c sub.c
mul.o:mul.c
    gcc -c mul.c
div.o:div.c
    gcc -c div.c
  • makefile3
# 第三种方法
# makefile中的变量:
    i. 普通变量:
        1) 变量取值:foo=$(obj)
        2) makefile中自己维护的变量:(大写的都是makefile库中自己维护的变量,部分有默认值,用户都可以自己设定默认值)
                a) CC : 默认值为cc
                b) CPPFLAGS 预编译工程中的参数选项,可以自己设定默认值
                c) 还有如下变量:
                    i.CPPFLAGS 预处理器需要的选项,如-I
                    ii.CFLAGS 编译的时候使用的参数,如-Wall -g -c
                    iii.LDFLAGS 链接库使用的选项,如-L -l
                d) 用户可以自己设定默认值CC=gcc
    ii. 自动变量:
        1) 变量:
            a) $<:规则中的第一个依赖
            b) $@:规则中的目标
            c) $^:规则中的所有依赖
            d) 都必须在规则中的命令使用
         2) 横式规则:
             a) 在规则的目标定义中使用%
             b) 在规则的依赖条件中使用%

obj=main.o add.o sub.o mul.o div.o
target=app
$(target):$(obj)
    gcc $(obj) -o $(target)

%.o:%.c
    gcc -c $< -o $@
  • makefile4
  # makefile中函数的使用
    i. src=$(wildcard 【指定目录】/*.c)  — — — — 函数wildcard:在指定目录下查找所有.c文件
    ii. obj=$(patsubst【指定目录】/%.c,【指定目录】/%.o,$(src))  — — — — 匹配替换,将src找到的.c文件替换为.o文件
target=app
src=$(wildcard ./*.c)
obj=$(patsubst ./%.c, ./%.o, $(src))
CC=gcc

$(target):$(obj)
    $(CC) $(obj) -o $(target)

%.o:%.c
    $(CC) -c $< -o $@

clean:
    -mkdir /aa #(- 表示程序出错忽略,继续执行)
    rm -rf $(obj) $(target)

hello:
    echo "Hello Makefile"

相关文章

  • Linux基本使用

    查看文件安装目录 查看文件 创建文件夹 创建文件 编辑文件 删除文件

  • Linux基本使用

    一.快捷键 二. 常用命令总结(Ubuntu) 三 Vim使用 四 gcc使用 五 静态库 示例 编写需要生成静态...

  • Linux基本使用

    zsh 强大的shell解释器。 特征 与bash操作近乎相同 历史记录功能 补全功能 插件:oh-my-zsh ...

  • 0808_Linux指令&Vim常用操作&nod

    Linux平台操作 Linux远程连接工具: putty, xshell, ssh linux基本命令使用 获得管...

  • 课程内容

    Day 01 计算机组成基本原理 linux 环境简介 linux 基本命令介绍练习 linux vim编辑器使用...

  • 学习小组Day2笔记之CY

    一. Linux 使用 Linux基本操作 ls -l ; pwd; mkdir; cd ; mv, cp, rm...

  • 常用命令

    Linux基本应用-基本命令的使用 【课程目的】 1.了解命令行中使用Linux命令的特点 2.掌握文件目录类命令...

  • 1- 快速上手Linux玩转典型应用- 介绍&研发必知

    快速上手Linux玩转典型应用 大牛都会使用Linux, Linux命令是行业要求。 商业服务器基本都是linux...

  • 《学习小组Day2笔记--任重道远》

    Linux# windows下使用linux Ubuntu阿里云服务器注册及申请 Linux基本命令# pwd当前...

  • linux的基本使用

    查看当前路径 : pwd 查看此文件夹下的目录: ls ls -a #查看此目录下的所有文件,包括隐藏文件 l...

网友评论

      本文标题:Linux基本使用

      本文链接:https://www.haomeiwen.com/subject/oolukltx.html