GNU sed

Linux工具

若如初见. 提交于 2020-10-28 13:18:03
Linux工具 Linux下还是有很多超棒的开发工具的。 在Linux日常使用中,最常用的命令自然是sudo, ls, cp, mv, cat等,但作为后台开发者,上述命令远远不够。从我的理解来看,合格的C/C++开发者至少需要从开发及调试工具、文件处理、性能分析、网络工具四个方面针对性使用一些开发工具。这里我罗列了一些,大部分都是开发中经常需要使用的命令,有些功能比较简单的命令我会给出一些基本用法,有些本身自带体系(比如vim, gdb等)的命令只能附上链接了。 开发及调试工具介绍了从“编辑 -> 编译 -> 分析目标文件 -> 追踪调用过程”的全套命令,文件处理部分介绍了查找、统计、替换等基本文本操作命令,性能分析介绍了查看进程信息、CPU负载、I/O负载、内存使用情况等基本命令,网络工具介绍了可以查看“链路层 -> 网络层 -> 传输层 -> 应用层”信息的工具。除此以外,其他命令中也列出了开发者经常会用到的一些命令,基本可以满足日常开发需要。 目录 Chapter 1 Chapter 2 Chapter 3 Chapter 4 Chapter 5 开发及调试 文件处理 性能分析 网络工具 其他 开发及调试 编辑器:vim 编译器:gcc/g++ 调试工具:gdb 查看依赖库:ldd 二进制文件分析:objdump ELF文件格式分析:readelf 跟踪进程中系统调用

ORA-27157 ORA-27300 ORA-27301

二次信任 提交于 2020-10-28 09:13:27
目录: 问题现象 原因分析 解决方案 问题现象:   收到同事反馈,数据库无法连接。于是登录服务器发现,数据库莫名挂掉。实例crash,日志中记录截取一段如下: Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/ orcl_ckpt_9364.trc: ORA - 27157 : OS post/ wait facility removed ORA - 27300 : OS system dependent operation:semop failed with status: 43 ORA - 27301 : OS failure message: Identifier removed ORA - 27302 : failure occurred at: sskgpwwait1 原因分析:   在rhel7.2中,systemd-logind服务引入了一个新特性:   在一个user完全退出OS后会remove掉所有的IPC对象。   该特性由/etc/systemd/logind.conf参数文件中RemoveIPC选项来控制。RemoveIPC的默认值是yes。详细请看man logind.conf(5)。   因此,当最后一个oracle或者grid用户退出时

Linux常用命令

限于喜欢 提交于 2020-10-27 08:37:03
参考 linw7的github 《鸟哥的Linux私房菜》 一.文件管理 1.文件查找:find 2.文件拷贝:cp 3.打包解包:tar 二.文本处理 1.(显示行号)查看文件:nl 2.文本查找:grep 3.排序:sort 4.转换:tr 5.切分文本:cut 6.拼接文本:paste 7.统计:wc 8.数据处理:sed 9.数据处理:awk 三.性能分析 1.进程查询:ps 2.进程监控:top 3.打开文件查询:lsof 4.内存使用量:free 5.shell进程的资源限制:ulimit 四.网络工具 1.网卡配置:ifconfig 2.查看当前网络连接:netstat 3.查看路由表:route 4.检查网络连通性:ping 5.转发路径:traceroute 6.网络Debug分析:nc 7.命令行抓包:tcpdump 8.域名解析工具:dig 9.网络请求:curl 五.开发及调试 1.编辑器:vim 2.编译器:gcc和g++ 3.调试工具:gdb 4.查看依赖库:ldd 5.二进制文件分析:objdump 6.ELF文件格式分析:readelf 7.跟踪进程中系统调用:strace 8.跟踪进程栈:pstack 9.进程内存映射:pmap 六.其他 1.终止进程:kill 2.修改文件权限:chmod 3.创建链接:ln 4.显示文件尾:tail 5

第五周作业

