基本使用篇
字节跳动面试题出现的Linux命令整理
1. 如何查看进程,如何查看线程,如何查看某个进程的线程,top -H [-p pid], ps -T [-p pid]。
2. 如何查看内存使用状况。
3. 如何查看磁盘的使用状况。df -h
4. 查看目录的使用状况。du -sh
5. 查看某个端口的使用状况。lsof -i:8088
6. 实时的查看日志文件。tailf -n 50 [fileName]
7. 查看某个日志文件中的内容。grep -i "xxx" file
8. 不想查看文件中的内容。grep -v "xxx" file,不想查看多个内容 grep -v "xxx \| yyy" file
9. 取文件的前50行。head -n 50 file
10. 查看文件的多少行。wc -l filename
11. 分割一个文件,以1000行为一个文件。spilt -l 1000 filename -d -a 5
12. 将一个文件中的A全部替换成B 。在命令行模式下 输入%s/A/B/g
13. 动态的查看进程状态,watch -nl "ps -ef" 或者 top
帮助命令
man 帮助命令
man ls
man 2 mkdir
man 3 printf
文件及目录管理命令
touch
- 创建一个文件
touch testfile.txt
- 修改时间戳为当前时间
touch testfile.txt
mkdir
- 创建一个空目录
mkdir testdir
- 递归创建多个目录
mkdir -p testdir1/testdir2
rm remove
- 删除一个或多个文件
rm testfile1 testfile2
- 删除一个或多个目录
rm -r testdir1 testdir2
- 强制删除文件/目录
rm -rf testfile testdir
注意:千万不要运行 rm -rf /*,
mv
- 移动文件/目录
mv testfile.txt testdir
- 更改文件名
mv testfile1.txt testfile2.txt
cp
- 复制文件/目录
cp file1.txt file2.txt
cp -r dir1 dir2
ps: dir2如果已经存在,则dir1将被复制到dir2目录下。 如果dir2不存在,则dir1将复制成dir2
目录切换
cd
. 当前目录,
.. 上一层目录。
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录,上一个目录;
cd .. 返回上级目录
cd ../.. 返回上两级目录;
pwd 查看当前所在路径
列出目录项
ls
- 列出当前目录所有文件
ls
- 列出当前目录所有文件(包括隐藏文件)
ls -a
- 以列表形式列出当前目录所有文件(包括隐藏文件)
ls -l --> ll
- 以易于人类阅读形式列出当前目录所有文件
ls -lh
tree
tree 以树形显示目录的文件架构
tree
tree dir
权限及所有者相关
chown :change owner
更改文件所有者 chown [-R]
所有者 文件或目录 chown [-R] 所有者:所属组 文件或目录
chgrp :change group
修改文件(或目录)的所属组 chgrp [-R] 所属组 文件名(目录名)
chmod
- 使用数字修改文件权限 x:可执行
rwx = 1 + 2 + 4 = 7
x : 1
w : 2
r : 4
chmod 777 file
- 使用字母修改文件权限
u-user, g-group, o-other, a-all
chmod a+w file
chmod u=rwx,go=rx .bashrc
文本处理命令
cat
cat不是猫,是单词concatenate的缩写,代表“连接”
- 在终端查看文本内容
cat file.txt
- 从键盘创建一个文件
cat > file.txt
crt + c 结束键盘输入
- 将几个文件合并为一个文件
cat file1.txt file2.txt > file.txt
more
可以翻页查看文件
q:退出 more
空格键:向下滚动一屏
b:返回上一屏
回车:向下滚动一行
- 分页显示文本文件内容
more file.txt
- 通过管道分页显示结果
ll /etc | more
less
基本操作 与man命令相同(实际上man命令的结果正是调用了less命令)
- 分页显示文本文件内容
less file.txt
- 通过管道分页显示结果
ll /etc | less
head
显示文本文件前n行内容(默认显示前10行)
head -n 5 file.txt
tail
- 显示文件末尾内容
tail -n 5 file.txt
- 循环查看文件内容 循环查看文件最新的内容
tail -f file.txt
- 从第5行开始显示文件
tail -n +5 file.txt
sort
- 按ASCII码升序排序
sort file.txt
- 排序并去除重复行
sort -u file.txt
- 按ASCII码降序排序
sort -r file.txt
uniq
删除重复行
uniq file.txt
磁盘管理命令
df
磁盘文件的可用空间
df df ~
df -h
du
- 显示目录或者文件所占空间
du (-h)
- 显示指定文件所占空间
du file.txt
tar
- 压缩文件
tar zcvf file.tar.gz file1 file2
- 解压文件
tar zxvf file.tar.gz
-z 支持gzip属性的文件
-v 显示操作过程
-f 必须,使用档案名字,这个参数是最后一个参数,后面只能接档案名
-c 建立压缩档案
-x 解压
进程管理
ps process status编写,用来列出系统中当前运行的那些进程
列出目前所有的正在内存当中的程序
ps aux - grep hello
ps aux USER:该 process 属于那个使用者账号的 PID :该 process 的号码 %CPU:该 process
使用掉的 CPU 资源百分比 %MEM:该 process 所占用的物理内存百分比 VSZ :该 process 使用掉的虚拟内存量
(Kbytes) RSS :该 process 占用的固定的内存量 (Kbytes) TTY :该 process
是在那个终端机上面运作,若与终端机无关,则显示 ? STAT:该程序目前的状态,主要的状态有 R
:该程序目前正在运作,或者是可被运作 S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal)
唤醒。 T :该程序目前正在侦测或者是停止了
Z :zombie (疆尸) 程序 START:该 process 被触发启动的时间 TIME :该 process 实际使用 CPU 运作的时间 COMMAND:该程序的实际指令
top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状 况,类似于Windows的任务管理器。
kill
linux下向进程发送信号的命令。
- 列出所有命令名称
kill -l
- 杀死进程
kill –9 3268
killall
杀死指定名字的进程
killall vi
网络工具
ssh
- 连接到远程主机
ssh name@remoteserver
- 通过SSH运行远程shell命令
ssh name@10.203.138.129 “uname -a”
wget
- 使用wget下载单个文件
wget https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.bz2
- 断点续传
wget -c https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.bz2
scp
- 上传文件
scp /home/alvin/file.txt root@10.203.138.129:/home/root
- 下载文件
scp root@10.203.138.129:/home/root/file.txt /tmp
ping
向指定的网络地址发送一定长度的数据包,按照约定,若指定网络地址存在的话,会返 回同样大小的数据包
- 测试网络连通性
ping baidu.com
- ping指定次数
ping -c 5 baidu.com
用户管理工具
sudo
以系统管理者的身份执行指令
sudo command
adduser: 会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。 useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密 码、无主目录、没有指定shell版本。
useradd
sudo useradd -d "/home/alvin" -m -s "/bin/bash" alvin
-d “/home/alvin" :就是指定/home/alvin为主目录
-m 就是如果/home/alvin不存在就强制创建
-s 就是指定shell版本
adduser
adduser user
userdel
删除用户 userdel -r user
passwd
更改密码 passwd alvin
groupadd
添加一个新组
groupadd leader
查询组
cat /etc/group | grep leader
- 更改组名
groupmod -n leaders leader
- 更改组GID
groupmod -g 3000 leaders
一些终端快捷键
tab : 路径/命令 补全
ctrl + f 向前移动光标
crtl + b 向后移动光标
ctrl + a 光标移动到行首
ctrl + e 光标移动到末尾
crtl + p page up
crtl + n page down
ctrl + l 清屏
ctrl + c 终止当前运行的程序
ctrl + z 将当前运行的程序转到后台 与&效果一样
ctrl + r 查找历史命令
高级篇 (重要)
grep命令
grep(global regular expression print) 使用正则表达式搜索文本,并把匹配的行打印出来
- 查找文件file.log 中的“possport”字段
grep "passport" file.log
- 查找文件file.log中“passport”字段,并且统计出出现次数:
grep "passport" file.log | wc -l
或者
grep "passport" file.log -c
管道操作符号 "I"的作用,管道命令操作符仅仅能处理精油前面一个指令传出来的正确的输出信息,也就是standard output信息,对于 standard error信息没有直接的处理能力,然后传递给下一个命令,作为标准的输入 standard input。 然后 wc(word count)可以统计指定文件的字节数,字数,行数,并将统计结果显示输出, 当然-c也可以起到统计次数的作用
ps -ef | grep tomcat | grep -v "grep"
grep 'partial\[true\]' bas-plat-al-data.info.log
grep -o 'engine\[[0-9a-z]*\]'
grep -v 'grep'
awk命令
awk命令主要是将一行分为多个字段做处理,格式如下
awk [-F field-separator] 'commands' input-file(s)
其中,commands是真正的awk命令,[-F域分隔符]是可选的, input-file(s)是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指明-F域分隔符的情况下,默认的与域分隔符是空格。
假设我们现在有一个文件,里面内容有三行,如下所示,使用awk来做一个简单的统计
- 去掉第一行
- 对第一行求和
- 去掉列数不为3的列
top和ps命令:探测进程
ps
ps命令,默认只会显示运行在当前控制台下的属于当前用户的进程
- ps -A 和 ps -e可以显示所有进程
- ps -ef 显示完整格式的所有进程
- 指定进程名, ps -ef | grep "java"找出进程名中包括java的所有进程
top
top命令可以实时的检测进程,输出的第一部分是显示系统的概括
- 第一行显示了当前时间,系统的运行时间,登录的用户数目和系统的平均负载
- 第二行显示了进程的概要信息,有多少进程处于运行、休眠、停止或者僵化状态
- 第三行是CPU的概要信息
- 第四行是系统内存的状态
ps和top命令的区别
- ps看到的是命令执行瞬间的进程信息,而top可以持续的监视
- ps只是查看进程而top还可以监视系统性能,如平均负载,cpu和内存的消耗
- top可以操作进程,如改变优先级和关闭进程
- ps主要是查看进程,所以关注点在于查看需要查看的进程
- top主要看cpu,内存使用情况,及占用资源最多的进程由高到低排序,关注点在于资源占用的情况
sed命令
sed stream editor
sed命令式利用脚本来处理文本文件。sed可依照脚本的指令来处理、编辑文本文件。sed主要自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
- 可以将文件的第二行和第三行裁剪出来
sed -n '2,p' test.txt
sort
sort命令可以实现堆文件进行排序
- 正序排序 sort -n test.txt
- 你序排序 sort -nr test.txt
tail和head命令
- tail -n 2 file.log 可以查看文件的最后2行
- tail - f file.log 可以实时的查看文件的后边追加的部分
- head - n 2 file.log 可以查看文件的开始两行
find
- find ~ -name “target3.java” :精确查找文件
- find ~ -name “target*” :模糊查找
- find ~ -iname “target*” :不区分大小写去查找文件
- man find:更多关于find指令的使用说明