校招笔记(二)_计算机基础_Linux&Git
我的校招记录:校招笔记(零)_写在前面 ,以下是校招笔记总目录。
备注 | ||
---|---|---|
算法能力(“刷题”) | 这部分就是耗时间多练习,Leetcode-Top100 是很好的选择。 | 补充练习:codeTop |
计算机基础(上)(“八股”) | 校招笔记(一)__Java_Java入门 | C++后端后续更新 |
校招笔记(一)__Java_面对对象 | ||
校招笔记(一)__Java_集合 | ||
校招笔记(一)__Java_多线程 | ||
校招笔记(一)__Java_锁 | ||
校招笔记(一)__Java_JVM | ||
计算机基础(下)(“八股”) | 校招笔记(二)__计算机基础_Linux&Git | |
校招笔记(三)__计算机基础_计算机网络 | ||
校招笔记(四)__计算机基础_操作系统 | ||
校招笔记(五)__计算机基础_MySQL | ||
校招笔记(六)__计算机基础_Redis | ||
校招笔记(七)__计算机基础_数据结构 | ||
校招笔记(八)__计算机基础_场景&智力题 | ||
校招笔记(九)__计算机基础_相关补充 | ||
项目&实习 | 主要是怎么准备项目,后续更新 |
二、Linux & Git
2.1 Linux
2.1.1 常用命令
-
查看80端口状态?
1
netstat -ntulp | grep 80
-t
: 指明显示TCP端口-u
: 指明显示UDP端口-l
: 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)-p
: 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序-n
: 不进行DNS轮询,显示IP(可以加速操作)
-
怎么查看指定端口是否开放?
通过 netstat 命令,注意加上-a参数,看是否有
0.0.0.0:22
在被监听。通过lsof命令,如果没有任何显示,则端口没有被打开。
-
查看进程状态?怎么退出?怎么搜索进程?怎么查看某一个进程的内存和CPU使用情况?
-
所有进程状态
1
2ps -aux # 内存中进程信息
ps -l # 本次登陆所有的进程信息 -
退出进程:
exit
-
搜索进程:
ps -ef
1
ps -ef | grep <进程名>
-e
相当于-a
是全部列出,-f
是显示UID等;
-
查看指定进程(如kalfa)CPU和内存占用
1
ps -aux | grep java
- 1.3是CPU占用率,12.7是内存占用率,943100是物理内存使用量
还可以使用 top命令查看指定进程(PID)的内存和CPU使用率:
1
top -p 2913
-
-
查看占用指定端口的进程 ?
1
lsof -i :8040
这一步只能获取进程名,还要
ps
命令进一步获取进程id
如果要杀死相应进程:
1
kill -9 <进程id>
-
任务管理器(cpu占用率、内存占用率、进程)?
1
top
(总忘)还可以使用 top命令查看指定进程(PID)的内存和CPU使用率:
1
top -p
-
内存使用情况 和 磁盘使用情况?
1
free -m # 内存使用情况
磁盘使用情况
1
df -m
-m
: 以Mb为单位显示磁盘使用量和占用率 -
统计单词个数
1
grep -o <单词> <文件地址> | wc -l # -l表示统计行数
-
修改用户权限及常用参数?
1
chmod <参数(可选)> <模式> <文件/文件夹>
常用参数:
-R
:递归的修改文件夹下所有子文件/文件夹的所属用户
【示例】如何修改
/test5/5.txt
,权限从rw-r--r--
—>r--rwxrwx
?1
2
3
4# 用户(U)权限[减去写]权限
chmod u-w /test5/5.txt
# 组(G)/其他用户(O)权限[加上写、执行]
chmod go+wx /test5/5.txt -
查看文件的命令有哪些?
1
2
3
4
5
6vi 文件名 #编辑方式查看,可修改
cat 文件名 #显示全部文件内容
more 文件名 #分页显示文件内容
less 文件名 #与 more 相似,更好的是可以往前翻页
tail 文件名 #仅查看尾部,还可以指定行数
head 文件名 #仅查看头部,还可以指定行数 -
你平时怎么查看日志的?
Linux查看日志的命令有多种: tail、cat、tac、head、echo等,本文只介绍几种常用的方法。
-
tail(最常使用)
命令格式:
tail[必要参数][选择参数][文件]
1
2
3tail -n 10 test.log 查询日志尾部最后10行的日志;
tail -n +10 test.log 查询10行之后的所有日志;
tail -fn 10 test.log 循环实时查看最后10行记录(最常用的)一般还会配合着grep搜索用,例如 :
1
tail -fn 1000 test.log | grep '关键字'
如果一次性查询的数据量太大,可以进行翻页查看,例如:
1
tail -n 4700 aa.log |more -1000 可以进行多屏显示(ctrl + f 或者 空格键可以快捷键)
-
其它配合的命令
1
2
3
4
5
6history # 所有的历史记录
history | grep XXX # 历史记录中包含某些指令的记录
history | more # 分页查看记录
history -c # 清空所有的历史记录
!! 重复执行上一个命令
查询出来记录后选中 : !323
-
-
怎么让进程后台运行?
-
命令后面加上**&**即可,实际上,这样是将命令放入到一个作业队列中了;
通常配合nohup ,忽略发送给子命令的挂断SIGHUP信号(终端关闭):
1
nohup subcommand &
-
ctrl + z 挂起进程,使用jobs查看序号,在使用bg %序号后台运行进程;
ctrl + c 是进程终止。
-
运行指令前面**+ setsid**,使其父进程编程init进程,不受SIGHUP信号的影响。
-
2.1.2 其它问题
1.请问/proc
目录有什么用?
Linux系统上的/proc目录是一种文件系统,即proc文件系统。 /proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件:
- 查看系统有关(1)硬件及当前(2)正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
2. Linux的软/硬链接是什么?有什么区别?
-
什么是链接 ?
文件在Linux上被分成两部分:用户数据 (user data) 与元数据 (metadata) 。
- 用户数据:即文件数据块,保留记录文件真实内容的地方
- 元数据: 是文件的附加属性,如创建大小、时间,所有信息等。其中inode号 ,是文件的唯一标识。
系统通过inode号快速找到文件,有一种方式可以快速寻找到数据元信息,那就是软/硬链接。
现在我们创建一个新文件
myfile
:1
2
3
4$ touch myfile && echo "This is a plain text file." > myfile
$ cat myfile
This is a plain text file.来展示二者区别。
-
硬链接
建立
myfile
的一个硬链接hard
,可以看到二者的inode
是一致的,也就是说指向了同一个物理区块。硬链接inode :指向文件的地址 & 维护了一个引用计数,只要有文件还指向这个区块,它就不会从硬盘消失。
1
2
3
4
5$ ln myfile hard # 建立硬链接hard
$ ls -li
25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 hard
25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile-
操作硬链接更新文件,等价更新原文件
使用hard硬链接修改文件,发现原文件也被修改了。
1
2
3
4
5$ echo "New line" >> hard
$ cat myfile
This is a plain text file.
New line -
删除原文件,使用硬链接依旧可以显示
因为磁盘块还有硬链接在引用,所以不会消失。
1
2
3
4
5$ rm myfile # 删除原文件
$ cat hard # 硬链接依旧可以显示
This is a plain text file.
New line
-
-
软链接
建立一个
soft
软链接如下,可以看到二者的inode号是不一样的。软连接的inode :保存真实的文件的绝对路径地址,找到软链接,还要根据inode号找到真实文件路径。
1
2
3
4
5$ ln -s myfile soft # 建立软连接soft
$ ls -li
25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile
25869216 lrwxr-xr-x 1 unixzii staff 6 7 8 17:47 soft -> myfile-
操作软链接更新文件,等价更新原文件
因为软链接就是相当个快捷方式,当然更新原文件。
-
删除原文件,使用软链接不会显示
因为软件inode指向的绝对地址,已经不存在文件了,所以当然不存在文件了。
1
2
3
4$ rm myfile
$ cat soft
cat: soft: No such file or directory
-
-
软硬连接区别总结
-
inode号不同。硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
-
链接数目不同。 软链接的链接数目不会增加;硬链接每多一个链接就会+1。
-
文件大小不同。硬链接文件显示的大小是跟原文件是一样 ;软链接显示的大小与原文件就不同了,BBB大小是95B,而BBBsoft是3B,因为BBB共有3个字符。
-
文件系统限制。 软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。
建立软链接就是建立了一个新文件:当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。
-
3. 查询日志的top10 IP?
命令如下:
1 | cat log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | awk '{print $0}' | head -n 10 |
-
cat *.log
:将文本内容打印到屏幕 -
cut
:截取指定IP那一列 -
sort
,按IP ASCII码排序:进行排序,默认是按照ascii码进行排序的 -
uniq -c
,统计重复的IP :统计相邻的行的重复数量,结果是类似3 127.13.13.13
,前面的数字代码重复的行数sort|uniq -c
统计重复的行数 -
sort -n
,再次排序 :是按照数值进行由小到大进行排序, -r是表示逆序,-t是指定分割符,-k是执行按照第几列进行排序 -
awk
,只显示IP:按照分割符将一行分割为多个列,第一列用1表示,第二列用2表示,依次类推awk -F" " '{print $2}
,表示用空格作为分隔符进行分割,打印出第2列 -
head -n :
表示取前n个
2.2 Git
2.2.1 常问命令
1.什么是Git?是用什么语言编写的?
- Git是一个 分布式 代码控制系统 ;
- Git使用 C 语言编写:使得 GIT 很快,C 语言减少运行时开销来做到这一点。
2.如何在Git中创建存储库?
- 如果项目不存在,创建
- 然后运行
git init
,会在目录下创建一个.git
目录
3.列举工作中常用的几个git命令?
git add
: 增加文件git commit -m
:提交文件git status
:拉取远程分支git push
:合并当前分支和主分支git pull
ORgit fetch/git merge
:拉取远程分支
4.讲讲Git commit 基本参数?
git commit -m “message”
:简要说明这次提交的语句git commit -a
:即使没有经过git add
,也可以将所有 修改 或 删除 的文件提交到本地仓库,但新建的文件不会提交git commit --amend
:追加提交,它可以在不增加一个新的commit-id 的情况下将新修改的代码追加到前一次的commit-id中,
5.在Git中,你如何还原已经 push 并公开的提交?
-
删除或修复新提交中的错误文件,并将其覆盖推送到远程存储库:
1
git commit -m "commit message"
-
创建一个新的提交,撤消在错误提交中所做的所有更改:
1
git revert <name of bad commit>
6. git pull 和 git fetch 有什么区别?
-
git pull
取回远程主机某个分支的更新,再与本地的指定分支合并 (可能要解决冲突)。
-
git fetch
从远程获取最新版本到本地,不会自动合并 ,需要手动执行
git merge
7.什么是 git stash?你一般什么情况下会使用它?
经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是
git stash
命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用
- 使用情况: 当前分支还没处理完,不能去commit提交,但是要去处理一个紧急开发项目,使用
git stash
- 处理完后
git stash pop
继续处理工作
8.如果本次提交误操作,如何撤销?
-
场景1:改乱了(包括删除等)工作区某个文件的内容(
git add 之前
):1
git checkout -- <file>
丢弃之前所有的修改。
-
场景2:撤销提交到索引区的文件 (
git add 之后
):1
git reset HEAD <file>
此时回到了场景1,然后再使用
git checkout
-
场景3: 撤销已经提交之后的文件(
git commit之后
):回退版本号。
1
2$ git reflog # 查看版本
$ git reset --hard 3928 # 回退版本 -
场景4: 撤销已经push到远程分支之后的文件(
git push之后
)-
创建一个新的提交,撤消在错误提交中所做的所有更改:
1
git revert <name of bad commit>
-
删除或修复新提交中的错误文件,并将其覆盖推送到远程存储库:
1
git commit -m "commit message"
-
9.使用过git merge和git rebase吗?它们之间有什么区别?
都是用来合并分支的,但是:
-
git merge <当前分支要合并的分支>
: 在当前分支合并<指定要合并的分支>,会自动在当前分支(下图为master)创建一个commit节点,保留了要合并的分支(下图为branch1)的提交记录 -
git rebase <当前分支变基的基点分支>
:相当将当前分支(下图为branch1)的分支节点(5,6) 依次提交到基点分支(master)的4节点之后,保留了更干净的历史记录,没有生成行的commit 节点