test

1
2
3
操作系统
Linux命令以及原理
Linux shell awd sed

Linux的进程、线程、文件描述符是什么

Linux目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
【Linux与Windows默认目录匹对】
/usr → C:/Windows/ /*系统级的目录
/usr/lib → C:/Windows/System32
/usr/local → C:/Progrem Files/ /*用户级的程序目录,用户自己编译的软件默认会安装到这个目录下
/opt → D:/Software /*用户级的程序目录, opt有可选的意思,即自定义路径,当你不需要时,直接 rm -rf 掉即可。在硬盘容量不够时,也可将 /opt 单独挂载到其他磁盘上使用。

【源码存放位置】
/usr/src /*系统级的源码目录。
/usr/local/src /*用户级的源码目录。

【目录解释】
/opt
这里主要存放那些可选的程序装到/opt目录下,这样,当你尝试完,想删掉软件程序的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。
/usr/local
它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面。

【常用目录及用途】
/bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。
/etc 存放系统管理和配置文件
/home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库
/opt 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。
/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/root 超级用户(系统管理员)的主目录(特权阶级^o^)
/sbin 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。
/dev 用于存放设备文件。
/mnt 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。
/boot 存放用于系统引导时使用的各种文件
/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。
/tmp 用于存放各种临时文件,是公用的临时文件存储点。
/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。

Ubuntu软件源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
修改软件源
# 首先备份源列表
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

编辑/etc/apt/sources.list文件, 在文件最前面添加阿里云镜像源:

# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multive

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential//这一步什么意思



修改环境变量
vim /etc/profile

修改主机名
vim /etc/hostname

目录结构

常用命令

1
2
3
find用于查找文件
grep用于查找文件中文本

Shell

1
2
3
一个shell必备的内容:
sed awd
日志

vim操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
删除全部内容:ggdG

删除到行尾内容:D
剪切到行尾内容:dd
复制一行:yy
粘贴到光标前:P
粘贴到光标后:p

光标前插入字符:i
光标后插入字符:a
当前行上插入一空行:O
当前行下插入一空行:o

撤销:u
重做:ctrl+r


第一行:gg
最后一行:G
到第X行:XG
到第X行::X
到句首:(
到句尾:)
到段首:{
到段尾:}

向上滚屏:ctrl+y
向下滚屏:ctrl+e


/,n向下搜索,N向上搜索(N是反向)
?,n向上搜索,N向下搜索(N是反向)
直接输入即可,也可输入:在输入/或者?

可视模式:
左下上右:ghjkf

保存:w
退出:q
保存退出:wq/ZZ
不保存退出:q!/ZQ/!q是错的
另存为:w filename


退出编译模式:esc,ctrl c,ctrl [



列多选:ctrl+v
r替换
可以使用G选中到末尾,或者使用hjkl选中多行




vim与emacs:需要用到的时候才学习其他
vim-plus插件管理
d删除

vim使用普通用户,保存root权限文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
:w !sudo tee %
这条命令的含义是把当前编辑的文件的内容当做标准输入输入到命令 sudo tee 文件名 里去
vim 命令:w !{cmd},让vim执行一个外部命令 {cmd},然后把当前缓冲区的内容从 stdin 传入外部命令{cmd}。
外部命令就是一个 Linux 的 shell 命令
Linux tee 命令用于读取标准输入的数据,并将其内容 输出成文件 和 标准输出。
% 代表当前缓冲区
类似一个 Linux 管道 : stdin | tee file

1.:w ! ------------------------ 缓冲区 -> stdin
2.sudo tee % ------------ stdin -> 当前缓冲区

tee 指令会从标准输入 ( stdin 也就是 0 ) 设备读取数据,将其内容输出到标准输出 ( stdout 也就是 1) 设备,同时保存成文件。
语法:tee [-ai][--help][--version][文件...]
-a 或 --append  附加到既有文件的后面,而非覆盖它.
-i 或 --ignore-interrupts  忽略中断信号。
help  在线帮助。
version  显示版本信息。

使用指令 “tee” 将用户输入的数据同时保存到文件 “file1” 和 “file2” 中,输入如下命令:
tee file1 file2




缓冲区(Buffer)是一块内存区域,用于存储着正在编辑的文件。在保存缓冲区并退出时,内容也随之被写回原始文件。
:buffers 或 :ls 或 :files 显示缓冲区列表。
第一列:缓冲区编号, 可以在编辑该文件时以此代替文件名。
第二列:缓冲区类型标志字符。
第三列:文件名,从缓冲区写入到的文件的文件名。内存 => 磁盘。
第四列:上次退出或切换缓冲区时光标所在的行号.

% 当前缓冲区

#:上一次的活动缓冲区

l: 被载入并显示在某窗口中的缓冲区

h :被载入但隐藏的缓冲区.

= :只读的缓冲区

\- :不可编辑的缓冲区, 其中°modifiable°选项被关闭

\+ :有改动的缓冲区
缓冲区的操作:

缓冲区的操作

GDB调试

1

awk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
awk '{print}' test.cpp
awk '{print $1}' test.cpp
awk '{print $1"\t"$2"\t"$3}' test.cpp
awk '{print NR"\t"$1"\t"$2"\t"$3}' test.cpp (NR=number of record)
awk认为逗号是系统默认分隔符是空格,直接使用空格把两个连接起来了
awk '{print NR"\t"$0}' test.cpp ($0一整行)
awk '{print NF "\t" $0}' test.cpp (NF每一行有多少列 Number of field)
awk '$1=="gold"{print $0}' test.cpp
awk '$3=1986{print $0}' test.cpp
awk 'NR==7{print NR, $0}' test.cpp
awk 'NF==7{print $0}' test.cpp
awk '{print $1 $2}' 从屏幕读取数据
awk 'BEGIN{FS=","}{print $1,$2}'

Git命令

1

Linux用户

1
2
3
/etc/passwd
/etc/group
/etc/shadow

一步步来

比如说学acwing算法中,二分学完,之后都是

其他案例同理

使用层面算法原理层面

比如说shell sed awd,正则表达式

多用,比如说写个shell脚本一次跑掉,软件源替换等等

局域网传输这个shell或者挂载到自己网站上下载,一键就可以搭建好自己的环境,curl或者wget

有些东西你只有一直用才能记得住,比如说shell编写

不要太高估自己,哪些tutorial就是为了方便易懂,写给你这种人看的

很多东西定义了一套规则,你需要记忆而已,比如说操作系统,网络编程

对应的就是计算机基础学科

查询Linux服务器软硬件信息

常用信息

常用的信息有:

项目 命令
cpu lscpu
cat /proc/cpuinfo
内核版本 uname -a
系统版本 ls /etc/*release;cat /etc/*release
内存大小 free -h
编译器版本 gcc -v
mpi版本 mpif90 -v
NUMA相关信息 需要额外的hwloc库
包管理 apt/dpkg是debian系, yum/rpm是redhat系, pacman是arch系
当前shell类型 echo $0
硬盘使用信息 df -h
PCI设备信息 lspci -vvv
查看ip ifconfig或ip addr
查看路由 route -n或ip route
查看端口监听 netstat -lutnp或ss -lutnp
查看DNS cat /etc/resolv.conf

在探测环境的过程中的一些技巧

技巧 作用
通过Tab键补全 在探索不熟悉的路径时很有用
type和which命令 查看命令的类型和路径

总结

拿到一个的账号登录机器后,脑海中对一些系统信息最好有一个第一印象,在后续遇到问题的时候可能会有帮助。比如知道了包管理的方式,在编译报xxx not found错误的时候就可以有针对性的使用dpkg -L或者rpm -qa找包;dpkg -l xxx或者rpm -ql xxx找文件。df -h让我们对剩余磁盘空间有一个估计,避免llvm编译到一半磁盘不够的窘态。网络相关信息能帮助我们解决一些网络故障。

问题

带着问题学习

不同Linux发行版版本区别,比如说包管理工具,环境变量目录

C++什么时候用什么头文件

1.搞清动态链接,静态链接;

2.库文件目录

3.CMAKE

C++中插入汇编代码,asm

不同语言之间互相调用代码

编程语言架构研究,比如jvm,.net

man和info,help

1
2
3
4
5
6
通过type查看命令是内置还是外部
help只能用于内置:help cd
外部命令:cmd --help

man没有内建和外部命令的区别
info得到的信息比man还要多,来自GNU项目,和man是两个集合,有交集,若 man 页包含的某个工具的概要信息在 info 中也有介绍,那么 man 页中会有“请参考 info 页更详细内容”的字样。

test
https://yxjiang.work/2023/01/29/test/
作者
Hector Jiang
发布于
2023年1月29日
许可协议