命令解析器:
shell----->unix操作系统
bash----->linux操作系统
本质:根据命令名字,调用对应的可执行程序
Linux快捷键:
ctrl+p 上一条命令
ctrl+n 下一条命令
ctrl+b 光标回退
ctrl+f 光标前进
ctrl+a 光标置头
ctrl+e 光标置尾
ctrl+d 删除光标覆盖的字符
ctrl+h 删除光标前面的字符
tab 填充命令
根目录(/)
/bin (binary) 常用命令可执行程序,相当于windows下配置环境变量
/boot 存放的是启动linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/dev Linux外部设备,在Linux中访问设备的方式和访问文件的方式是相同的
/etc 用来存放所有的系统管理所需要的配置文件和子目录
/home 所有用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
/lib 存放系统最基本的动态链接共享库,其作用类似Windows里面DLL文件,几乎所有的应用程序都需要用到这些共享库
/media Linux系统会自动识别一些设备,例如优盘光驱等,当识别后,Linux会把识别的设备挂载到这个目录下
/mnt 系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里面的内容了
/root 该目录为系统管理员,也称作超级权限者的用户主目录
/usr 非常重要的目录,用户很多应用程序和文件都放在这个目录下,类似windows下的program file目录
绿色–可执行文件
红色–压缩包
青色–链接文件(stdio)
黄色–设备文件
文件类型:
madir-----创建目录
madir test
mkdir aa/bb/cc -p 或者 mkdir -p aa/bb/cc
rmdir-------删除一个空目录(空的)
rm aa -r------递归删除目录
rm -ri bb-----提示
touch saber------创建文件
cp a temp-------拷贝文件(temp不存在就创建,存在就覆盖)
拷贝目录:
mylinux@ubuntu:~$ cp test newdir
cp: 略过目录'test'
mylinux@ubuntu:~$ cp test newdir -r //递归拷贝目录
mylinux@ubuntu:~$ tree newdir
newdir
├── a
└── b
cat 文件名----查看内容,直接展示(适合小文件)
more 文件名----分页(空格)或者 (enter)查看内容 退出q/ctrl+c
less 文件名----行(enter) ctrl+p往前翻 ctrl+n往后翻
head 文件名-----默认显示前10行
head 文件名 -n----显示前n行
tail 文件名 -n----显示后n行
mv 原file名 现在file名 ----更改文件名
mv file dir------将file移动到dir中
ln -s file名 快捷方式名-----给文件创建快捷方式(文件名如果不是绝对路径、移动后快捷方式会失效)-------创建软链接(也可以用于目录)
ln file名 file_hard------给文件创建硬链接-------相当于备份(不占用磁盘空间)
目录是不能创建硬连接的,只有文件可以
wc----获取一个文本文件信息
mylinux@ubuntu:~$ wc client.c
57 106 1138 client.c
行号 单词数 字节数 文件名
df - h------查看磁盘使用情况
which ls-----查看命令所在位置
adduser username------增加新用户
useradd -m username----增加新用户
chomd [who] [+|-|=] [mode]
who:文件所有者(u) 文件所属组(g) 其他人(o)所有人:a
+:添加权限
-:减少权限
=:覆盖原来的权限
mode: r w x
-: 没有权限
r: 4
w: 2
x: 1
such as:765
7: rwx 文件所有者
6:rw 文件所属组
5:rx 其他人
chmod -001 file:将其他人的执行权限去掉
sudo chown 所有者名 file
sudo chown 所有者名:所属组名 file
sudo chgrp 组名 file-------更改所属组
按文件名查找:find+ 查找的目录 + -name + “文件名”
按文件大小:find+查找目录+ -size + (+10k/-10k/+10M/)
按文件类型:find+查找目录+ -type +d/f/b/c/s/p/l
find +查找目录+ -user 组名
find+查找目录+ -group 组名
grep -r [查找的关键字] [路径]
mylinux@ubuntu:~$ grep include ~/test/b.c
#include
#include
#include
#include
#include
#include
#include
在线安装:
ubuntu:apt-get
centos:yum
安装tree:sudo apt-get install tree
删除tree:sudo apt-get remove tree
更新软件列表:sodu apt-get update
清理所有软件安装包:sudo apt-get clean
deb包安装(-i)卸载(-r):
sudo dpkg -i 安装包(xx,deb)
sudo dpkg -r 安装包(xx,deb)
源码安装:
低配版:gzip bzip2
gzip:只能压缩文件,不能压缩目录
bzip2:只能压缩文件,不能压缩目录
bzip2 -k *.txt(可以保留原文件)
高排版:
tar-------不使用z/j,该命令只能对文件或目录打包
c------创建------压缩
x------释放------解压缩
v------显示提示信息-----压缩解压缩------可以省略
f------指定压缩文件的名字
z------使用gzip的方式压缩文件------ .gz
j-------使用bzip2的方式压缩-------- .bz2
压缩:(语法)
tar zcvf 生成指定压缩包的名字(xxx.tar.gz) 要压缩的文件或目录
tar jcvf 生成指定压缩包的名字(xxx.tar.bz2) 要压缩的文件和目录
mylinux@ubuntu:~$ tar zcvf allcpp.tar.gz *.c
cli.c
client.c
ser.c
server.c
tcp_server.c
mylinux@ubuntu:~$ ls
allcpp.tar.gz client.c hello_world.py ser tcp_server.c 公共的 文档
cli examples.desktop hello_world.pyc ser.c test 模板 下载
cli.c get-pip.py mysocket serevr test1 视频 音乐
client get-pip.py.1 newdir server.c vscode_pyfile 图片 桌面
mylinux@ubuntu:~$
解压缩(语法):
tar jxvf 压缩包的名字
mylinux@ubuntu:~$ ls
allcpp.tar.gz client.c hello_world.py ser tcp_server.c 公共的 文档
cli examples.desktop hello_world.pyc ser.c test 模板 下载
cli.c get-pip.py mysocket serevr test1 视频 音乐
client get-pip.py.1 newdir server.c vscode_pyfile 图片 桌面
mylinux@ubuntu:~$ rm *.c
mylinux@ubuntu:~$ ls
allcpp.tar.gz examples.desktop hello_world.py newdir test 公共的 图片 音乐
cli get-pip.py hello_world.pyc ser test1 模板 文档 桌面
client get-pip.py.1 mysocket serevr vscode_pyfile 视频 下载
mylinux@ubuntu:~$ tar zxvf allcpp.tar.gz
cli.c
client.c
ser.c
server.c
tcp_server.c
mylinux@ubuntu:~$ ls
allcpp.tar.gz client.c hello_world.py ser tcp_server.c 公共的 文档
cli examples.desktop hello_world.pyc ser.c test 模板 下载
cli.c get-pip.py mysocket serevr test1 视频 音乐
client get-pip.py.1 newdir server.c vscode_pyfile 图片 桌面
mylinux@ubuntu:~$
tar jxvf 压缩包名字 -C 指定目录
mylinux@ubuntu:~$ tree test1
test1
0 directories, 0 files
mylinux@ubuntu:~$ tar jxvf test.tar.bz2 -C test1
test/
test/a.hard
test/b.c
test/tcp_client
test/a
test/tcp_client.c
test/b
mylinux@ubuntu:~$ tree test1
test1
└── test
├── a
├── a.hard
├── b
├── b.c
├── tcp_client
└── tcp_client.c
1 directory, 6 files
mylinux@ubuntu:~$ ^C
mylinux@ubuntu:~$
rar--------必须手动安装该软件
ps aux
管道|:过滤
pa aux|grep bash
kill -l
kill -9 pid kill -sigkill pid杀死进程
env配置信息
top查看任务管理器
ifconfig
ping
mylinux@ubuntu:~$ ping 172.20.10.3 -c 4
PING 172.20.10.3 (172.20.10.3) 56(84) bytes of data.
64 bytes from 172.20.10.3: icmp_seq=1 ttl=128 time=3.57 ms
64 bytes from 172.20.10.3: icmp_seq=2 ttl=128 time=3.87 ms
64 bytes from 172.20.10.3: icmp_seq=3 ttl=128 time=1.65 ms
64 bytes from 172.20.10.3: icmp_seq=4 ttl=128 time=1.71 ms
--- 172.20.10.3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 1.654/2.702/3.872/1.026 ms
nsloopup
mylinux@ubuntu:~$ nslookup www.baidu.com
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 36.152.44.95
Name: www.a.shifen.com
Address: 36.152.44.96
添加用户
sudo adduser bob(用户名)
sudo useradd -s /bin/bash -g 组名 -d /home/用户名 -m用户名
更改密码
passwd 用户名
删除用户
sudo deluser +用户名
sudo userdel -r 用户名 -r的作用:把用户的主目录一起删除
cat /etc/passwd ---------存放用户信息
作用:负责文件的上传和下载
服务器端
修改配置文件
sudo vim vsftpd.conf
重启服务
sudo service vsftpd restart
客户端
实名用户登录
ftp+IP(server)
输入用户名(server)
输入密码
文件上传:put file
文件下载:get file
不允许操作目录,如果想操作,只能打包之后再操作
匿名用户登录
ftp+serverIP
用户名:anonymous
密码:无(enter)
不允许匿名用户在任意目录切换
只能在一个指定的目录范围内工作
需要在ftp服务器上创建一个匿名用户的目录----匿名用户的根目录
lftp客户端访问ftp服务器
使用lftp上传、下载多个文件:mput xx xx xx / mget xx xx
使用lftp上传、下载目录:mirror dir / mirror -R dir
服务器端
创建共享目录:mkdir dir
修改配置文件:/etc/exports
/home/用户名/共享文件夹(ro/re,syns)
重启服务:sudo service nfs-kernel-server restart
客户端
挂载服务器共享目录:sudo mount serverIP:/home/用户名/sharedir /mnt
服务器端
安装ssh:sudo apt-get install openssh-server
查看SSH是否安装:sudo aptitude show openssh-server
远程登陆
ssh 用户名@IP
eg:服务器管理员通过ssh远程登录外地主机,进程维护
退出登录
logout
scp -r 目标用户名@目标主机名:/目标文件的绝对路径 /保存到本机的绝对(相对)路径
#mylinux@ubuntu
scp -r [email protected]:/home/bob/aa /home/mylinux/newdir
命令模式下的快捷键
H J K L
前下上后
行首:0
行尾:$
文件开始位置:gg
文件结尾:G
行跳转:n(100/200)G
删除操作
删除光标后面的字符:x
删除光标后面的字符:X
删除单词:dw
删除光标到行首的字符:d0
删除光标到行尾的字符:D
删除光标当前行:dd
删除多行:ndd(n是一个自然数)
撤销操作:u
反撤销:ctrl+r
复制:yy
复制多行:nyy
粘贴:p(下一行开始) P(当前行开始)
剪切==删除
可视模式
选择内容:hjkl
操作:复制y 删除:d
/查找内容 ?查找内容 n/N上下移动光标
缩进:>> <<
文本模式
a-----在光标所在位置后面插入
A----在当前行的尾部插入
i------在光标所在位置的前面插入
I------在光标所在行的行首插入
o-----在光标所在行的下面开辟一行
O----在光标所在行的上面开辟一行
s-----删除光标后面的字符
S-----删除光标所在行
末行模式
查找------/tom
替换-------
/tom/jack/g
:%s/tom/jack/
:20,25s/tom/jack/g
分屏模式--------
:sp ctrl+ww切换--------水平分屏
:vsp +文件名 ctrl+ww切换--------垂直分屏
hello.c—(预处理器)—>hello.i-----(编译器)–>hello.s------(汇编器)---->hello.o-----(链接器)---->hello.out(可执行文件)
命名规则 lib+库名字+.a such as(libmytest.a)
制作步骤
生成对应的.o文件-------.c----->.o -c
将生成的.o文件打包 ar rcs +静态库的名字+生成的所以的.o
发布和使用静态库:
发布静态库
头文件
调用静态库的两种方式:
gcc main.c /lib/mytest.a -o test -I include
gcc main.c -I include -L lib -l mytest -o test
静态库的优势
静态库的缺点
命名规则:lib+名字+.so
制作步骤:
发布和使用共享库
mv libmytest.so …/lib
cd lib/
gcc main.c lib/libmytest.so -o test -I include
或者gcc main.c -I include -L /lib -l mytest -o test
./test
export LD_LIBRARY_PATH=./lib
解决程序执行时动态链接库无法被加载的问题
优点
缺点
总结:
gcc工作流程:
预处理:gcc -E
编译: gcc -S
汇编: gcc -c
链接:没参数
-o:指定生成的文件的名字
-D:在编译的时候定义宏
-I:指定头文件的路径
-g:gdb调试的时候需要添加该参数
-O:编译优化,3个等级
-Wall:编译期间输出警告信息
制作静态库:
命名规则:libmytest.a
制作步骤:
生成.o: gcc -c *.c
打包(将所有的.o文件):ar rcs 静态库的名字 *.o
使用: main.c
gcc main.c -L /libpath -l libname -o 文件名 -I include
制作动态库:
动态库后缀:.so--------libname.so
制作步骤:
生成与位置无关的代码(.o)
gcc -fPIC -c *.c -I include
将.o打包生成.so文件
gcc -shared *.o -o libname.so
使用main.c lib include
gcc main.c -L lib -l mytest -I include -o test
应用程序不能执行,动态链接库连接不到自己制作的库
临时设置的方法:
export LD_LIARARY_PATH=./lib
永久设置的方法:
找到动态链接库的配置文件:/etc/ld.so.conf
在该文件中添加动态库的目录(绝对路径)
更新:sudo ldconfig -v
gcc main.c -o test -g
gdb test
查看:
l 文件名:20(行号)
l 文件名:函数名
l 继续查看后面内容
设置断点:break(b) 22(行号)
查看断点信息:info(i) break(b)
执行:start 或者 run
单步执行:n
继续:c(continue)
display 变量名:追踪查看具体变量值
info display
undisplay 编号:取消跟踪
u ------跳出单词循环
d 断点编号------删除断点
finish-----跳出当前函数
set var i=10-----设置变量的值
quit-------退出gdb
规则三要素:目录,依赖,命令
目标:依赖
命令
//makefile编写----version1
test(可执行文件):依赖(*.c文件)
gcc xx.c xxx.c …… -o test
执行:make
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pwwkSEBv-1585232160276)(C:\Users\严高飞\AppData\Roaming\Typora\typora-user-images\1585230092836.png)]
//修改时可以提高效率----version2
test:main.o add.o sub.o mul.o
gcc main.o add.o sub.o mul.o -o test
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
make
//version3
abj=main.o add.o sub.o mul.o
target=test
target:$(obj)
gcc $(obj) -o target
%.o:%.c
gcc -c $< -o $@
makefile中的自动变量
$<:规则中的第一个依赖
$@:规则中的目标
$^:规则中的所有依赖
名:追踪查看具体变量值