linux常用命令大全

  1. less
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。 在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按 键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

-m  显示类似more命令的百分比
-N  显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b  向前翻一页
d  向后翻半页
Q  退出less 命令
G - 移动到最后一行
g - 移动到第一行

我经常使用 less -mN 来查看文件,然后使用上面命令基本够用
  1. tail
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

-f 循环读取
-n<行数> 显示文件的尾部 n 行内容
  1. head
head和对应。head是显示开头的前几行。

-n<行数> 显示文件的头部 n 行内容

head -n10 test.log
  1. date
显示日期的函数。常用用法:今天2020/11/20日

date -d -0day +%Y-%m-%d   ==>  2020-11-20
date -d -1day +%Y-%m-%d   ==>  2020-11-19
date -d -5day +%Y-%m-%d   ==>  2020-11-15
  1. netstat
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

-a或--all:显示所有连线中的Socket;
-l或--listening:显示监控中的服务器的Socket;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;//可以查看pid号
-t或--tcp:显示TCP传输协议的连线状况; 
-u或--udp:显示UDP传输协议的连线状况;
  1. chmod
chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

第一种:使用符号模式,例如:chmod a+x file,此处的a代表所有用户,+代表添加权限,x代表执行权限
第二种:使用绝对模式,例如:chmod 777 file,表示为所有用户添加可读可写可执行权限,三个数值分别对应三种用户类型

-rwx-w--w- 1 root root       148 Mar 18 15:25 test.cpp
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
所以:文件拥有者u可读可写可执行,一组只能写,其他人也只能写

第一种:符号模式

1. chmod a+w test.cpp  ==>  给test.cpp所有用户w(可写)权限
2. chmod u-w test.cpp  ==>  撤销test.cpp拥有着的w(可写)权限

第二种:绝对模式

-rwx-w--w-  可以表示为 111 010 010 即为 722权限
1. chmod 722 test.cpp  ==> 给test.cpp  rwx-w--w-权限
2. chmod 000 test.cpp  ==> 给test.cpp  ---------权限  没有所有权限
3. chmod 777 test.cpp  ==> 给test.cpp  rwxrwxrwx权限  所有权限

ps.  如果要修改文件以及子文件  加上参数 -R即可
     -R对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
  1. top
top程序提供运行系统的动态实时视图,它可以显示系统概要信息以及当前由Linux内核当前管理的任务列表。所示的系统概要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的,并且可以在重新启动时使配置保持不变。

-d 延迟时间间隔为:-d ss.tt(单位秒,允许小数,不允许负数)。
-p 监视器PID为:-pN1 –pN2 …或-pN1,N2[,…]。仅监视具有指定进程ID的进程。此选项最多可以给出20次,或者您可以提供最多20个PID的逗号分隔列表。
-u 用户监控:-u somebody。仅监控与给定的有效UID或用户名匹配的进程
-U 用户监控:-U somebody。仅监控与给定的UID或用户名匹配的进程。这与真实的、有效的、保存的文件系统UID相匹配。
-v 版本信息

-c 显示完整的进程名称

交互命令:
k 杀死一个任务(进程)。系统将提示您输入PID,然后输入要发送的信号。
M 按照内存排序
P 按照cpu使用率排序
l 切换显示平均负载和启动时间信息。(最上面一行,可用uptime单独查看)
e/E  人性化的方式展示。即把k转化为 M/G等单位
  1. find
Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

-name name  文件名称符合 name 的文件
-iname name  iname 会忽略大小写
-amin n : 在过去 n 分钟内被读取过
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-ctime n : 在过去n天内被修改过的文件
-type 查找某一类型的文件
    d 目录
  f 普通文件

例子:
// 不区分大小写查找结尾为exe的文件
find / -iname *.exe

// 我只想查找目录是nginx的目录
find / -type d -iname *nginx*

// 我只想查找文件是nginx的文件
find / -type f -iname *nginx*
  1. grep
Linux grep命令用于查找文件里符合条件的字符串。
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为"-",则grep指令会从标准输入设备读取数据。

-i :忽略大小写(ignore case)。
-n :显示行号
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-v : 查找不包含在文本里面的。即反向选择
-P :使用perl的正则表达式。比如\d {1,5} {1,}等等正则
-H :显示文件名称. 比如模糊搜索很多文件的时候,可以看查到了哪个文件 需要grep -H *.conf

