Linux与Shell相关命令整理

dirname $0和readlink用法

  • 获取当前脚本路径 path.sh

    • dirname $0 只是获取的当前脚本的相对路径.
#!/bin/bash
path=$(cd `dirname $0`;pwd)
echo $path
path2=$(dirname $0)
echo $path2
当前脚本存在路径:/home/software
sh path.sh
/home/software
.
解释:
dirname $0 只是获取的当前脚本的相对路径.
cd `dirname $0`;pwd  先cd到当前路径然后pwd,打印成绝对路径方法二:
path.sh
#!/bin/bash
path=$(dirname $0)
path2=$(readlink -f $path)
echo path2
sh path.sh
/home/software
解释:
readlink -f $path 如果$path没有链接,就显示自己本身的绝对路径

readlink

readlink是linux用来找出符号链接所指向的位置
例1:
readlink -f /usr/bin/awk
结果:
/usr/bin/gawk #因为/usr/bin/awk是一个软连接,指向gawk
例2:
readlink -f /home/software/log
/home/software/log  #如果没有链接,就显示自己本身的绝对路径
  • 参数:path – 要查找的软链接路径

  • 返回值:返回软链接所指向的文件

  • 以下实例演示了 readlink() 方法的使用:

#!/usr/bin/python3import ossrc = '/usr/bin/python'
dst = '/tmp/python'# 创建软链接
os.symlink(src, dst)# 使用软链接显示源链接
path = os.readlink( dst )
print (path)

执行以上程序输出结果为:

/usr/bin/python

获取路径的比较

path.sh
#!/bin/bash
PATH1=$(dirname $0)
PATH2=$(cd `dirname $0`;pwd)
PATH3=$(readlink -f $PATH1/..)
echo $PATH1
echo $PATH2
echo $PATH3
当前脚本存在路径:/home/software
sh path.sh
.              【echo $PATH1】
/home/software 【echo $PATH2】
/home          【echo $PATH3】

readlink命令

  • readlink是Linux系统中一个常用工具,主要用来找出符号链接所指向的位置。

  • 语法格式
    readlink [参数] [文件]

  • 参数:

常用参数:
-f  递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在
-e  递归跟随给出文件名的所有符号链接以标准化,所有组件都必须存在
-n  不输出尾随的新行
-s  缩减大多数的错误消息
-v  报告所有错误消息
----------------------------------------------------------------------------------------
-f, --canonicalize                 递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在-e, --canonicalize-existing         递归跟随给出文件名的所有符号链接以标准化,所有组件都必须存在-m, --canonicalize-missing         递归跟随给出文件名的所有符号链接以标准化,对组件存在性作出要求-n, --no-newline                  不输出尾随的新行-q, --quiet,-s, --silent      缩减大多数的错误消息-v, --verbose     报告所有错误消息--help        显示此帮助信息并退出--version     显示版本信息并退出

Mysql本地连接报错

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

当使用host参数为“localhost”连接Mysql服务时,会优先使用“sock文件”进行连接,而不是使用“IP:端口”进行连接,而Mysql尝试使用“sock文件”进行连接时,却无法获取“sock文件”的位置。

要解决此错误,有两种解决方法:

  • 将连接参数“host”的值由“localhost”改成“127.0.0.1”;
  • 按下面方法,在“/etc/mysql.cnf”中指定“sock文件”位置。

1、查看mysql服务的socket文件位置:
  mysql socket文件的位置是在/etc/my.cnf中设置的,cat /etc/my.cnf内容如下:

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
user=mysql

其中socket等于的路径就是socket文件的位置,我们只要修改my.cnf文件,告诉mysql,mysqldump,mysqladmin等mysql服务的socket位置在哪里就可以。

2、修改my.cnf文件:
在/etc/my.cnf文件中添加如下内容,并重启mysqls服务,即可解决mysql,mysqldump,mysqladmin的“Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’”问题:

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock

[mysql]
socket=/storage/db/mysql/mysql.sock

