AI准研究生应该掌握的Linux知识

1. Linux 基础

1.1 系统目录结构

1.1.1 /

根目录Unix和Linux中没有ABCD盘符,仅有一个硬盘,一个根

1.1.2 /bin

系统的常用命令目录,包括控制台命令系统可执行文件系统的核心二进制文件

1.1.3 /etc

发布目录,相当于windows的windows目录,保存系统所有核心内容,不建议随意读写

1.1.4 /usr

用户目录,相当于windows的program files目录,常用于安装所有用户共有的软件资源

1.1.5 /root或~

root根用户的用户目录,相当于winsows的C:/users/admainistrator

1.1.6 /home

保存其他用户的目录。如Linux系统中有user1用户,那么一定有/home/user1目录存在

1.1.7 /var

系统运行过程中的数据目录

1.2 常用命令

linux系统命令严格区分大小写

1.经常使用
	cd,ls,psw,touch,mkdir
	cp,mv,rm
	more,less,head,tail
	cat:打印文件内容	
	ln:建立软链接(快捷方式) 硬链接(半独立)
	wc:统计文件行数
	whatis:命令简单说明
2.压缩与解压
	.tar结尾的文件
	解压:tar xvf 压缩包名
	压缩:tar cvf 文件夹名(多个文件压缩在一个包里)
	.gz和.z和.tgz结尾的文件
	解压:gzip -d 压缩包名
	压缩:gzip 文件夹名(每个文件分别压缩成为一个包)
3.系统相关
	time,date,uanme,lsb_release
	du:统计文件和目录所占磁盘空间
	dmesg:显示内核状态信息
	uptime:显示系统时间、用户连接、负载
	top:查看CPU使用率
	free:查看内存和交换空间
4.网络相关
	ping:查看网络连通性
	ifconfig:配置网络
	netstat:显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
5.查找命令(*代表省略文字)
	find -name 文件名 :查找文件
	grep "test"       :查找文件中符合条件的字符串,-c:统计符合字符串条件的行数
6.管道(输出进程|输入进程)
	|管道符,将一个命令的输出作为另外一个命令的输入
	ps 打印进程信息
	cat 打印文件内容
7.重定向(输出进程>文件)
	>  输出重定向到一个文件
	>> 输出重定向到一个文件,附加在源文件后面
	>! 输出重定向到一个文件,覆盖源文件
	<  文件内容输入重定向到一个进程
8.文本编辑
	vi:通用文本编辑器,类比win记事本
	vim:vi的增强版本,多了高亮显示

1.2.1 pwd

print working directory:输出当前工作目录

1.2.2 cd

change directory:切换目录
返回上级:cd ..
切换具体位置:cd 绝对/相对路径

1.2.3 ls

查看当前同级目录下的文件夹

1.2.4 more

分屏显示文件内容,more 文件名,打开文件后,空格显示下一屏,回车显示下一行,q退出分屏,ctrl+c退出命令

1.2.5 head

显示文件前n行内容,head -n 文件名

1.2.6 tail

显示文件后n行内容,tail -n 文件名

1.2.7 mkdir

创建子目录,mkdir 目录名

1.2.8 touch

创建文件,touch 文件名

1.2.9 vi/vim

打开/新建文件:vi 文件名(在命令行)

进入编辑模式:(在非编辑模式下,编辑模式就是记事本)
a:append追加
i:insert插入
o:under line 在光标下一位新增一行,进入编辑
O:per line 在光标上一位新增一行,进入编辑

退出编辑模式:ESC(在编辑模式下)

保存::w(在非编辑模式下)
退出vi/vim编辑器::q(在非编辑模式下)
保存+退出::wq(在非编辑模式下)
显示行号::set nu(在非编辑模式下)
搜索:/搜索内容(在非编辑模式下)
光标跳转:跳转末尾G 跳转开头gg

1.2.10reboot

重启Linux系统,需要root权限

1.2.11 halt

关闭正在运行的Linux系统

1.2.12 ifconfig

查看ip等网络信息,如我的私有ipv4为192.168.0.13

1.2.13 网络配置

Linux默认使用NTA地址转换(将一组私有ip映射为1个公有ip与外网连接),可以节省ip资源,缺点是局域网中不同网段不能相互访问。解决方法:虚拟机设置为桥连。