// 查询异常栈的时候最有效
-a5 : 同时显示匹配到的行数的前后五行
-A3 : 同时显示匹配到的行数的后三行
-A    是显示匹配后和它后面的n行。
-B    是显示匹配行和它前面的n行。
-C    是匹配行和它前后各n行。

例子:
// 忽略大小写,查找nginx.conf里面的http
grep -in http nginx.conf

// 查找http在nginx.conf有几行(可能一行中出现了多次http)
grep -c http nginx.conf
  1. systemctl
systemctl命令是系统服务管理器指令,主要负责控制systemd系统和服务管理器,它实际上将 service 和 chkconfig 这两个命令组合到一起。

systemctl start [unit type]  启动服务
systemctl stop [unit type]  停止服务
systemctl restart [unit type]  重启服务
systemctl status [unit type]  参数来查看服务运行情况
systemctl reload [unit type]  重新加载服务,加载更新后的配置文件

systemctl enable [unit type]  设置服务开机启动
systemctl disable [unit type]  设备服务禁止开机启动

systemctl is-enabled [unit type]  检查网络服务是否设置为开机启动
  1. vim
基本上 vi/vim 共分为三种模式
分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 
上下左右: 
h  左边
l   右边
j  下边
k  上边

移动:
箭头键 上下左右移动
向下移动 30 行,可以使用 "30↓" 的组合按键

n<space> 按下数字后再按空格键,光标会向右移动这一行的 n 个字符 
0 或功能键[Home]  这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End]  移动到这一行的最后面字符处(常用)
I(大写i)  当前所在光标最前面插入
A(大写a)  当前所在光标最后面插入
o(小写o)  当前所在行的下一行插入
O(大写o)  当前所在行的上一行插入


G  移动到这个文件的最后一行(常用)
gg  移动到这个文件的第一行
nG n 为数字。移动到这个档案的第 n 行。

删除:
x, X  在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符
nx    n 为数字,连续向后删除 n 个字符。
dd   删除游标所在的那一整行(常用)
ndd  n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)


复制黏贴:
yy    复制游标所在的那一行(常用)
nyy   n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
p, P  p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行!

查找:
/word  向光标之下寻找一个名称为 word 的字符串
?word  向光标之上寻找一个字符串名称为 word 的字符串。
n  代表重复前一个搜寻的动作
N  这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。
*    可以直接查找当前光标所在的单词

如果你想要找到以word结尾的。  /word\>    ?word\>  
如果你想要找到以word开头的。  /\<word    ?\<word
要匹配一个完整的word单词  /\<word\>      ?\<word\>

替换
:%s/vivian/sky/g  替换每一行中所有 vivian 为 sky 

或者用sed替换 sed -i "s/\./:/g" osc.log



多文件操作:
:sp filename     水平分割
:vsp filename   垂直分割
:ctrl + w + h     光标移动到左边文件
:ctrl + w + l      光标移动右边文件

:ctrl + w + H(大写)    窗口移动左边
:ctrl + w + L(大写)     窗口移动右边
:ctrl + w + >         窗口向右变大
:ctrl + w + <         窗口向左变小
:ctrl + w + +         窗口向上变大

补全
ctrl + x  ctrl + p  根据当前文件补全(或者用ctrl + n直接代替)
ctrl + x  ctrl + l   补全整行


其他常用功能:
u  撤销前一个功能,类似于ctrl+z
.     重复上一个动作(就是小数点)
v    选中部分快
:set nu    示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu  与 set nu 相反,为取消行号!
:set ts=4  tab四个空格
: syntax on      语法高亮
: autoindent    自动缩进




高级操作:
w  移动到下一个单词
b  返回上一个单词
f+字符  
例如fa, 表示从光标位置开始向右查找第一次出现a的位置,找到则光标移到该位置,未找到则不移动。输入分号(;)可以重复上一次的查找命令。
M(middle) 将光标移到屏幕中部行首
%   移动到括号匹配的另外一边。比如[aaaaaaaaaaaabbbbbbbbbbaaaaaaaa]。当前光变在 [ , 按一下 % ,就跳到了 ] 所在位置.

