个人知识库 个人知识库
首页
关于
  • C语言
  • CPlusPlus
  • Linux
  • PHP
  • Nginx
  • MySQL
  • Redis
  • Docker
  • Kubernetes
  • SRS
阅读
常用工具
  • 分类
  • 标签
  • 归档
GitHub

Agnes001

坚持是一件很伟大的事业
首页
关于
  • C语言
  • CPlusPlus
  • Linux
  • PHP
  • Nginx
  • MySQL
  • Redis
  • Docker
  • Kubernetes
  • SRS
阅读
常用工具
  • 分类
  • 标签
  • 归档
GitHub
  • C语言

  • CPlusPlus

  • Lua技术栈

  • edoyun

  • 内存管理

  • 数据结构

  • 网络编程

  • Linux

    • Linux基础
    • 系统编程

    • 基础命令
    • itcast
    • 文件io
    • gdb
    • Ubuntu安装eclipse
    • gcc安装
    • 系统编程
    • linux内核多线程
  • 池化技术

  • 操作系统

  • python

  • 编程技术
  • Linux
Agnes001
2022-01-18

linux-itcast-command

终端:(虚拟终端) 所有输入输出设备总称

shell: 命令解析器

bash: bore again shell 命令解析器。

文件类型:

  1. 文件 “-”

  2. 目录 “d”

  3. 软连接 “l” --快捷方式

  4. 管道 “p”

  5. 套接字 “s”

  6. 字符设备 “c”

  7. 块设备 “b”

  8. 未知类型

.gz ---- gzip 不保留源文件 不能对目录进行打包压缩

.bz2 --- bzip2 -k 来保留源文件 不能对目录进行打包压缩

tar: 压缩:tar zcvf 新起的压缩包名字.tar.gz 原材料

  解压:tar zxvf 已有的压缩包

前台:能够跟用户完成交互。

后台:不能直接跟用户交互。

sudo adduser lisi 添加李四用户 他默认属于李四用户组

sudo adduser liwu 添加李五用户 他默认属于李五用户组

sudo adduser liwu lisi 将 李五用户加入到李四用户组

sudo deluser lisi 删除用户lisi

sudo delgroup liwu 删除用户组李五


服务器:

  1. 安装 sudo apt-get install vsftpd

  2. 配置 sudo vi /etc/vsftpd.conf

    尽量不要手写内容到文件中。通过打开、关闭注释的方式调整该文件。

  3. 启动 (重启——如果修改过配置必须重启)

    sudo service vsftpd restart

  4. 客户端发起链接

    ftp 127.0.0.1(自己充当服务器、自己充当客户端)

    ftp 192.168.36.xxx(对方IP)

  5. 数据传递(上传、下载)

    下载:get 非目录

    上传:put 非目录

  6. 关闭连接 quit/exit/bye

匿名用户:

  1. 创建匿名用户登录位置。

    cat /etc/passwd | grep ftp 查找本机默认指定 匿名用户登录位置。——/srv/ftp

  2. sudo mkdir /srv/ftp/incoming

  3. sudo chown ftp:nogroup /srv/ftp/incoming ——所有者:ftp 所属组:nogroup

  4. 修改配置文件,给匿名用户开放各种权限。/etc/vasftpd.conf

  5. sudo service vsftpd restart

  6. ps aux | grep ftp ——查询结果应为2+ 才表示启动成功

  7. ftp 127.0.0.1 ——用户名:anonymous 密码:回车

  8. 默认匿名用户登录上以后在/srv/ftp(默认)

  9. cd incoming (注意目录权限)

10 put 上传 get 下载。


lftp使用:

  1. sudo apt-get install lftp 安装lftp客户端

  2. 配置vsftpd.conf(与ftp共享同一个配置文件)

  3. restart

  4. 登录lftp 127.1

  5. login itcat/anonymous (匿名用户可省略该步)

  6. mirror -R 上传目录

  7. mirror 目录下载

  8. bye

上传位置:ftp或lftp登录后,cd到哪个目录执行put/mirror -R 就上传至哪个目录。

下载位置:默认情况从哪个目录执行了ftp 127.0.0.1 就get到哪个目录,

  可以使用lcd 改变本地机的工作目录位置。lcd ..可以修改至上级目录

  !ls 列出本地机列表项。

  !pwd 查看本地机工作目录位置

nfs使用流程:

1.安装:sudo apt-get install nfs-kernel-server

2.创建一个欲共享出去的目录 如:/home/itcast/itcast

3.打开配置文件:sudo vi /etc/exports

4.写入共享目录的绝对路径,及对应权限。如:

/home/itcast/itcast *(ro,sync,no_root_squash)

5.重启nfs

sudo /etc/init.d/nfs-kernel-server restart

-------------------------

6.客户端访问共享目录:

sudo mount 192.168.43.75:/home/itcast/itcast/ /mnt
  1. cd 到本机的/mnt 目录中就可以使用cp命令得到目录中的所有文件。

【常见错误】:1. 虚拟机下出现“不能mount实体”错误时,需在mount之前使用

	 install nfs-common 即可解决。
  
      2. 出现“超级坏块儿”错误无法挂载,多是因为没有安装nfs-kernel-server导致。

对比语法格式:

nfs:sudo mount 192.168.43.75:/home/itcast/itcast/ /mnt

ssh: ssh itcast@192.168.43.75 ——>yes 密码

scp -r itcast@192.168.43.75:/home/itcast/aa ../


	文件				目录