[client]
socket=/storage/db/mysql/mysql.sock

[mysqldump]
socket=/storage/db/mysql/mysql.sock

[mysqladmin]
socket=/storage/db/mysql/mysql.sock

可以正常访问了


为mysql的root用户授予所有权限:

grant all privileges on *.* to 'root'@'%' identified by 'password';
flush privileges;

sed命令和正则表达式

一、sed (Stream EDitor)

sed 是一种新型的,非交互式的编辑器。它能执行与编辑器 vi 和 ex 相同的编辑任务。sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。sed 编辑器没有破坏性,它不会修改文件,除非使用 shell 重定向来保存输出结果。默认情况下,所有的输出行都被打印到屏幕上。

sed能实现grep匹配功能,不过没有颜色提示,不如grep简单好用。sed更强大的是替换功能。sed命令行格式为:sed [选项] ‘command’ 输入文本,示例sed ‘p’ test.txt,这个命令会打印(print)test.txt的内容。由于sed是流处理文本的每一行,默认会输出每一行,所以该条命令会每行显示两边。

常用选项有:

  • -n 只显示匹配行,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行
  • -r 扩展正则表达功能,没有该选项时正则表达式一些元字符要用反斜杠脱义
  • -e 多个动作,一个sed命令里可以有多个筛选条件,每个条件前需要加-e。筛选不是选交集,而是符合任一条件即输出
  • -i 直接修改文档读取的内容,不在屏幕上输出

command要用单引号引起来。常用命令有:

  • d 删除行
  • p 打印行
  • l 列出非打印字符
  • s 用一个字符串替换另一个
  • I 不区分大小写
    command中还可以指定文本范围、正则表达匹配。指定范围一般是指定行的范围’1,5p’代表打印1-5行。正则匹配字符串要用斜杠引起来:’/root/p’表示打印包含root字符串的行。以上就是sed的命令格式和常用选项、命令,下面是配合正则表达式使用sed的例子。
sed -n ' /^\[file/{:a1;n;/^$/q;p;bal}] ' $CURR/../extract_config | sed 's/[ \t]//g'
-n 只打印被 sed 特殊处理的行
sed -n '/^g/p' test.txt #打印以g开头的行
/^\[] 表示以[]匹配指定字符串内的任一单一字符;
$CURR/../extract_config | sed 's/[ \t]//g'  获取的当前脚本的相对路径的上一层目录,删除制表符

二. sed命令的基本格式

sed 【 选项】 ‘命令(command)’ 输入文本

三.常用的sed的正则表达式字符

  1. ^

行首定位符,表示匹配所有以指定字符开头的行,例如^love表示所有以love开头的行。

2.$

行尾定位符,表示匹配所有以指定字符结尾的行,例如love$表示所有以love结尾的行。

  1. .

匹配除换行外的单个字符,例如l…e表示匹配l开头e结尾中间有两个任意字符的行

匹配零次或者多次前面的字符,例如*Love,表示匹配在零个或者多个空格后紧跟着一个love的行

5.[]

匹配指定字符串内的任一单一字符,例如[lL]ove表示匹配包含love和Love的行

6.[^]

匹配不在制定字符组内的任一字符,例如[^A-CF-H]ove,表示匹配不是以a-c或者f-h之间开头但是后面包含ove的行

7…或者()

表示保存已匹配的字符,以方便在后面继续引用,前者是sed后面的选项没有加-r,即使用标准的正则表达式,而sed后面加上选项-r则表示使用扩展的正则表达式。

8.&

表示保存查找字符串并在后面引用,例如,s/love/&/表示将匹配到的行中的love变成love

9.\

\表示词尾定位,例如,\表示匹配包含以love为结尾的单词的行。

10.x{m}, x{m,} x{m,n}或者x{m}, x{m,} x{m,n}

分别表示匹配前面的字符串m次,至少m次,m到n次,而两者的区别就是标准正则和扩展正则。

