Linux教程

【面试系列】万字长文吐血总结Linux常用命令

本文主要是介绍【面试系列】万字长文吐血总结Linux常用命令,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

肝了几个周末,万字长文吐血总结Linux命令以及面试实例分享!如果觉得文章还不错的,欢迎点赞关注哦!
公众号二维码

1、基础命令

ls

  • 默认列出当前目录,也可以列出指定目录下的文件列表。

image-20210728212604474

ll

  • 罗列出当前文件或目录的详细信息,含有时间、读写权限、大小、时间等信息

  • llls -l的别名,可以理解为 ll 和 ls -l 的功能是相同的。

image-20210728212627556

pwd

  • 打印当前工作目录的完整路径名。

image-20210728212806098

touch

  • 将每个文件的访问和修改时间更新为当前时间。除非提供-c-h,否则将不存在的FILE参数创建为空。
#创建三个文件
$ touch test1 test2 test3

#不创建文档
$ touch -c test5  
$ ls
test1  test2  test3

#可以看到只创建了test1、test2、test3 , -c不建立任何文件

cat

  • FILE或标准输入连接到标准输出。
$ cat test  #展示文件内容

-A, --show-all      等价于 -vET
-b, --number-nonblank  对非空输出行编号

$ cat -n test  #展示文件内容并且展示行号

     1    -A, --show-all      等价于 -vET
     2    -b, --number-nonblank  对非空输出行编号

# 把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里
$ cat -n log2012.log log2013.log

#把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里
$ cat -b log2012.log log2013.log log.log

tac

  • tac命令与cat命令展示内容相反,不能带行号输出
$ tac test

-b, --number-nonblank  #对非空输出行编号
-A, --show-all     # 等价于 -vET

chmod

  • Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod可以控制文件如何被他人所调用。
chmod abc file   #其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1  #r 表示可读取,w 表示可写入,x 表示可执行

若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。

比如:
chmod 777 file
chmod 700 file

mkdir

  • 如果目录不存在,则创建目录。
#当前工作目录下创建名为 t 的文件夹
$ mkdir t

#在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建
$ mkdir -p /tmp/test/t1/t

cd

  • 切换当前目录至指定目录
#切换到目录/
$cd /

rm & rmdir

  • -i, —interactive 进行交互式删除
  • -r, -R, —recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。
  • -d, --dir删除空目录
$ rm -rf linux  #删除目录成功,
$ rmdir == rm -d  删除空目录

mv

  • 移动目录或者文件到指定目录下,同时具有重命名的功能。
$ mv test.log test1.txt  #将文件 test.log 重命名为 test1.txt

$ mv log1.txt,log2.txt,log3.txt /test3  #将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中

cp

  • 将源文件复制至目标文件,或将多个源文件复制至目标目录。
  • -i提示
  • -r 复制目录及目录内所有项目
  • -a 复制的文件与原文件时间一样
$ cp -ai a.txt test #复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖。

echo

  • 用来打印变量、文本内容
$ echo "change world"  #打印change world
change world 

$ echo $PWD   #s输出PWD环境变量的值,$PWD 是取当前路径,然后echo到标准输出,,一般echo \$name 用来查看某个环境变量的值
/Users/localhost/test 

2、文件操作类

head

  • head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。
  • -n 展示前n行
  • -c 展示前n个字符
$ head -n15 test.txt  #展示15行

$ head -c23 test.txt  #展示前23个字符,中文一个汉字并非一个字符的(utf-8编码中文字符长度是可变的)

tail

  • 从尾部开始展示文本,常用查看日志文件。
  • -f 循环读取(常用于查看递增的日志文件)
  • -n<行数> 显示行数(从后向前)

日志文件没办法用vim或者cat这样去看,一般常用tail、grep或者more

more

  • 功能类似于cat, more 会以一页一页的显示方便使用者逐页阅读,
  • 最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。

cat命令是全部读取输出到标准输出,如果文件太大会把屏幕刷满的,根本没办法看。

$ more +3 text.txt #显示文件中从第3行起的内容
$ ls -l | more -5  #在所列出文件目录详细信息,借助管道使每次显示 5 行

less

  • lessmore 类似,但使用less 可以随意浏览文件,而 more仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件
$ ps -a | less -N  #-N  显示每行的行号   # ps 查看进程信息并通过 less 分页显示