1.3 XShell

1.3.1 Shell

shell不是具体哪一款程序,是一类程序的统称,这些程序只要是能够按照用户的要求去调用操作系统的接口,就可以称之为shell程序.
linux有许多shell程序,其中一款软件叫做bash.
当我们用命令行开启或远程连接一台linux主机之后,就开启了bash.

bash定义变量:变量名=变量值  (赋值符号两边不可以有空格.)

在bash中查看变量的值: echo $变量名

变量在其他程序中使用需要用 export 变量名 将变量声明成环境变量.

取消变量的方式是 unset 变量名.

查看当前所有环境变量 env 指令

set则是查看所有变量, 包括环境变量,用户自定义的变量.

解释文件:bash 文件名

1.3.2 XShell

在Windows中远程操控开机状态的Linux的工具

step1:创建win与linux链接(协议 SSH,主机Linux IPv4,默认端口)

step2:选择操作Linux的用户名(root),输入该用户的密码,进行连接

step3:在XShell中使用linux命令远程操作Linux

2. Linux进程、线程和调度

推荐阅读:两个程序悲催的进化旅程

进程资源分配的基本单位

进程数据结构:进程控制块PCB描述进程资源(task_struct),如pid、mm内存资源、fs文件系统资源(路径)、file文件资源、signal信号等

pid数量有上限cat /proc/sys/kernel/pid_max,可知pid_max=32768

fork炸弹:(){:|:&};:,函数:使用管道|创建新的进程递归的后台调用&自己;将pid耗尽。解决:ulimit -Hu 30 这个指令可以限制每一个用户最多只能创建30个进程

PID管理pstree查看进程树,将所有task_struct串在一个树上,表示父子进程关系。[pid : task_struct]使用哈希映射。

Linux进程生命周期(就绪、运行、睡眠、停止、僵死)
就绪:(时间片用完)等CPU
睡眠:(缺少除CPU以外的资源)等其他资源
运行:有CPU+资源
僵尸:进程结束,资源释放,但PID的task_struct数据结构还没清除,一旦父进程调用wait4时,task_struct消失
停止:运行结束(ctrl-z),释放CPU,可以继续运行(fg或bg)

僵尸是个什么鬼?
进程资源已经释放,但PID的task_struct还在,父进程可以查子进程的死因status。

停止状态与作业控制,cpulimit
为了保证CPU利用率在某个范围(<20%),将程序间断的停止和运行

测试内存泄漏
查看是否进程活着,运行时间越久,消耗内存越多。(申请>释放)

初见fork
分叉fork():将执行当前程序的进程克隆一份,从fork()开始独立并行执行,父进程fork()返回值=子进程pid,子进程fork()返回值=0。

3. Cmake

文件编译的进化过程:

  1. gcc:它是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。我们的程序只有一个源文件时,直接就可以用gcc命令编译它。可是,如果我们的程序包含很多个源文件时,怎么办,用gcc命令逐个去编译时,就发现很容易混乱而且工作量大,所以出现了下面make工具。
    编译单个文件:
    gcc -o 编译后文件名(xxx.o) 源文件名(xxx.c)

  2. make:make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。
    在工程目录下执行Makefile的文件编译:make
    在工程目录下执行Makefile的clean: make clean

  3. makefile:makefile是make命令执行的规则文件。make工具就根据makefile中的命令进行编译和链接的。makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。makefile在一些简单的工程完全可以人工拿下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改,这时候就出现了下面的Cmake这个工具。
    编译一个工程:
    在工程下:touch Makefile
    编写Makefile:
    目标文件 … : 依赖文件 …
    cc -c xxx.c (只编译不链接)
    目标文件 … : 依赖文件 …
    cc -o xxx xxx.o (链接)
    指令代号:
    命令行命令

  4. cmake:cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他更牛X功能,就是可以跨平台生成对应平台能用的makefile,我们就不用再自己去修改了。可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。

  5. CMakeList.txt:到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。

  6. cmake和makefile的关系:cmake是makefile更高一级的抽象。

学习的话:手写Makefile和Makelist.txt

猜你喜欢

转载自blog.csdn.net/weixin_54338498/article/details/130914211