四.sed的常用选项

  1. -n

使用安静模式,在一般的情况下所有的标准输入都会打印到屏幕上,加入-n后只会打印出来被sed特殊处理的行

2.-e

多次编辑的作用,而且命令的顺序会影响到命令的执行借股票

3.-f

指定一个sed脚本的文件到命令行执行

4.-r

使用sed的时候使用扩展的正则表达式

5.-i

直接修改文档读取的内容,具有破坏性,并且不在屏幕上输出

6.a\

在匹配到行后添加一行或者多行

7.c\

用新的文本修改或者替换当前行中的文本

8.i\

在匹配到的行的前面插入文本

9.d

删除匹配到的行

10.=

为匹配的模式空间的行打印行号

五.sed的高级编辑命令

1.h

把模式空间里的内容复制到保持空间

2.H

把模式空间里的内容追加到保持空间

3.g

取出保持空间中的内容,并且复制到模式空间,覆盖原有的内容

4.G

取出保持空间中的内容,并且复制到模式空间,追加在原有的内容之后

5.p

列出非打印字符

6.n

读入下一行输入行,并且从下一条命令开始处理

7.N

读取匹配到的行的下一行追加到模式空间当中

8.q

结束或者退出sed

9.r

从文件中读取输入行

10.!

对选择的行以外的行做命令处理

11.s

替换标志

六.替换标志

1.g

在行内进行全局替换

2.p

打印匹配的行

3.w

将行写入文件

4.x

交换保持空间和模式空间的内容

5.y

将字符转换成另一种字符

七.sed命令实例

1.sed ‘2p’ /etc/passwd

匹配passwd文件当中的第二行,但是全部行都会打印出来

2.sed -n ‘2p’ /etc/passwd

匹配passwd文件当中的第二行,而且只打印第二行

3.sed -n ‘1,4p’ /etc/passwd

匹配passwd文件中的第一行到第四行,且只打印第一行到第四行

4.sed -n ‘/root/p’ /etc/passwd

匹配passd文件当中含有root的行,且只打印匹配到的行

5.sed -n ‘2,/root/p’ /etc/passwd

从第二行开始匹配到第一个含有root的行,并且打印出来

6.sed -n ‘/^$/=’ file

将匹配到的空行打印出来

  1. sed -n -e '/^$/p' -e '/^$/=' file

匹配file文件中的空行,并且显示此空行的行号

8.sed ‘/root/a\superman’ /etc/passwd

在含有root行的行后添加superman,会换行

9.sed ‘/root/i\superman’ /etc/passwd

在含有root行的行前面添加superman,会换行

10.sed ‘/root/c\superman’ /etc/passwd

将含有root行的行改为superman

11 .sed ‘/^$/d’ file

删除file文件中的空行

12.sed ‘1,10d’ file

删除file文件中的第一行到第十行

13.nl /etc/passwd | sed ‘2.5d’

将passwd文件中的行编号显示后,在通过管道删除第二到第五行

14.nl /etc/passwd | sed ‘2a,tea’

将passwd文件中的行编号显示后,在传递给管道后,在第二行的后面加上,tea,换行

15.sed ‘s/test/mytest/g’ example

将example文件中的test转换成mytest

16.sed -n ‘s/root/&superman/p’ /etc/passwd

将passwd文件中的root换成rootsuperman

17.sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets

将pets文件中的dog换成cat,hi换成lo

18.sed -i.bak ‘s/dog/cat/g’ pets

将pets文件中的dog换成cat的同时,生成一个pets.bak文件,此文件是没源文件

19.sed -n ‘n;p’ file

n是读取匹配到的行的下一行到覆盖到模式空间,所以当读取第一行后,此时模式空间中是第一行,然而并不会输出第一行而是继续读取第二行到模式空间中,并且覆盖第一行,此时模式空间中只有第二行,则n执行完毕,然后以;为间隔执行下一条p,即将模式空间中的行打印出来,也就是会打印出来第二行的内容,所以最后打印出来的就是第2,4,6,8行,即打印偶数行