北慕城南 提交于 2020-10-26 05:12:13
1、查找/etc目录下大于1M且类型为普通文件的所有文件 find /etc/ -type f -size +1M 2、打包/etc目录下面所有conf结尾的文件,压缩包名称为当天的时间 find /etc/ -name " .conf" | xargs tar -cpvf date +%F .tar && cp -a date +%F .tar /usr/local/src/ 查看包的条目 ls /usr/local/src 3、利用sed取出ifconfig命令中本机的IPv4地址 在cento6和7上适用 ifconfig ens33 |sed -n '2p' |sed -r 's/(^[^0-9]+)([0-9.]+)( . $)/\2/' ifconfig ens33 |sed -nr '2s/(^[^0-9]+)([0-9.]+)( . $)/\2/p' 4、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 sed -nr 's/^#[[:space:]]+(. )/\1/p' /etc/fstab sed -nr 's/^#[[:blank:]]+(. )/\1/p' /etc/fstab 5、处理/etc/fstab路径,使用sed命令取出其目录名和基名 echo /etc/fstab | sed -nr 's@^(. )/

如何从Bash变量中修剪空格?

不羁的心 提交于 2020-10-25 06:47:31
问题: I have a shell script with this code: 我有一个带有以下代码的shell脚本: var=`hg st -R "$path"` if [ -n "$var" ]; then echo $var fi But the conditional code always executes, because hg st always prints at least one newline character. 但是条件代码总是执行,因为 hg st 总是打印至少一个换行符。 Is there a simple way to strip whitespace from $var (like trim() in PHP )? 有没有一种简单的方法可以从 $var 删除空格(如 PHP中的 trim() )? or 要么 Is there a standard way of dealing with this issue? 有没有解决此问题的标准方法? I could use sed or AWK , but I'd like to think there is a more elegant solution to this problem. 我可以使用 sed 或 AWK ,但是我想认为有一个更优雅的解决方案。 解决方案: 参考一: https:/

最新版CentOS8系统安装和基本配置

心已入冬 提交于 2020-10-25 00:54:00
一、Centos8新版简介 Redhat公司在2019年5月推出了rhel8,年底推出了centos8,紧接着也会把相关的技术认证完全转换为新平台。 阿里云、华为云目前也已推出centos8的公共镜像,所以有必要熟悉一下新平台的特性也使用。 二、redhat新版系统特性 更新了内核版本,7版为3.10,而8版为4.18 软件安装和管理工具默认采用dnf而不是yum 系统安装的默认组件包含gui,而不是最小化 包含多个版本的数据库、编译器,如httpd,nginx,mysql,redis,python等,系统镜像也达到了7G 支持更新的虚拟化技术和容器技术 三、centos8系统安装 1、从阿里云下载到centos8系统镜像 http://mirrors.aliyun.com/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso 2、这里使用vmware 12来创建虚拟机 这里选择刚才下载的centos8镜像文件 网络改成桥接,可以和物理机在相同网络,创建完成后开启虚拟机 3、系统安装 这里和7版系统类似,选择安装CentOS Linux8 选择语言,我这里选择默认的英文 配置网络 网卡的默认名称和7版一样,还是ens33,这里配置也和7一样,打开即可,或者也可以点configure手动配置ip地址 手动配置ip

数字加0方法

丶灬走出姿态 提交于 2020-10-23 10:38:49
在有睦情况下,我们需要在数字前添加0,以用于它的特殊格式的使用 以下是在网上搜集总结出的数字前加0方法 法一:使用{} [r oot@localhost script]# echo 00{1..3} 001 002 003 法二:seq -w 法 [root@localhost script]# seq -w 100|sed -n '1,3p' # -w以相同宽度打印,不够加0,-n只显示匹配的行,p打针匹配行,两者组合使用 001 002 003 法三: seq -f 法 [root@localhost script]# seq -f %03g 3 以3位同行宽度不足以0补充,输出1到3 001 002 003 法四:使用for循环 [root@localhost ~]# for ((i=1;i<=3;i++));do echo 00$i;done 001 002 003 法五:使用sed替换 [root@localhost ~]# seq 101 103 | sed 's/^1/0/g' 001 002 003 法六:for加printf指定输出格式 [root@localhost ~]# for ((i=1;i<=3;i=i+1));do printf "%03d\n" $i;done 001 002 003 法七: sed命令中&命令用法,增加或修改一个字符串 [root

使用shell脚本将h文件里面的某个宏定义对应的常量保存到指定文件