ma(mark a) 可以把这一行给标记了,然后用`a 可以直接跳转过去。非常好用
` 自己本身也是一个寄存器,表示上一次跳转前的位置。因此按两次 `` 表示返回之前的位置,类似于回退


// "some word for test"  
d i "   ==>  d 删除  i进入 "冒号  , 删除在冒号里面的所有东西
d w  删除一个单词
d 2 w 删除两个单词

寄存器   每次复制完,都会存到0号寄存器。
然后ctrl+r 就是准备取寄存器东西。按0 就是把寄存器0的东西取出来


https://www.cnblogs.com/chaoqi/p/10518994.html



Vim 的纵向编辑模式

将游标定位到第一行第一列
ctrl-v 进入纵向编辑模式
G 移动游标到最后一行第一列,可视块覆盖了第一列
I 进入行首插入模式
ping -c 4 输入所要求字符“ping – c 4 ”
ESC 退出纵向编辑模式的同时所有选中的字符前都添加了“ping – c 4 ”,回到命令模式

Vim 的宏记录

宏是可以记录recode 一系列操作
在普通模式下按下 r t R代表开启宏,T表示将一系列操作放到T这个寄存器中
然后可以随意记录,最后按下r,结束宏的录制

执行宏,则按下 @t即可。  2@t 执行两边宏
  1. wget
Linux系统中的wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

-O  变更下载文件名
-c  接着下载没下载完的文件,断点续传
-b  启动后转入后台执行
-P  指定下载目录

// 例子

使用wget下载单个文件
wget http://cn2.php.net/distributions/php-5.6.13.tar.gz

下载并以不同的文件名保存 
wget -O php.tar.gz http://cn2.php.net/distributions/php-5.6.13.tar.gz

使用wget断点续传
wget -c http://cn2.php.net/distributions/php-5.6.13.tar.gz

使用wget后台下载
wget -b  http://cn2.php.net/distributions/php-5.6.13.tar.gz

使用wget下载到指定目录
wget http://cn2.php.net/distributions/php-5.6.13.tar.gz -P Download/
  1. curl
curl 是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。

* get请求
curl  "gdufe888.top/api/tweet/newest?page=1&pageSize=10"

发觉301重定向 

curl  -L "gdufe888.top/api/tweet/newest?page=1&pageSize=10"

完美解决

* Post请求
curl -d "page=1&pageSize=10" 120.78.159.149:8083/api/tweet/newest

非常的简单

-d 加上参数即可

* 其他重要指令
curl -v "https://www.gdufe888.top/api/tweet/newest?page=1&pageSize=10"