20.sed ‘1!G;h;$!d’ file

先看第一个;前的内容,1!表示不要第一行的内容,G表示从保持空间中提取内容追加到模式空间中,但是此时的保持空间中并没有内容,所以第一个分号前的内容等于是没有任何执行 的结果,此时执行中间的h,即把模式空间中的内容覆盖到保持空间中,即把第一行的内容放到保持空间中,此时保持空间没有内容,也就是保持空间此时只有第一行,然后执行最后一条指令,当当前行不是最后一行的时候,删除模式空间中的行,此时模式空间只有第一行,所以删除模式空间中的第一行,然后开始第二行,读取了第二行后,在模式空间此时只有第二行,然后从保持空间中取出第一行放到第二行的下面,再把这两行覆盖到保持空间中,最后,此时仍然不是最后一行,所以删除模式空间的第二行,以此类推,最后一行的时候,不会被删除,而前面的行会被追加到他的下面,也就是最后一行最后会在最上面而第一行最后会在最下面,所以此指令就是将行倒序显示。

21.sed ‘N;D’ file

当第一行被放到模式空间的时候,执行N,即在第一行的后面,追加的放了个第二行,此时模式空间中有两行,然后执行D,即删除模式空间中的第一行保留第二行,然后继续执行,将第三行追加到模式空间后,删除

第二行,然后再将第四行追加到模式空间中,以此类推,最后一行的时候,D没有可以删的东西的时候,循环结束,即此命令输出的是最后一行。

22.sed ‘!N;!N;!N;!D’ file

如果不是最后一行的话就在模式空间中的第一行后追加第二行,然后如果不是最后一行的话就删除模式空间中的第一行,接下来第三行追加到模式空间,最后当最后一行的时候,模式空间中只有倒数第二行,将最后一行追加到它的后面循环结束,即输出倒数后两行

23.sed ‘$!d’ file

如果不是最后一行的话就删除,也就是显示最后一行

24.sed ‘G’ file

当保持空间内什么也没有的时候,默认追加到模式空间中的行的下面的是空行,此命令也就是给所有行的下方增加空行

25.sed ‘g’ file

当保持空间内什么也没有的时候,默认覆盖到模式空间中的行的下面的是空行,此命令也就是打印出和源文件行数相同的空行

26.sed ‘/^$/d;G’ file

当模式空间中行不是空行的时候给它下面增加一个空行,如果是空行的话就删除这个空行,并且增加一个空行,也就是给源文件中的所有行后面加上空行,并且跳过源文件中的空行

27.sed ‘n;d’ file

当是第一行的时候变成第二行,然后删除第二行,即输出奇数行,但是若是加上-n ,则什么都不会显示

28.sed -n ‘1!G;h;$p’ file

倒序显示,当不是第一行的时候,追加保持空间中的行到模式空间,即给第一行的下面加上空行,然后再将第一行以及他下面的空行覆盖到保持空间中,最后如果是最后一行则直接打印出来,不是最后一行的时候,将第一行以及他下面的空行追加到第二行下面,以此类推,最后倒序输出。


例子

sed -n '5p' test.txt #打印第五行
sed -n '1,5p' test.txt #打印第一行到第五行
sed -n '1,$p' test.txt #打印第一行到最后一行
sed -n '/root/p' test.txt #打印包含root字符串的行
sed -n '/^g/p' test.txt #打印以g开头的行
sed -n '/in$/p' test.txt #打印以in结尾的行
sed -n '/r..t/p' test.txt #打印包含“r..t”字符串的行,两个点表示两个任一字符
sed -n 'oo*p' test.txt #打印包含一个以上o的行,星号表示大于等于零个前字符
sed -n -e '1p' -e '/games/p' test.txt #打印第一行和包含111的行sed '1d' test.txt #删除第一行
sed '1,3d' test.txt #删除第一到三行
sed '/oot/d' test.txt #删除包含oot字符的行
sed '1,2s/ot/to/g' test.txt #第一到第二行的ot替换为to,与vim中替换命令类似
sed 's#ot#to#g' test.txt #与上一条命令类似,可以将斜杠换为井号,也可以换为@
sed 's/[0-9]//g' test.txt #删除数字
sed 's/[a-zA-Z]//g' test.txt #删除字母
sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt #圆括号为一个整体,替换三个括号内容的顺序,123代表三个括号
sed 's/^.*$/123&/' test.txt #在行前面加上123。也可以像上面用\1来表示前面的整体,不过要用圆括号扩起来
sed -i 's/ot/to/g' test.txt #ot替换为to,并修改文本。没有-i的话以上所有操作只是标准输出的屏幕,不会修改文本