r 可以查文件内容 可以查看目录(文件的)内容 cat/more/head...vim ls /get

w 文件的内容可修改、删除 可以在目录内创、修改、删除 vim对文件写操作 rm、mkdir、touch、mv、cp... /put > / >>

x 可以运行(可执行程序、脚本) 目录可以被打开

MMU 单位:4K 一个page

.data: 初始化为非0的全局变量、初始化为非0静态局部变量

.bss: 初始化为0全局变量、初始化为0的静态变量、未初始化的全局、静态变量

.text: 代码段

.rodata: 只读数据段


函数库:本质:一组函数。具有相近的功能或操作同一数据结构。strcpy/strcmp/strcat/strlen/strstr/strchr/strtok... <string.h>

bubble_sort / select_sort / quick_sort / insert_sort  <mysort.h> 


作用:	1. 代码复用:软件开发的大部分时间用在应用程序设计上。而不是花在处理底层的细节上。(面向对象程序设计也体现了代码复用)

	   硬件——系统调用——标准库——用户库——应用程序 (层层复用)

	2. 程序积累


发布形式:	1. 源码形式发布    缺点:1. 保密性差  2.  编译程序耗时、平台、编译器版本

				   优点:方便使用者学习和研究

		2. 二进制形式	   优缺点 与上相反

标准C库libc.so.6

静态库:

机制:复制静态库作为程序代码段的一部分。

优点:将函数库中的函数本地化。寻址方便,速度快。(库函数调用效率 == 自定义函数使用效率) 

缺点:消耗系统资源较大。每个进程使用静态库都要复制一份。无端浪费内存

使用场景:多应用于核心程序,保证时效性,可以忽视空间。 

制作:
	1. gcc add.c sub.c mul.c -c 		——>得到*.o

	2. ar rs libmymath.a add.o sub.o mul.o 	——>得到静态库

		ar工具不包含在gcc中

		r更新、c创建、s建立索引

		file libmymath.a 		——>查看库信息

	3. gcc main.c -L ./ -l mymath -o app 	——>使用静态库


使用:L:指定静态库所在目录位置;l:指定静态库名字 I:指定头文件所在目录位置

动态库(共享库):

机制:共享代码(不共享数据)

优点:节省内存(共享)、易于更新(动态链接)  ./a.out   《--- libc.so

缺点:相较于静态库函数调用速度略慢(延迟绑定机制)

使用场景:1. 对程序执行速度要求不是很强烈,而相对于系统资源有一定要求的场景

	  2. 对于更新比较频繁的程序

		1)停止运行程序
		2)使用新库覆盖旧库(保证新旧库名称一致,接口一致) “接口”
		3)重新启动程序。

重点强调:1. 动态库是否加载到内存,取决于程序是否运行

	  2. 动态库加载到内存的位置不固定----动态链接器


制作:

1. gcc -fPIC add.c mul.c sub.c -c (-fPIC:生成“与位置无关”的目标文件*.o)

2. gcc -shared -o libmymath.so add.o mul.o sub.o

3. gcc main.c -L库路径 -l库名 -I头文件名  -o app

4. ./app --> 出错 	

   原因:动态连接器 ld-linux.so.2 搜寻动态库的路径未指定,

	 执行ldd app发现动态链接器找不到 libmymath 库。

   指定方法:

	1. 环境变量法:export LD_LIBRARY_PATH=./ 将当前目录加入环境变量,但是终端退出了就无效了。

	2. 配置文件法:将上条写入家目录下.bashrc文件中	(永久生效,设置到~/.bashrc)

	3. 拷贝法:直接将libmymath.so文件拷贝到/usr/lib/目录下。(受libc库的启发)

	4. 缓存文件法:将libmymath.so所在绝对路径加入到/etc/ld.so.conf文件,

	   使用sudo ldconfig -v 动态更新/etc/ld.so.cache文件(2进制文件)

*5. 指定动态库的soname

    gcc -shared -Wl,-soname,libmymath.so.1 -o libmymath.so.1.10 add.o mul.o sub.o

*6. 创建动态库的LinkerName

    ln -s libmymath.so.1.10 libmymath.so

动、静态库共存时:

编译器默认使用.so的动态库,找不到才使用静态库。

-static可以直接指定使用静态库。

objdump -dS app > out

注意比较加了static和没有加static的可执行文件大小,及内部printf的地址。

gdb:

使用场景:程序编译无误,但是有逻辑错误。 


加-g 编译 ---> gdb xxx  

list 1 ---> b 行号

info b  查看断点信息。

disable/enable  断点号——设置断点非使能/使能。

delete 断点号——删除断点

b 行号 if i=5  设置条件断点,只有i=3时断点生效。

run  ----  start

p 变量名——查看变量值
display——跟踪变量
undisplay——取消跟踪
ptype 变量名——查看变量类型

bt 	查看当前程序函数栈帧使用基本情况

	函数的栈帧保存局部变量和临时值,形参,与局部变量等价。

info locals 查看当前栈帧上变量的存储值。

frame 栈帧编号查看变量的值

s——step
n——next

finish 终止当前函数

continue 结束当前断点调试

p *数组名@10 列出数组前10个元素值

p 数组名[n]@m 从下标n开始向后打印m个元素。

静态模式规则:

ALL:$(target)

$(target):%.o:%.c gcc -c xxxx -o xxxx

编辑此页
#itcast-command
基础命令
文件io

← 基础命令 文件io →

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式