wc

  • wc(word count)功能为统计指定的文件中字节数、字数、行数,并将统计结果输出
  • -c 统计字节数
  • -l 统计行数
  • -m 统计字符数
  • -w 统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串
$ wc -l test.txt  #统计文件行数      26 test.txt

date

  • 显示或设定系统的日期与时间。
$ date2019年12月22日 星期日 21时28分29秒 CST$ date '+%c'日 12/22 21:28:33 2019

cal

  • cal命令可以用来显示公历(阳历)日历。

cal

which

  • which 是在 PATH 就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果
  • 使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
$ which ls   # 查看指令"ls"的绝对路径
/bin/ls    ##ls可执行程序的绝对路径 

whereis

  • whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
$ whereis locate  #查找 locate 程序相关文件

$ whereis -s locate  #查找 locate 的源码文件

nl

  • nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!
$ nl test.txt    

find

  • 用于在文件树中查找文件,并作出相应的处理。
$ find /user -name '*.log' -print  # 在user目录查找 以 .log 结尾的文件,并打印输出 . 代表当前目录

grep

  • 强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索
$grep '20:[0-5][0-9]:' *.log  #匹配当前目录下搜索log日志中,20点的日志
$grep '20:[0-5][0-9]' 1.log 2.log 3.log  #指定在这三个文件中查找#grep规则是支持正则表达式的

$ps -ef|grep java    #查找所有java进程,-c可以统计查找的个数  

$grep '20:[1-5][0-9]:' *.log | grep -v '20:[3-4][0-9]:'   # -v反向选择,相当于过滤
$grep 'ab|bc' *.log  #支持|语法,匹配含有ab或者bc的文本行

cut

  • 从每个文件中剪切出每行的选定部分(由列表指定),并将它们写入标准输出。
  • -b:仅显示行中指定直接范围的内容;
  • -c:仅显示行中指定范围的字符;
  • -d —delimiter指定分割符(默认是以tab键作为分割符)
  • -f —fields指定分割的区域(常和-d参数配合使用)
  • cut命令只支持单个分割符!
#通过linux命令吧这个文本里面的hello world搞成十行,并且取出每一列的第七个字符。
$ cat tmp.cc| >>tmp.cc|>>tmp.cc|>>tmp.cc|head -n10|>tmp.cc|cut -c7-7

$cut -c-10 tmp.txt  #cut tmp.txt文件的前10列
$cut -c3-5 tmp.txt  #cut tmp.txt文件的第3到5列
$cut -c3- tmp.txt  #cut tmp.txt文件的第3到结尾列

cut -d "|" -f 1   #指定|作为分割符,取第一个域

diff

  • 比较两个文件的不同
$ diff testA.txt testB.txt

tar

  • 用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,压缩及解压是调用其它的功能来完成。

打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件

$tar -cvf test.tar test.txt   #打包  tar -cvf 包名  文件名

$tar -xvf test.tar  #解包  tar -xvf 包名 

$tar -zcvf test.tgz test.txt  #压缩  tar -czvf 包名 文件名

$tar -zxvf test.tgz   #解压  tar -xzvf 包名

gzip

  • 创建一个 *.gz 的压缩文件:gzip test.txt
  • 解压 *.gz 文件:gzip -d test.txt.gz

unzip

  • 解压 *.zip 文件:unzip test.zip
  • 查看 *.zip 文件的内容:unzip -l jasper.zip

awk

  • awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母
  • awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
  • 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
  • awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
  • 通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

使用方法

awk '{pattern + action}' {filenames}
  • pattern 表示 AWK 在数据中查找的内容, action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

入门实例

last -n 5的输出如下:

image-20210729112319556

显示最近登录的5个帐号:

image-20210729112349656

awk工作流程:

  1. 读入有\n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,
  2. 填充域,$0则表示所有域$1表示第一个域,$n表示第n个域。
  3. 默认域分隔符是"空白键" 或 “[tab]键”,所以$1表示登录用户,$3表示登录用户ip,以此类推。

sed

  • sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
  • 文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
  • sed命令处理时只会改变缓冲区中文本的副本,如果想要直接编辑原文件,可以使用-i选项或者将结果重定向到新的文件中。

示例

  • sed 后面接的动作,请务必以‘’ 两个单引号括住!