linux 命令:tr 详解

tr 命令的功能是转换或删除字符。

用法:tr [OPTION]… SET1 [SET2]

选项:

-c, -C, --complement        用 SET2 替换 SET1 中没有包括的字符
-d, --delete                删除 SET1 中的字符
-s, --squeeze-repeats       压缩 SET1 中重复的字符
-t, --truncate-set1         将 SET1 截成与 SET2 一样的长度
--help                      帮助文档
--version                   版本信息

使用示例:

  1. 不加选项:
[root@server dir]# echo "Merry Christmas" | tr a-z A-Z
MERRY CHRISTMAS
[root@server dir]# echo "Merry Christmas" | tr [:lower:] [:upper:]
MERRY CHRISTMAS
[root@server dir]# echo "Merry Christmas" | tr r a
Meaay Chaistmas
  1. -s 选项:
[root@server dir]# echo "aaabbbeeecccddd" | tr -s abcde
abecd
  1. -d 选项:
[root@server dir]# echo "Merry Christmas" | tr -d r
Mey Chistmas
  1. -t 选项:
[root@server dir]# echo "Merry Christmas" | tr -t a-z A-N
MErry CHrIstMAs
[root@server dir]# echo "Merry Christmas" | tr a-z A-N
MENNN CHNINNMAN

可以看到,在不使用 -t 时,如果 SET2 的长度小于 SET1,SET1 中有但 SET2 中没有的字符,将不会被替换。在使用 -t 时,如果 SET2 的长度小于 SET1,SET1 中有但 SET2 中没有的字符,将被 SET2 中最后一个字符替换。

  1. -c 选项:
[root@server dir]# echo "Merry Christmas" | tr -c a-z "#"
#erry##hristmas#