天涯浪子 提交于 2020-10-19 16:57:06
由于对shell脚本没有去深究,只是临时遇到了这个需求,才全网的查找。解决这个需求的方法应该有好多,但目前,我实际使用验证了如下方法可行,后续抽空学习下shell脚本。言归正传,需求如下: 1、需求: 我有个头文件,内容大概如下: /*******def.h******/ ... #define A_B_CC "20201111am" ... #define A_B_CC 的值会变化,当前是20201111am,下次可能变成20211111pp 如何使用shell脚本来获取A_B_CC对应的常量值(这里目前是20201111am) 并将其保存到一个txt文件 2、解决方法: 方法1: cat def.h | grep "#define A_B_CC" | cut -d '"' -f 2 >Version.txt 这条语句分三小句,我想,第1/2两句应该大家都懂,解释下第3句:cut -d ‘"’ -f 2 , -d和'"'一起把管道输入的一行字符串进行了域的分隔,每一个分隔符(在这里是个双引号“"”)前面的字符串被称为一个域,若有n个分隔符,这个域的编号则从1开始到n+1,第1个分隔符前面的字符串为第1个域。这个域对应在该命令行则是-f后面的数字2,所以该命令`cut -d '"' -f 2表达的意思是输出第二个分隔符“"”之前的域。 方法2:据说可以使用sed,awk等,我不会

Linux常用基础命令总结

て烟熏妆下的殇ゞ 提交于 2020-10-14 05:57:40
近期自己学习了一下Linux,写这篇博客以便于对自己的一个总结,记录自己的学习情况,奥利给! 想对Linux熟练掌握,就必须学会它的操作命令,虽然可能会花费一些时间,不过从长远的角度来说,这的确是一件事半功倍的事情,它会让我们更了解Linux,更灵活地去使用Linux。 个人感觉刚开始学习Linux一定要注意,学习命令并不意味着要掌握全部命令和每个命令的全部选项,这并不是必要的,先熟练掌握最常用的命令就好了,之后的一些可以通过man或者help读源文档查看使用方法。 1. 文件和目录 cd :用于工作路径的切换,这里我们需要了解一下绝对路径和相对路径 绝对路径:从“/”开始的路径称为绝对路径 相对路径:如果路径不是从根写起,则是相对路径 特殊目录的表示方法及含义 特殊目录的表示方法 含义 . 当前目录 . . 上级目录 ~ 当前登录用户的宿主目录 ~用户名 进入~后用户的宿主目录 注 :cd命令而不加任何参数会马上回到用户的主目录 pwd :显示工作路径 ls :查看目录中的文件 # ls [-选项] 文件名或者目录名 选项 说明 -l 显示出查看内容的详细信息 -a 显示所有文件,包括隐藏文件 -R 显示当前目录下的所有内容,包括子目录内容也一起显示出来 -F 显示目录中的文件 *[0-9]* 显示包含[]内内容的文件名和目录名 mkdir :创建目录 # mkdir 目录

linux面试题

若如初见. 提交于 2020-10-09 07:10:08
1、删除一个目录下的所有文件,但保留一个指定文件 比如环境如下:要保留sos.txt 其他全部删除 通过!取反操作 以上两种方式 grep查找 -v显示没有匹配到的内容 以下两种也可以 脚本中删除文件或目录时, 生产环境 的使用方法一般为: find . -type f -name “*.log” -mtime +15 | xargs rm -f 删除当前目录下以 .log 结尾的文件,且修改时间在 15 天以上的 find . -type d -name “*.heihei” -mtime +30 | xargs rm -rf 删除当前目录下以 .heihei 结尾的目录,且修改时间在 30 天以上的 2、已知 /tmp 目录下存在了 no1.txt 文件,如何执行命令才能把 /test/no1.txt 拷贝到 /tmp 下覆盖掉 /tmp/test.txt ,而让 Linux 系统不提示是否覆盖( root 权根下) 两种方法 (1)、\cp 作用是使用命令自身的意义 像cp是有命令别名的,实际系统中是cp -i (2)、取消其命令别名 (3)、使用命令的全路径来执行 不过这里的取消命令别名只是当前生效 怎么设置别名,下图 这里也是当前生效 如何全局有效,编辑/etc/profile文件,在最后加上 再重读下文件(#source /etc/profile),配置生效。 而只想