$ nl /etc/passwd | sed '2,5d'   #删除2-5行
$ nl /etc/passwd | sed '2d'   #只删除第2行
$ nl /etc/passwd | sed '3,$d' #删除3到最后一行

vim

打开文件、保存、关闭文件(vi命令模式下使用)

  • :w 保存文件
  • :w vpser.net 保存至vpser.net文件
  • :q 退出编辑器,如果文件已修改请使用下面的命令
  • :q! 退出编辑器,且不保存
  • :wq 退出编辑器,且保存文件

搜索(vi命令模式下使用)

  • /dong 向光标下搜索dong字符串,dong可以是正则表达式

  • ?dong 向光标上搜索dong字符串

  • n 向下搜索前一个搜索动作

  • N 向上搜索前一个搜索动作

  • * (#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的下(上)一个单词. 同样, 再输入 n查找下一个匹配处, 输入N 反方向查找.

  • g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而是匹配包含该单词的所有字符串.

跳至指定行(vi命令模式下使用)

  • n+ 向下跳n行

  • n- 向上跳n行

  • nG 跳到行号为n的行

  • G 跳至文件的底部

3、进程管理类(工作常用)

ps

  • ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top
$ps -a  #查看所有进程
$ps -ef  #查看进程的环境变量和程序间的关系
ps -aux | grep kafka  #与grep联用查找某进程

keil

  • 发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。

  • 如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程使用ps命令或者jobs 命令可以查看进程号

$ ps -ef | grep kafka #先使用ps查找进程kafka,
$ kill -9 pid  #然后用kill杀掉  kill -9 强制终止

df

  • 显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息,
#展示当前系统磁盘使用情况,以可读的方式展示
$ df -h

du

  • du 命令也是查看使用空间的,但是与 df 命令不同的是 : du 命令是对文件和目录磁盘使用的空间的查看.
$du -h filename  #查看指定文件大小
$du  -h / #展示该目录下所有文件大小,大小以可读方式展示
$du -sh  #展示当前目录大小
$du -sh ./ #展示当前目录下每个目录大小
$du -ah /  #显示所有文件的大小,以可读方式展示

lsof

  • lsof(list open files)是一个列出当前系统打开文件的工具

在linux环境下,任何事物都以文件的形式存在,即一切皆文件!

$ lsof   #显示当前系统打开的文件
$ lsof /bin/bashCOMMAND    #查看某个文件的相关进程  lsof 文件名
$ lsof -u username#查看某个用户打开的文件信息
$ lsof -c java #列出某个程序进程所打开的文件信息

ping

  • ping命令主要用来测试主机之间网络的连通性

  • 执行ping指令会使用ICMP传输协议发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

ICMP(Internet Control Message Protocol)Internet控制消息协议。 它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息

网络延时指**一个数据包从用户的计算机发送到网站服务器,然后再立即从网站服务器返回用户计算机的来回时间**。 通俗的讲,就是数据从电脑这边传到那边所用的时间。

$ ping -c 10 host    #ping指定次数
$ ping -c 10 -i 0.5 host  #ping指定时间间隔和次数限制

$ ping -c 4 -i 3 www.linuxcool.com  # 连续ping4次,每次间隔3秒,检查与linuxcool的连通性

telnet

  • telnet命令用于远端登入。

  • 执行telnet指令开启终端机阶段作业,并登入远端主机

$ telnet 192.168.120.209

Trying 192.168.120.209...
telnet: connect to address 192.168.120.209: No route to host
telnet: Unable to connect to remote host: No route to host

netstat

  • netstat命令用于显示网络状态。

在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询

$ netstat -a  #列出所有端口使用情况
$ netstat -nu  #显示当前UDP连接状况
$ netstat -apu  #显示UDP端口号的使用情况
$ netstat -i  #显示网卡列表

ifconfig

ifconfig 用于查看和配置 Linux 系统的网络接口。

$ ifconfig  #显示网络设备信息
$ ifconfig eth0 up   $ifconfig eth0 down  #启动关闭指定网卡
$ ifconfig eth0 ip  #配置IP地址

hostname

  • 主机名用于显示系统的DNS名称,并显示或设置其主机名或NIS域名。
$ hostname -i   #查看主机ip

top

  • 显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

top

wget

wget命令用来从指定的URL下载文件

wget -c http://xxx.zip   ##断点续传

curl

curl -d   ##HTTP POST方式传送数据

4、特殊字符类

|

管道 (pipeline) ,连结上个指令的标准输出,做为下个指令的标准输入。

[ ]

常出现在流程控制中,扮演括住判断式的作用

[[ ]]

这组符号与先前的 [] 符号,基本上作用相同,但她允许在其中直接使用||&&逻辑等符号

\

反斜杠的作用是将特殊符号字符的特殊含义屏蔽掉,使其还是原字符

sh里没有多行注释,只能每一行加一个#

>

把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件,使用bash的noclobber选项可以防止复盖原有文件。
**>> **
把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件後面。

&

单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作

||

代表 or 逻辑的符号。

&&

代表 and 逻辑的符号

匹配一个任意的字符

-n

禁止插入换行符。

-e

对转义字符进行替换

5、shell脚本相关

#!/bin/bash

  • #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

local

  • 一般用于shell内局部变量的定义,多使用在函数内部

$

  • $直接引用变量

  • **$?上一次命令的返回值。**0表示执行成功,非零值表示出错

  • $()执行并获取命令输出赋值给变量

  • ${}作为单词边界

  • ${#}获取变量字符串长度

  • 双引号"括起来的字符串支持变量插值,被双引号用括住的内容,将被视为单一字串

  • 单引号'括起来的字符串不会进行插值

  • $[]对表达式进行求值,与expr命令不同的是,$[]用于插值,而expr则将值输出

  • $$获取当前进程ID

seq

  • 用于产生从某个数到另外一个数之间的所有整数
for i in `seq 1 10`;

unset

  • -f:仅删除函数;
  • -v:仅删除变量。

sed

  • 逐行从文件中读取数据, 再对数据处理后显示到屏幕, 再进行下一行的处理
echo "aab12" | sed `s/\(.*\)/\1/`    ----->  aab12
  • s命令会用斜线间指定的第二个文本字符串来替换第一个文本字符串

  • \1 就代表被匹配到的第一个模式

  • -e 以选项中指定的script来处理输入的文本文件。

set

set指令能设置所使用shell的执行方式,可依照不同的需求来做设置

  • -x  执行指令后,会先显示该指令及所下的参数。用于脚本调试,在liunx脚本中可用set -x就可有详细的日志输出.免的老是要echo了

  • -e 若指令传回值不等于0,则立即退出shell

文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出,如果要增加可读性,可以使用set -o errexit,它的作用与set -e相同。

if

if [[ x"$var" == x"3"]];then
	echo "$var"
fi

x防止出现语法错误。如果不写x,只用 if [ “${var}" == “0” ]来判断${var}的值,当${var}为空或未设置时,语句被解释为if [ == "0" ],出现语法错误。加上x后,当${var}为空或未设置时,解释为 if [ “x" == "x" ],依然正确。

echo

  • shell中打印变量的值,或者直接输出指定的字符串,需要使用-e参数来打印转义字符
echo `date`  #显示当前日期
echo -e "\n"   #打印换行符

source

source FileName  #在当前bash环境下读取并执行FileName中的命令。

mkdir

mkdir -p data/env  #-p 确保目录名称存在,不存在的就建一个

function

function demo(){
	if [[ x"$var" == x"2" ]];then
		echo "$var"
	fi
}

tr

  • translate,可以用来对一段文本进行替换、删除、压缩重复字符
echo hello world 123 | tr -d '0-9'   ##删除字符串中的数字
hello world

echo hello world 123 | tr -d -c '0-9'  #-c选项表示取反
123

echo hello    world | tr -s ' '  #s选项加上空格参数表示将多个空格压缩为单个
hello world

echo hello world | tr [a-zA-Z] [n-za-mN-ZA-M]  ##rot13加密算法,这个算法简单地将英文字母后移13位
uryyb jbeyq

sync

  • 数据同步写入磁盘

pvcreate

  • 用于将物理硬盘分区进行初始化为物理卷,供LVM使用
-f:   强制创建物理卷,不需要用户确认
-u:   设置设备的UUID
-y:   所有的问题都回答yes

vgreduce

  • 删除物理卷

mount

  • 挂载命令

umount

  • 正常卸载文件系统

lvcreate

  • 创建LVM的逻辑卷
  • -l # 逻辑卷大小
  • -n # 逻辑卷名字

mkfs

  • make filesystem的缩写;用来在特定的分区建立Linux文件系统
mkfs.ext3 /dev/sda6    # 把该设备格式化成ext3文件系统

dmidecode

  • 在Linux系统下**获取有关硬件方面的信息,**通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。

lvs

  • Linux Virtual Server的简称,也就是Linux虚拟服务器

exit

  • 退出目前的shell
exit [状态值]    ##使shell以指定的状态值退出,状态值0代表执行成功,其他值代表执行失败

hash

  • 负责显示与清除命令运行时系统优先查询的哈希表

rpm

  • redhat package manager,是RPM软件包的管理工具
  • -i  显示套件的相关信息。
  • -h   套件安装时列出标记
  • -v   显示指令执行过程

6、正则匹配

^

^once  #匹配以once开头的字符串

在一组方括号里使用 ^ 时,它表示""或"排除"的意思,常常用来剔除某个字符

^[^0-9][0-9]$     #第一个字符非数字,第二个字符为数字。如&1、%2
[^a-z]    ##除了小写字母以外的所有字符 
[^\\\/\^] ##除了(\)(/)(^)之外的所有字符 
[^\"\'] ##除了双引号(")和单引号(')之外的所有字符

$

bucket$   #匹配以bucket结尾的字符串
^abcd$     #精确匹配,只匹配abcd字符串

\

所有的转义序列都用反斜杠 \打头

^\t    #匹配以制表符开头的字符串
\n
\\
\.

匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。

*

**匹配前面的子表达式零次或多次。例如,zo 能匹配 “z” 以及 “zoo”。 等价于{0,}。

+

{1,} 是相等的,匹配前面的子表达式一次或多次。

.

匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像"(.|\n)"的模式。

\b

匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’

{n}

前面的字符或字符簇只出现n次

{n,}

前面的内容出现n或更多的次数

{n,m}

前面的内容至少出现n次,但不超过m次

字符簇

[a-z] # 匹配所有的小写字母 
[A-Z] # 匹配所有的大写字母 
[a-zA-Z] # 匹配所有的字母 
[0-9] # 匹配所有的数字 
[0-9\.\-] # 匹配所有的数字,句号和减号 
[ \f\r\t\n] # 匹配所有的白字符
/[A-Za-z0-9]/   #匹配所有的字母和数字
^[a-zA-Z_]$	 #所有的字母和下划线
^a$	#字母a
^a{4}$	#aaaa
^a{2,4}$	#aa,aaa或aaaa
^a{2,}$	#包含多于两个a的字符串
^a{2,}	#如:aardvark和aaab,但apple不行
a{2,}	#如:baad和aaa,但Nantucket不行
\t{2}	#两个制表符
.{2}	#所有的两个字符
^[a-zA-Z0-9_]+$      #所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$        # 所有的正整数 
^\-?[0-9]+$          # 所有的整数 
^[-]?[0-9]+(\.[0-9]+)?$ # 所有的浮点数

7、实例经验分享

1、ssh连接远程服务器

ssh -l 用户名 -端口号 服务器ip
输入密码

2、远程连接服务器,后台运行命令,ssh断开,命令不中断

使用ssh连接远程服务器时,有时一个脚本要执行很长时间,如果没有放在后台独立运行,由于网络波动或者中断都有可能导致命令中断,所以在这里分享一个后台独立运行命令的Tip,亲测好用,棒棒哒!

方法1:nohup

nohup ./main &

此后,如果你断开了ssh,程序依旧运行。此种方式的缺点是,应用程序没有交互界面了,程序的输出将会输出的一个xxx.out文件中,而且以后无法在界面控制程序的结束。必须通过kill的方式。所以这种方式显得很简单粗鲁,很少使用。

方法2:screen

screen

回车后进入Screen子界面,此时putty标题栏会指示处于子界面状态,然后运行你的程序

./main

然后按下Ctrl+A后抬起,然后按下d键,此时切换回主界面,Putty的窗口标题栏也会指示。

进行其他的操作,或者exit

此时就是断开ssh,程序仍在运行。以后重新ssh连接后,输入

screen -ls

查看子界面的代号,然后输入

screen -r 子界面代号

就可以查看当初你程序运行所在的子界面了

3、统计目录下文件及文件夹的个数

Linux下有三个命令:lsgrepwc。通过这三个命令的组合可以统计目录下文件及文件夹的个数。

  • 统计当前目录下文件的个数(不包括目录)
$ ls -l | grep "^-" | wc -l
  • 统计当前目录下文件的个数(包括子目录)
$ ls -lR| grep "^-" | wc -l
  • 查看某目录下文件夹(目录)的个数(包括子目录)
$ ls -lR | grep "^d" | wc -l

命令解析:

  • ls -l

长列表输出该目录下文件信息(注意这里的文件是指目录、链接、设备文件等),每一行对应一个文件或目录,ls -lR是列出所有文件,包括子目录。

  • grep "^-"
    过滤ls的输出信息,只保留一般文件,只保留目录是grep "^d"
  • wc -l
    统计输出信息的行数,统计结果就是输出信息的行数,一行信息对应一个文件,所以就是文件的个数。

4、Linux下需要打开或者查看大文件,你会怎么做?

  1. vim 会一次性把文件load到内存,不可取

  2. cat会一次性输出文件的所有内容,用cat来读取16G的文件,你只能看到在屏幕上不断打印的内容,无法阅读。

  3. 如果只看文件的前一部分,用 head -n 就是最佳选择。

  4. less/more并不需要加载全部文件,因此在打开大文件的时候,less/more具有优势。但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动

5、Linux怎么查看当前的负载情况?

  1. 使用top命令查看负载,在top下按“1”查看CPU核心数量,shift+"c"按cpu使用率大小排序,shif+"p"按内存使用率高低排序;

  2. 使用iostat -x命令来监控io的输入输出是否过大

6、linux指令统计日志出现的次数?

查找单词名称:test

操作命令:

(1)more xxx.log | grep -o test | wc -l ### word count -list
(2)cat xxx.log | grep -o test | wc -l           
(3)grep -o test xxx.log | wc -l

7、查看端口号,你会使用什么命令?

方法1: lsof命令,即ls open files

$ lsof -i:端口号

方法2: netstat命令

$ netstat -tunpl | grep 端口号

8、创建shell脚本并运行

1.touch hello.sh

2.vim hello.sh 
 键入i 
 插入#!/bin/sh
     echo hello world;
 键入: 
    esc 
    :
    wq
3.chmod 700 hello.sh//给予用户权限

4. 执行./hello.sh 或者执行  sh hello.sh

9、shell脚本比较两个数字

if-then 中使用测试命令( -gt 等)来比较两个数字。

#!/bin/bash     //这一行 一定要有 ,表示命令通过 /bin/bash 来执行
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi
#其他比较命令
-eq           //等于
-ne           //不等于
-gt            //大于 (greater )
-lt            //小于  (less)
-ge            //大于等于
-le            //小于等于
在linux 中 命令执行状态:0 为真,其他为假

10、判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下?

read 命令可以读取来自终端(使用键盘)的数据。-p后面跟提示信息,即在输入前打印提示信息。

#!/bin/bash
read -p "Input file name: " FILENAME
if [ -c "$FILENAME" ];then
  cp $FILENAME /dev
fi

11、写一个 sed 命令,修改 /tmp/input.txt 文件的内容?

要求:

  • 删除所有空行。
  • 一行中,如果包含 “11111”,则在 “11111” 前面插入 “AAA”,在 “11111” 后面插入 “BBB” 。比如:将内容为 0000111112222 的一行改为 0000AAA11111BBB2222 。
[root@~]## cat -n /tmp/input.txt
     1  000011111222
     2
     3  000011111222222
     4  11111000000222
     5
     6
     7  111111111111122222222222
     8  2211111111
     9  112222222
    10  1122
    11

## 删除所有空行命令
[root@~]## sed '/^$/d' /tmp/input.txt
000011111222
000011111222222
11111000000222
111111111111122222222222
2211111111
112222222
1122

## 插入指定的字符
[root@~]## sed 's#\(11111\)#AAA\1BBB#g' /tmp/input.txt
0000AAA11111BBB222
0000AAA11111BBB222222
AAA11111BBB000000222
AAA11111BBBAAA11111BBB11122222222222
22AAA11111BBB111
112222222
1122

【面试系列】计算机网络(一)
【面试系列】计算机网络(二)
【面试系列】常考web安全问题总结
30道计网常考面试题总结

【面试系列】会持续更新,欢迎关注公众号“任冬学编程”,一起学习与进步!
公众号二维码

这篇关于【面试系列】万字长文吐血总结Linux常用命令的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!