把标准输入中的不包括在 SET1(a-z)的字符(M、C、空格、换行符)替换为井号(#)。

Linux中系统盘和数据盘的查看

Linux系统盘就像Windows的C盘,在linux中一般有a的参与,可通过df -l来查看
如:

可以看到根路径 / 都是位于系统盘。而/root,/home,/usr就如同c盘下的c:\windows,c:\usr这些目录
如果单独有数据盘,且数据盘没有分区和挂载,使用df -l命令是看不到的
可以使用fdisk -l,可以看到有哪些硬盘
如:


Disk /dev/vda和 Disk /dev/vdb表示有两块盘
/dev/vda - 系统盘(系统自带的盘),有一个分区vda1(通常第一个盘就是系统盘)
/dev/vdb - 数据盘(一般虚拟出来的盘),有两个分区vdb1,vdb2

Linux的readlink与dirname $0和readlink用法以及sed的使用,Linux系统盘和数据盘的查看等整理汇总相关推荐

  1. Linux中系统盘和数据盘的查看

        第一次听到数据盘的时候很蒙, 查了好多资料,自己又整理了一下,希望能帮助有同样困惑的人 系统盘就像Windows的C盘,在linux中一般有a的参与,可通过df -l来查看 如: 可以看到根路 ...

  2. linux compress参数,compress命令_Linux compress 命令用法详解:使用Lempress-Ziv编码压缩数据文件...

    compress命令使用"Lempress-Ziv"编码压缩数据文件.compress是个历史悠久的压缩程序,文件经它压缩后,其名称后面会多出".Z"的扩展名. ...

  3. linux区分系统盘和数据盘命令

    lsblk 执行命令,图中蓝色框里是系统盘,红色框是挂载的数据盘

  4. 初始化Linux数据盘(fdisk)

    亲测可用,若有疑问请私信 操作场景 本文以云服务器的操作系统为"CentOS 7.0 64位"为例,采用fdisk分区工具为数据盘设置分区. MBR支持的磁盘最大容量为2 TB,G ...

  5. Linux 下 lsof 命令的几个高效用法

    Linux 下 lsof 命令的几个高效用法_yg@hunter的博客-CSDN博客lsof命令查看进程打开的文件,文件被哪些进程打开等等,本文列举几个实际例子看下lsof的妙用.https://bl ...

  6. Linux云服务器VPS一键数据盘和系统盘合并磁盘方法

    我们站长是不是会发现有些购买的Linux云服务器配置上写的是40GB磁盘,但是实际上为什么配置WEB环境的时候或者是在使用后才发现只有10GB或者20GB存储,是不是被商家坑了?实际上是因为商家说的4 ...

  7. Linux:阿里云服务器购买数据盘并挂载流程

    1.进入ECS实例详情,找到'创建云盘'按钮 2.进入购买界面并配置 3.确认订单等待自动挂载 4.返回实例,就能看到刚刚够买的数据盘 5.查看已挂载数据盘情况     df -lh 6.查看所有数据 ...

  8. 【shell】dirname $0和readlink用法

    转自:shell的dirname $0和readlink用法 获取当前脚本路径 path.sh #!/bin/bash path=$(cd `dirname $0`;pwd) echo $path p ...

  9. linux编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14

    linux编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14的方法对于 我这个小菜菜来讲是非常的复杂的还好有这篇文章,下面一起来看看吧. 一.使用系统镜像文件配置本地yum源 1 ...

最新文章

  1. Oracle Study之--Oracle等待事件(2)
  2. boost::signals2模块实现为类定义后构造函数的示例
  3. Kindle使用技巧
  4. 谷歌推出了其首款触屏笔记本电脑
  5. python向量化和c哪个快_在python中向量化6 for循环累积和
  6. db2 空值转换函数_Hive常见函数的使用
  7. 密码学替代技术_替代技术及其类型| 密码学
  8. 面试题:请介绍⼀下 JMM(Java 内存模型)
  9. UTF-16 -- 顶级程序员也会忽略的系统编码问题,JDK 错了十年!
  10. hdu 1712 ACboy needs your help
  11. java 不写this_还没弄明白Java中的this关键字吗,那来看这篇就够了!
  12. MySQL——优化ORDER BY语句
  13. Tensor Flow V2:将Tensor Flow H5模型文件转换为tflite
  14. selenium webdriver——鼠标事件
  15. 270 扩展固态硬盘_希捷硬盘白送3年原厂数据恢复!成功率高达90
  16. PHP实现限制域名从而保护源代码不被拷贝
  17. 百亿独角兽爱学习教育集团:如何在半个月内搭建一套完整的课堂互动系统?...
  18. 随手记-----cookie
  19. SQL Server无法安装问题
  20. 《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜

热门文章

  1. “移动仓库”:跨境电商的未来趋势
  2. matlab利用shp文件提取单个或者任意个中国各个省份的降雨
  3. python图像识别学习
  4. 不同平面直角坐标系之间的坐标转换公式
  5. 每周推荐短视频:GDP 增速放缓,对于企业意味着什么?
  6. 本文为大家解释,Dapr是比SpringCloud和Istio更优雅的微服务框架的原因是什么
  7. 我爱IT(52IT)
  8. HIT 计算机系统大作业 Hello程序人生P2P
  9. C语言中的算数操作符------除号操作符
  10. 【Android】知识点汇总,坚持原创ing