// 结果
* About to connect() to 120.78.159.149 port 8083 (#0)
*   Trying 120.78.159.149...
* Connected to 120.78.159.149 (120.78.159.149) port 8083 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 120.78.159.149:8083
> Accept: */*
>
< HTTP/1.1 200
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 85
< Date: Sun, 31 Mar 2019 10:21:55 GMT
<
* Connection #0 to host 120.78.159.149 left intact

会返回详细的请求流程



curl --user-agent "[User Agent]" [URL] 或者
curl -A "[User Agent]" [URL]
增加头信息
  1. tar是打包,解压文件的命令。类似于windows下面的zip,rar等
=============最常用的几个参数(如下)=====================
-x  解压
-c  打包
-t  查看压缩包里面的内容
(以上三个不能同时用,只能单独用)

-z  是否同时具有gzip的属性?即是否需要用gzip压缩或解压?一般格式为xxx.tar.gz或xx.tgz
-j  是否同时具有bzip2的属性?即是否需要用bzip2压缩或解压?一般格式为xx.tar.bz2
-v  显示操作过程!这个参数很常用
-f  使用文档名,你要解压那个文件 这个参数一定要放到最后去



// 例子

查看redis.tar.gz文件
tar -ztvf redis-4.0.6.tar.gz(z参数可加可不加)

解压redis.tar.gz文件
tar -zxvf redis-4.0.6.tar.gz

打包两个文件
tar -zcvf target.gz wget-log wget-log.1
  1. jar
java中SpringBoot最常见的就是 xxx.jar/osc.jar/mipay.jar 等等
jar的命令和tar非常的类似,几乎一模一样

=============最常用的几个参数(如下)=====================
-x  解压
-c  打包
-t  查看压缩包里面的内容
(以上三个不能同时用,只能单独用)

-v  显示操作过程!这个参数很常用
-f  使用文档名,你要解压那个文件 这个参数一定要放到最后去



// 例子

查看osc.jar文件
jar -tvf osc.jar  | grep cashpay-common

解压osc.tar.gz文件
jar -xvf osc.jar

打包两个文件
jar -cvf xxx.jar BOOT-INF/ META-INF/ org/
  1. awk
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片。切开的部分再进行各种分析处理。
-F  指明输入时用到的字段分隔符
-v  var=VALUE : 自定义变量(无需加$, 直接用即可)

1:以空格为分隔符
awk -F ' ' '{print $0}' test.txt

2: 以冒号为分隔符
awk -F ':' '{print $1}' test.txt

3: 正则匹配,输出每一行包含rcu的行
awk '/rcu/ {print $0}' test.txt

4: 正则匹配,输出包含NetType的行
awk '$0 ~ /NetType/ {print $1}' access.log

4: 正则匹配,输出不包含NetType的行
awk '$0 !~ /NetType/ {print $1}' access.log

5: 筛选grep,输出第二行等于 “6” 得行
cat data.txt |  awk -F ' ' '$2==6{print $0}'
在print之前,加一个参数,多少行等于多少,就可以有grep的效果了。非常的好用。
  1. cut
Linux  cut命令用于显示每行从开头算起 num1 到 num2 的文字。

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符 \t。
-f :与-d 一起使用,以段为分割。

文本:
2017-12-02
2017-01-09
2017-10-23
2017-04-24

1:以'-'为分割线。只要第二列,第三列
cat data.txt | cut -d"-" -f2-3
  1. sort
Linux sort命令用于将文本文件内容加以排序。sort可针对文本文件的内容,以行为单位来排序。

-n   依照数值的大小排序。
-r    以相反的顺序来排序。
-u   去重复
-t   <分隔字符> 指定排序时所用的栏位分隔字符。
-k   配合-t用

文本:
2017-12-02
2017-01-09
2017-10-23
2017-04-24

1: 以数字排序
cat test.txt | sort -n

2: 以“-”为分割线,排序第二列。即月份
cat test.txt | sort -n -t'-' -k2

3:以'-'为分割线。先以第一列排序,第一列相同,以第二列排序
sort -t '-' -k1n -k2n -k3n
  1. uniq
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。uniq 可检查文本文件中重复出现的行列。
  1. nohup
nohup命令用于不挂断地运行命令(关闭当前session不会中断改程序,只能通过kill等命令删除)。
使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件。


解释:


1: &  &用于后台执行程序,但是关闭当前session程序也会结束

2: 2>&1 &
bash中:
0 代表STDIN_FILENO 标准输入(一般是键盘),
1 代表STDOUT_FILENO 标准输出(一般是显示屏,准确的说是用户终端控制台),
2 三代表STDERR_FILENO (标准错误(出错信息输出)。
2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。

3:/dev/null
可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
/dev/null 2>&1则表示吧标准输出和错误输出都放到这个“黑洞”,表示什么也不输出。




常用nohup命令如下:

1: nohup bash hello.sh > hello.txt &   在后台执行hello.sh脚本,并将内容输出到hello.txt

2:  nohup bash hello.sh >> hello.txt 2>&1 &  在后台执行hello.sh脚本,并将内容输出到hello.txt。 同时,错误信息输入到1正确信息中,也就是hello.txt中

3: nohup bash hello.sh > /dev/null 2>&1 &    在后台执行hello.sh脚本,并将内容输出到null中,也就是什么都不输出

4:  nohup bash hello.sh > hello.txt 2>error.log &  在后台执行hello.sh脚本,正确信息输出到hello.txt中,错误信息输出到error.log中

  1. nc
nc是一个网络工具。可以很方便的进行 服务器间的文件传输



常用nc命令如下:

我想把文件从 A服务器 传送到 B服务器

1:首先在 B服务器 监听端口:nc -l 9999 > output.log

2:nc ip 9999 < input.log  例如:nc 10.11.212.231 9999 < input.log
posted @ 2023-09-10 15:37  程序员博博  阅读(25)  评论(0编辑  收藏  举报