Linux初级命令
2020-09-28 15:54:41 0 举报
AI智能生成
Linux常用命令全覆盖
作者其他创作
大纲/内容
vim
描述
是一个文本编辑程序
没有菜单,没有命令,命令繁多
基本工作模式
命令模式
移动光标
h:←
l:→
j:↓
k:↑
gg:移动到文件开头
G:移动到文件末尾
0:移动到行首
$: 移动到行尾
123G:跳转到123行
删除
并不是真的删除,实际上是剪切
x:删除光标后一个字符,相当于Del
X:删除光标前的一个字符,相当于Backspace
dw:删除光标开始位置的单词,包含光标所在位置
光标必须移动到删除单词的首字符
d0:删除光标前本行所有内容,不包含光标所在字符
D(d$):删除光标后本行所有内容,包含光标所在字符
dd:删除光标所在行
n dd:删除指定的行数
撤销
u:一步一步撤销
Ctrl r:反撤销
复制粘贴
yy:复制当前行
n yy:复制n行
p:再光标所在位置向下新开辟一行,粘贴
P:从光标所在行,开始粘贴
可视模式
V:按字移动
配合h、j、k、l使用,使用y复制选中内容,d删除
查找操作
/hello->从光标所在位置向后查找hello
n:下一个
N:上一个
?hello->从光标所在位置向前查找hello
n:下一个
N:上一个
在所要查找的单词上使用#进行查找
替换操作
r:替换当前字符
文本行移动
调整格式
>>:文本行右移
<<:文本行左移
查看man page
光标移动到函数上,shift-k
3shift-k,查看第三章的man page
文本输入模式
进入输入模式
i:插入光标前一个字符
I:插入行首
a:插入光标后一个字符
A:插入行末
o:向下新开一行,插入行首
O:向上新开一行,插入行首
s:删除光标所在字符
S:删除当前行
末行模式
命令
行跳转
:123->跳转到第123行
替换
替换一行
:s/abc/123->将当前行中的第一个abc替换成123
:s/abc/123/g->将当前行的所有abc替换为123
替换全部
:%s/abc/123->将所有行中的第一个abc替换成123
:%s/abc/123/g->将所有行中的abc替换成123
替换指定行
:10,30s/abc/123/g->将10-30行中的abc全部替换成123
执行shell命令
末行模式下输入!,后面跟 命令
分屏操作
末行模式下
命令:sp将屏幕分为两部分--水平
命令:vsp将屏幕分为两部分--垂直
命令:sp(vsp)+文件名 水平或者垂直拆分窗口显示两个不同的文件
操作
命令:wqall保存并退出所有屏幕
命令:wq保存并退出光标所在屏幕,命令模式ZZ
ctrl+ww切换两个屏幕
vim打造IDE
系统配置文件目录:/etc/vim/vimrc
用户级配置文件目录:~/.vim/vimrc
gcc
查看版本号
-v /--version
产生目标文件
-o
指定头文件目录
-I+目录
编译时定义宏
-D
控制log的输出
编译优化
-On n=0~3
-O0-没有优化
-O1-缺省值
-O3-优化级别最高
提示更多警告信息
-Wall
只编译子程序
-c
生成预处理文件
-E
包含调试信息
-g(gdb调试时候必须加此参数)
预处理-E-->编译-S-->汇编-c-->链接无参数
虚拟地址空间图
静态库
命名格式(libsort.a)
lib开头
静态库名
.a结尾
描述
优点
寻址方便,速度快
库被打包到可执行程序中,直接发布可执行程序即可使用
缺点
静态库的代码再编译过程中已经被载入可执行程序中,因此体积较大
如果静态库函数改变了,那么你的程序必须重新编译
使用场合
在核心程序上,保证速度,可忽视空间
主流应用于80、90年代,现在很少用
制作
生成对应的.o文件
gcc a.c b.c c.c -c
得到静态库libmytest.a
ar rcs libmytest.a a.o b.o c.o(就是一个打包.o文件的过程)
ar 工具不包含在gcc中
r-->将文件插入静态库中
c-->创建静态库,不管库是否存在
s-->写入一个目标文件索引到库中,或者更新一个存在的目标文件索引
查看库中的符号(函数、全局变量等):nm libmytest.a
使用静态库
gcc+源文件+ -L静态库路径 + -l静态库名 + -I头文件目录 + -o可执行文件名
gcc main.c -L ./ -lmytest -I ./ -o app
gcc main.c -L ./ -lmytest -I ./ -o app
-L-->指定库所在的路径
-l-->指定库的名字
去掉前缀lib
去掉后缀.a
只留下中间部分
-I-->头文件目录位置
gcc+源文件+ -I头文件 + libxxx.a
生成的静态库需要跟对应的头文件同时发布
头文件存放的是函数接口(函数声明)
共享库
(动态库)
(动态库)
描述
机制
共享库的代码是在可执行程序运行时才载入内存的,再编译过程中仅简单引用,因此代码体积较小
优点
节省内存(共享)
易于更新(动态链接)
停止运行程序
使用新库覆盖旧库(保证新旧库名称一致,接口一致)
重新启动程序
缺点
延时绑定,速度略慢
使用场合
对速度要求不是很强烈的地方都应使用动态库
注意事项
动态库是否加载到内存,取决于程序是否运行
命名格式
libmytest.so
lib开头
动态库名
.so结尾
制作
生成“与位置无关”的目标文件(相对地址)
gcc -fPIC a.c b.c c.c -c
参数 -fPIC表示生成与位置无关代码
执行完毕后生成一系列的.o文件
制作动态库
gcc -shared -o libmytest.so a.o b.o c.o
参数:-shared 制作动态库
-o:重命名生成的新文件
使用动态库
gcc main.c -L ./ -lmytest -I./ -o app
-L-->指定库所在的路径
去掉后缀.so
只留下中间部分
-l-->头文件目录位置
执行生成的可执行文件
./app-->运行失败
查看依赖的共享库:ldd app 发现libmytest找不到
没有给动态链接器(ld-linux.so.2)指定好动态库libmytest.so的路径
解决方案
1.临时设置:export LD_LIBRARY_PATH=库路径,将当前目录加入环境变量,但是终端退出就失效了
LD_LIBRARY_PATH
作用
指定查找共享库(动态链接库)时除了默认路径之外的其他路径
该路径在默认路径之前查找
设置方法
用export命令来设置值
2.永久设置:将上条写入家目录下.bashrc文件中,修改完毕后需要重启终端才会生效
3.粗暴设置:直接将libmytest.so文件拷贝到/usr/lib/[/lib]目录下(受libc库的启发)
4.将libmytest.so所在绝对路径追加到/etc/ld.so.conf文件,使用sudo ldconfig -v 更新
GDB调试
使用场景
程序编译无误,但是有逻辑错误
使用文字终端(shell),实现一个单步调试的功能
生成可执行文件之前必须加参数-g
gcc hello.c -o hello -g
启动gdb调试
gdb+可执行程序(如:gdb hello)
gdb相关命令
l(list)-->列出文件的代码清单
l+行号--l 32 (函数名)-->代码从第32行开始显示
l+文件名:行号(函数名)
b(break)-->设置断点
b+行号(b 12)-->在第12行设置断点
b+行号(2)+条件(if i==5)-->在第2行设置断点,只有i等于5时生效
b+文件名:行号(函数名)
info b(break)-->查看断点信息
disable/enable+断点号-->设置断点是否生效
d(delete)+断点号-->删除指定断点号对应的断点
r(run)-->运行程序
start-->单步执行,运行程序,停在第一行执行语句
p(print)+变量名-->打印变量值
display+变量名-->追踪变量
之后每执行一步,该变量值都会被打印出来
undisplay+变量名编号-->取消追踪
获取编号:info display
n(next)-->下一行(不会进入到函数体内部)
s(step)-->下一步(会进入函数体内部)
u-->退出当前循环
ptype+变量名-->查看变量的类型
set-->设置变量的值 set var n=100
finish-->结束当前函数,返回到函数调用点
如果在循环体中是无法退出的,得先去断点
q(quit)-->退出gdb
linux命令基础
命令初识
命令解析器
shell
Unix
bash
Linux
本质
根据你的输入来调用对应的操作
终端
终端翻页
shift+PageUp->上翻页
shift+PageDn->下翻页
清屏
clean
ctrl+l
创建终端
ctrl+Alt+t
ctrl+shift+T(添加新标签页)
快捷键
历史命令
histor
切换命令
ctrl+p
向上
ctrl+n
向下
光标移动
向前
ctrl+b
向后
ctrl+f
行首
ctrl+a
行尾
ctrl+e
删除光标前
ctrl+h
删除光标后
ctrl+d
删除光标前所有
ctrl+u
目录存放内容
/bin
存放常用命令,会自动配置环境变量
/boot
存放Linux启动是的一些核心文件,包括连接文件以及镜像文件
/dev
存放设备文件,Linux外设
/etc
安装的软件什么的一些配置文件
/home
当前系统的用户目录
/lib
库,操作系统下的动态库(共享库)
/lost+found
存放文件碎片
/media /mnt
自动识别的一些设备,就是挂载外设
/opt
第三方软件
/proc
系统内存映射
/root
超级用户目录
usr
用户软件资源目录,装的一些软件什么的
目录切换
临近的两个目录
cd -
文件目录操作
tree
sudo apt-get install tree
ls -la
创建目录
mkdir dir/dir1/dir2 -p 多层目录
删除目录
rm -ri r:递归 i:提示
拷贝目录
cp -r 递归
查看文件内容(一般使用vi)
cat
显示到屏幕上
缺点:文件比较长时,终端无法全部显示
more(不重要)
回车键一行一行显示/空格每次翻一页(不能返回查看) /q退出
less
回车行显示/ctrl+p可以按行回显,ctrl+b向前翻页, ctrl+f向后翻页
head
前十行
head -5 xxx 前几行
tail
后十行
文件改名/移动
mv
创建快捷方式/软链接
ln -s 1.. 2..
1.路径名(写绝对路劲即可全局使用) 2.软链接名
硬链接(硬链接计数)|(inode)
ln
相当于给文件做了一个备份,但是并不占用磁盘空间
不能给目录创建硬链接
了解
文件目录属性
wc
获取文件目录的 行/词/字节数
od
查看二进制文件
od -tx 十六进制显示
du -h
查看当前目录的所有目录的大小
df -h
查看磁盘使用情况
which
查看用的命令的目录
cd是内置命令查不到
目录必须有执行权限,不然无法进入
文件属性
修改文件权限
文字设定法
chmod [who] [+ - =] [mode]
数字设定法
修改文件所有者:所属组权限
chown **:** ***
修改文件所属组
chgrp ** ***
文件查找检索
1.按文件属性查找
按名字查找
find 查找的目录 -name "文件名"
“hel*”
* 所有的
“hel?”
? 一个字符
按大小查找
find 查找的目录 -size +/-10k
大于10K/小于10K
find 查找的目录 -size +10K -size -10M
大于10k 小于10M
按文件类型
find 查找的目录 -type f/d...
mkfifo (创建管道)
2.按文件内容
grep -r “查找的内容” 查找路径
软件安装和卸载
在线安装
apt-get
安装:sudo apt-get install tree --在线下载安装
移除:sudo apt-get remove tree
更新:sudo apt-get update --更新软件列表(软件名和下载地址)
清理所有软件安装包:sudo apt-get clean
实际清理的是: /var/cache/apt/archives 目录下的.deb文件
aptitude
deb包安装
安装:sudo dpkg -i xxx.deb
卸载:sudo dpkg -r xxx
源码 安装
1.解压缩源代码 包
2.进入到安装目录: cd dir
3.检测文件是否缺失,创建Makefile,检测编译环境:./configure
可能会有其他的参数,比如说安装到什么路径下等
4.编译源码,生成库和可执行程序:make
5.把库和可执行程序,安装到系统目录下:sudo make install
6.删除和卸载软件:sudo make distclean
7.上述安装步骤不是绝对的,查看附带的README文件
磁盘管理(挂载型)
挂载mount
系统默认挂载目录/media
手动挂载目录 /mnt
挂载方式:mount+设备名+挂载目录
设备名:sudo fdisk -l
磁盘命名规则
磁盘设备种类
sd --> SCSI Device
hd --> Hard Disk 硬盘
fd --> Floppy Disk 软盘
sd --> SCSI Device
hd --> Hard Disk 硬盘
fd --> Floppy Disk 软盘
挂载目录
默认手动挂载到/mnt
挂载到/mnt以外的目录下会遮蔽原目录下的内容,卸载后才能再次看到
卸载umount
卸载的时候,用户的当前位置一定不能再 /mnt(/media)或者其子目录下,否则无法卸载
sudo umount /mnt
压缩包管理
屌丝工具
gzip/gunzip
无法压缩目录,不保留源文件
bzip2/bunzip2 -k
无法压缩目录,可保留源文件
高富帅版
tar
不使用z/j参数时,只能对文件或目录打包
参数
c--创建--压缩
x--释放--解压缩
v--显示提示信息--压缩解压缩--可以忽略
f--指定压缩文件的名字
z--使用gzip方式压缩 .gz
j--使用bzip2方式压缩 .bz2
压缩
tar zcvf 生成的压缩包名字(xxx.tar.gz) 要压缩的文件或目录
tar jcvf 生成的压缩包名字(xxx.tar.bz2) 要压缩的文件或目录
解压缩
tar jxvf 压缩包的名字(解压到当前目录)
tar jcvf 压缩包的名字 -C 目录
rar
自动添加后缀
参数
压缩:a
解压缩:x
压缩
rar a 生成的压缩文件名 要压缩的文件或目录
解压缩
rar a 解压的文件名 (目录)
zip
参数
压缩目录需要加 -r
压缩
zip 压缩包的名字 要压缩 的文件或目录
解压缩
unzip 压缩包的名字
unzip 压缩包的名字 -d 目录
进程管理
who
查看当前在线用户的情况
登录的用户名
使用的设备终端(pts)
登录到系统的时间
tty设备
tty1-tty6表示文字界面
ctrl+alt+[F1-F6]
tty7图形界面
ctrl+alt+F7
ps
查看整个系统内部所运行的进程
涉及的参数
a:(all)当前系统所有用户的进程
u:查看进程所有者及其他一些信息
x:显示没有控制终端的进程--不能与用户进行交互的进程【输入、输出】
显示当前用户下所有的进程
ps aux
对显示的进程过滤
ps aux | grep xxx
管道
指令1的输出做为指令2的输入
指令2处理完毕,将结果输出到屏幕上
grep查询是需要占用一个进程的,如果结果>2说明存在
如果进程=1,表示没有查询的进程
查询结果中PID表示进程ID
kill
用来终止制定的进程(terminate a process)的运行
查看信号编号
kill -l
杀死进程
kill -SIGKILL 89899【PID-进程标识号】
向当前进程发送了9号信号(SIGKILL)
env
查看当前进程环境变量
环境变量
当前系统下用户的配置路径信息
格式为键值对:key=value:value(多个值之间用:分隔)
PATH:该环境变量中记录着shell命令解析器去查找命令的目录位置,从前往后的顺序查找
LANG:语言以及字符集
top
相当于windows下的任务管理器
文字版
不能翻页
网络管理
ifconfig
获取网络接口配置信息,还可以修改这些配置
获取网络接口信息
ping
测试与目标 主机的连通性
命令格式
ping[参数]主机名或ip地址]
参数
-c数目:在发送制定数目的包后停止
-i秒数:设定间隔几秒发送一个网络封包给一台机器,预设值是一秒一次
nslookup
查看服务器域名对应的IP地址
一般访问网络都是使用域名,如:www.baidu.com,使用该命令就可查看百度所有服务器的IP地址
用户管理
创建用户
sudo adduser 用户名(zy) 不能使用大写
sudo useradd -s /bin/bush -g lh -d /home/zy -m zy
-s 指定新用户登录时shell类型
-g 指定所属组,该组必须已经存在
-d 用户家 目录
-m 用户家目录不存在时,自动创建目录
设置用户组
sudo groupadd zy
删除用户
sudo deluser 用户名(zy)
sudo userdel -r zy
参数 -r的作用是把用户的主目录一起删除
切换用户
su 用户名(zy)
root用户
sudo su
设置密码
sudo passwd 用户名(zy)
sudo passwd root
sudo passwd
退出登录用户
exit
服务器入门
ftp服务器
文件的上传/下载
nfs服务器
net file system -> 网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。
ssh服务器
Secure Shell->实现跨越主机远程登录
其余命令
看手册
man man共九个章节
可执行程序或shell命令
系统调用(内核提供的函数)
库调用(程序库中的函数)
特殊文件(通常位于/dev里)
文件格式或规范(如/etc/passwd)
游戏
杂项
系统管理命令
内核例程
设置或查看别名
比如查看Linux命令是不是封装过的
查看
alias
alias ls
设置
alias pag='ps aux | grep'
需要长久有效需要去设置配置文件:.bashrc
echo
在显示器上显示数据
普通数据:echo字符串
显示环境变量:echo $PATH
显示上一次程序退出值:echo $?
$:取值
?:最近一次程序退出时的返回值
关机重启
poweroff
reboot
shutdown
Makefile
文件命名规则
Makefile
makefile
用途
项目代码编译管理
节省编译项目的时间
一次编写终身受益
基本规则
目标:依赖
(tab)命令
(tab)命令
目标-->要生成的目标文件
依赖-->生成目标文件需要的一些文件
命令-->借助依赖文件生成目标文件的手段
tab-->缩进,有且只有一个
Makefile会把规则中的第一个目标作为终极目标
all:app-->all指定生成的最终目标是app
工作原理
若想生成目标,检查规则中的依赖关系是否存在
如果不存在,寻找是否有规则用来生成该依赖文件
检查规则中的目标是否需要更新,必须检查它的所有依赖
依赖中有任意一个被更新,则目标必须更新
依赖文件比目标文件时间晚,则需要更新
执行
make-->通过makefile生成目标文件
直接make(使用makefile文件)
make -f mm(指定一个名字不为makefile的文件)
make clean-->清楚编译生成的中间.o文件和最终目标文件
如果当前目录下有同名clean文件,则不执行clean对应的命令
解决方案-->伪目标声明:.PHONY:clean
特殊符号
-:表示此条命令出错忽略,make也会继续执行后续的命令。如:-rm a.o b.o
变量
普通变量
变量定义和赋值:obj = a.o b.o c.o
变量取值:foo = $(obj)
由Makefile维护的一些变量
通常格式是大写
CC:默认值cc(gcc)
有些有默认值,有些没有
CPPFLAGS:预处理需要的选项,如:-I
CFLAGS:编译的时候使用的参数 -Wall -g -c
LDFLAGS:链接库使用的选项-L -l
用户可以修改这些变量的默认值
CC = gcc
自动变量
变量
$@-->规则中的目标
$<-->规则中的第一个依赖条件
$^-->规则中的所有依赖条件
模式规则
%表示一个或多个
在规则的目标文件定义中使用%
在规则的依赖条件中使用%
示例:
%.o:%.c
$(CC) -c $< -o $@
$(CC) -c $< -o $@
$<-->表示一次去除依赖条件
$@-->表示依次取出目标值
函数
makefile中所有的函数必须都有返回值
wildcard
查找指定目录下指定类型的文件,一个参数
src = $(wildcard ./src/*.c)
找到./src目录下所有后缀为.c的文件,赋值给变量src
patsubst
匹配替换,从src中找到所有.c 结尾的文件,并将其替换为.o
obj = $(patsubst %.c, %.o, $(src))
把src变量中所有后缀为.c的文件替换为.o
ob = $(patsubst ./src/%.c, ./obj/%.o, $(src))
指定.o文件存放的路径./obj/%.o
0 条评论
下一页