Linux基础学习
文章平均质量分 56
guotianqing
这个作者很懒,什么都没留下…
展开
-
rsync增量同步文件用法实践
rsyncrsync: remote sync,远程同步,用于在本地机器及远程机器之间同步数据。对于本地机器之内,同步数据使用cp即可。对于本地与远程,使用scp即可。但上面两个命令同步数据时一般是无脑覆盖文件,而rsync则不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。怎么判定文件有改动呢?默认是检查文件大小和最后修改时间是否一致,如果一致则认为无变动,不会传输该文件,如果不一致则同步。对于想让两台机器某个目录一致的原创 2022-05-12 19:04:24 · 7594 阅读 · 0 评论 -
shell脚本代码片断:参数个数、当前目录、日期格式
参数个数判断输入的参数个数是否正确:if [ $# != 3 ]; then echo all params size is $# echo "USAGE: $0 param1 param2 param3" exit 1;fi如果未输入参数,使用默认,如果输入了参数,则使用参数:# tradeday默认为当前日期tradeday=$(date +%Y%m%d)# 如果用户输入了参数,则重置tradeday为输入的参数if (($# == 1))then t原创 2022-05-12 12:28:50 · 313 阅读 · 0 评论 -
tar显示压缩进度条
进度条tar处理小文件时,非常快,不需要看进度。但当文件比较大时,耗时较长,这时需要个进度条看一下,以评估剩余时间。Linux下,可以使用pv来显示进度。pvpv用来监视数据通过pipe的进度,能够显示耗时、完成率(进度条)、当前吞吐率、总传输字节等信息。使用方式:在两个程序之间,以合适的参数插入pipeline。pv将会把提供的文件拷贝到标准输出,如果没有指定文件,将拷贝标准输入,这时它的行为和cat一致。如,查看使用nc传输一个文件的速度:pv file | nc -w 1 som原创 2022-04-24 16:35:45 · 8287 阅读 · 0 评论 -
Linux下提高压缩速度——多线程压缩pigz
常用压缩Linux下常用的压缩包括:tar: 如 tar zcvf a.tgz ./azip: 如 zip -qr a.zip ./a如果只在Linux系统上使用,应用最多的是tar,如果涉及到与windows交互,一般用zip。但有一个问题,就是它们在压缩时,最多占用一个cpu到100%,是单线程的,当要处理的文件比较大时,将非常耗时。这里以使用tar为例,来介绍一下多线程压缩工具pigz。使用多线程pigz通过查看tar的man page,可以看到Compression opti原创 2022-04-24 14:49:35 · 13183 阅读 · 0 评论 -
执行shell脚本报错:Syntax error “(” unexpected
现象在centos下可以运行的脚本,拷贝到ubuntu下直接执行报错:./restart.sh: 5: ./restart.sh: Syntax error: "(" unexpected检查脚本没有问题,使用命令调试执行脚本时也没有问题:bash -x restart.sh奇怪了。排查使用调试执行没有问题,就证明脚本本身没有问题,那就是环境可能有问题。也就是说,直接执行脚本时,不是使用bash执行的。经查,在ubuntu上,sh是/bin/dash的软链接,好吧,直接执行脚本是d原创 2022-01-29 17:43:38 · 13431 阅读 · 0 评论 -
Linux查看磁盘性能
查看磁盘类型当前磁盘中速度最快的应该是SSD了。查看命令:> yum install lsscsi> lsscsi # 列出 SCSI 设备(或主机)及其属性[0:2:0:0] disk DELL PERC H330 Adp 4.30 /dev/sda [14:0:0:0] cd/dvd HL-DT-ST DVD+-RW GU90N A3C3 /dev/sr0显然,我的电脑上没有SSD,只是普通的磁盘。如果有SSD,第5列会显示S原创 2021-11-01 14:32:37 · 3682 阅读 · 0 评论 -
iftop监控网络流量命令详解
简介最近遇到了一个问题,使用Tcp通信时,数据接收端有较大的时延。使用的是一个发送端,多个接收端的广播模式。加入了时间戳调试,发现send发送后,当数据量较大时,过了好几秒rcv端才接收到。一开始怀疑是客户端处理数据较慢导致的,加入了多线程处理,依然无效。而且观察了rcv端的数据处理线程,cpu并不高。而且send端内存在一直增大,才怀疑是网络堵塞造成的。为了验证这个猜想,需要监控各个网卡的流量,于是这用了这个工具iftop。最后发现,果然是由于网络带宽不足引起的阻塞。这里做一记录。ift原创 2020-11-19 19:32:24 · 13565 阅读 · 0 评论 -
shell脚本常用功能总结
输出脚本详细步骤set -x打印输出及提示用户输入echo -e "I will use 'touch' command to create 3 files."read -p "Please input your filename: " fileuserfilename=${fileuser:-"filename"} # 开始判断有否输入了文件名,如果没有输入,则使用默认的filenamedate1=$(date --date='2 days ago' +%Y%m%d) # 前两天的日期d原创 2020-10-26 20:48:52 · 794 阅读 · 0 评论 -
ubuntu18.04设置开机自动启动脚本
简介ubuntu作为服务器使用时,常常需要在机器重启时能自动启动我们开发的服务。Ubuntu 16.10开始不再使用initd管理系统,改用systemd,包括用systemctl命令来替换了service和chkconfig的功能。systemd 默认读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。不同于以往的版本,ubuntu18.04默认不带/etc/rc.local文件,我们需要通过配置来让rc.local.原创 2020-09-26 16:32:18 · 9009 阅读 · 5 评论 -
ubuntu18.04修改系统默认配置:vim, sudo免密,ufw,date,dpkg
修改默认编译器为wimubuntu18.04的默认编译器为nano,当一个命令,如’sudo visudo’时,就会弹出nano编辑器。对于习惯vim的用户来说,得先来修改它,方法如下:确认系统已经安装了vim,可以直接输出vim测试修改:sudo update-alternatives --config editor,需要sudo权限,否则会失败,显示如下:选择vim.basic选项,这时是3,回车即可。此时再次打开时已经是vim编辑器关闭sudo每次输入密码在安装软件等需要原创 2020-09-24 08:56:12 · 776 阅读 · 0 评论 -
Linux中pid与tid的异同及top中pid字段含义
简介pid(process identifier),进程id。在整个操作系统中,每个进程的id唯一。tid(thread identifier),线程id。在一个进程中,每个线程的id唯一,不同的进程可能有tid相同的线程。这只是简单地描述,能够应付一般的应用场景,比如只是简单地区别进程和线程。但是当使用htop/top查看所有线程时,PID一列显示的值会让你疑惑不解。因为它对线程依然显示的是pid。因为对于pid和tid的真实含意,从用户视角(user view)和从内核视角(kernel原创 2020-09-04 18:52:51 · 5394 阅读 · 0 评论 -
Linux进程崩溃原调试
简介每个开发服务主程的同学可能都有进程崩溃的经历,这时候就要了解点Linux下进程调试方法了。以下信息都有助于调试:良好的程序编码,有日志记录崩溃时产生了core文件通过dmesg查看内核日志信息调试进程崩溃的方法有很多,可以根据具体需求使用。调试一般的调试流程,先从容易获取的信息入手,直到找到原因为止。进程日志在程序开发中,肯定会记录一些日志,而日志记录的好坏可以直接影响调试,进而影响程序的发布进程。目前有很多的开源日志库,选择合适的即可。如log4cplus等。日志原创 2020-09-04 18:50:06 · 2674 阅读 · 0 评论 -
Linux内核日志查看之dmesg命令简介
简介dmesg is used to examine or control the kernel ring buffer. The default action is to display all messages from the kernel ring buffer.Linux内核启动时会加载硬件驱动,在有新硬件时也会加载驱动,如果想要查看内核的活动,可以使用dmesg命令。Linux内核日志存储在一个ring-buffer中,它的大小是固定的,当队列满时,新的消息会覆盖掉最旧的消息。实际原创 2020-09-04 12:03:47 · 38916 阅读 · 2 评论 -
crontab未正常运行的原因及解析
简述crontab的基本用法请参考Linux下定时任务crontab简介与使用。crontab设置好后,脚本并没有执行?crontab的执行情况与在终端直接运行脚本不一致?使用crontab的同学可能会经常遇到这些问题,这天就以笔者经验为例来探讨一下crontab未正常运行的原因。原因crontab未正常运行的原因有多种,这里介绍一下调试方法。一般情况下,按以下步骤调试即可找到原因。确认脚本无误脚本具有当前用户的可执行权限脚本在终端运行正常脚本使用了诸如#!/bin/sh的良原创 2020-08-31 18:57:02 · 3150 阅读 · 0 评论 -
正则表达式之sed/awk简介
正则表达式在文字处理的过程中,正则表达式极其有用。它提供了一种处理文字串的一种规则,结合特殊的字符,以行为单位处理字串,很容易进行搜寻、删除、替换等操作。对正则支持的工具也很多,比较常用的有vim、grep、sed、awk等。注意正则与shell通配符的区别,同样的字符含义大相径庭。在不支持正则的命令下,也可以结合支持正则的工具共同使用。如下的指令获取所有以a开头的文件:ls | grep -n '^a.*'基础正则表达式符号汇总(摘自鸟哥):sedsed是一个管线命令,可以对数据原创 2020-07-24 18:47:56 · 311 阅读 · 0 评论 -
Linux开放文件读写权限
作为root管理员,经常需要增删用户,设置目录的访问权限等。用户管理Linux中账号相关信息是记录在/etc/passwd下,密码记录在/etc/shadow下,群组记录在/etc/group下。新增:useradd -g init_group -G second_group -s shell username:useradd vbird新建用户vbird,所有参数为默认,创建home文件夹,默认权限为700useradd -g users vbird,为用户vbird指定初始群组为use原创 2020-07-08 18:40:41 · 7430 阅读 · 0 评论 -
Linux程序运行时找不到动态库的解决方法
简介编译时依赖库,如果编译通过了,说明库是存在的。但在运行时,也会出现找不到库的情况,这时程序是无法启动的:./a.out: error while loading shared libraries: libboost_system.so.1.64.0: cannot open shared object file: No such file or directory有两种方法可以解决这个问题。LD_LIBRARY_PATH环境变量LD_LIBRARY_PATH环境变量用于在程序加载运行期间原创 2020-06-17 11:41:52 · 14562 阅读 · 1 评论 -
Linux命令行常用快捷键
本文记录一下在使用xshell/secureCTR登录Linux服务器中常用的快捷键,能提高一下工作效率。指令类tab自动补全。如果使用zsh,它的tab能忽略大小写自动匹配向上箭头历史命令。如果使用zsh,它能执行部分配置,比如历史命令里有scp…,当你再次输入scp,再按向上的箭头时,能直接匹配到之前的scp命令编辑命令行在命令行输入指令时,需要移动光标、删除、清除、部分删除等。ctrl a: 定位光标到命令行首ctrl e: 定位光标到命令行尾c原创 2020-06-16 08:47:02 · 438 阅读 · 1 评论 -
Vim查找、替换与删除常用命令
查找与替换在文档中向后查找单词:/pattern,按n查找下一处,按N查找上一处在文档中向前查找单词:?pattern,按n查找下一处(向前),按N查找上一处高亮单词:gd文档中替换::%s/pattern/new_pattern/gc,%表示全部文档,g表示全局替换,c表示替换前需要确认,所有的pattern会被替换为new_pattern:s/pattern/new_pattern/:替换当前行的第一个pattern:s/pattern/new_pattern/g:替换当前行的所有pa原创 2020-06-12 19:31:48 · 7586 阅读 · 1 评论 -
Linux CMake更新及安装
安装最简单的安装方式:yum install -y cmakeok,但这种自动安装的方式,cmake的版本较低。在我的测试机上,版本为:因为cmake更新较多,CMakefile文件一般会指定cmake版本,如果安装的版本较低,会导致许多cmake不能编译。升级及源码安装如果已经安装了cmake,需要先卸载旧版本:yum remove cmake -y && rm -f /usr/bin/cmake。按以下步骤进行源码安装:下载新版本:wget -c [url]。外原创 2020-05-26 10:34:33 · 3233 阅读 · 2 评论 -
Linux前后台程序的切换与控制
本文主要介绍在Linux下运行程序,及在前台和后台之间切换与控制的方法。前台运行程序通常的运行方法是:./a.out,表示运行当前目录下的可执行程序,并运行在前台。运行在前台指的是当前终端窗口会暂停接受其他指令,而处于a.out的运行状态。当关闭当前终端窗口时,程序也会被关闭。注意,不管运行在前台还是后台的程序,如果有输出到终端的程序指令,如cout, cerr等,都会在运行的终端上输出...原创 2020-03-13 10:16:25 · 675 阅读 · 0 评论 -
Linux ps命令及进程状态简介
查看进程状态在Linux常用以下两个命令查看进程状态:ps -efps aux这两个命令都可以列出所有进程及其状态,具体各命令的含义可以参考man手册。下文以使用ps aux为例,会列出 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND各列。本文主要探讨列出的信息中的STAT列,它表示的是当前进程的状态。进程状态进程...原创 2020-02-27 20:33:11 · 1565 阅读 · 0 评论 -
Linux下top使用及各参数简介
toptop命令能够显示出各项与系统和进程相关的信息,在运维、调试以及问题定位方面经常使用。语法:top -hv | -abcHimMsS -d delay -n iterations -p pid [, pid ...]可以省略‘-’。这里仅介绍常用选项,更详细的信息可以参考manpage页面。其中,h: 显示帮助信息。d:时延,表示top命令刷新页面结果的时间间隔,单位为s。...原创 2020-03-01 17:37:19 · 1897 阅读 · 0 评论 -
Linux便捷安装boost
简介boost库基本上必不可少的c++库,它提供了大量经过验证的程序例程,能够直接用于生产项目。但它的庞大的何种也让人望而生畏,不过还好,只需安装一次,就可以充分享受便捷的果实。版本boost的官方网站:https://www.boost.org,可以查看最新版本及丰富的例程。目前最新版本为1.72.0。如果已经安装,可以通过以下方式查看版本信息:dpkg -S /usr/inc...原创 2020-02-23 10:39:19 · 1731 阅读 · 1 评论 -
查看Linux系统内核、发行版、cpu、磁盘、内存、网络、端口使用信息
简介在系统运维或调试时,经常需要查看系统信息,如发行版、内核版本、内存、磁盘容量等信息。一般而言,所有的信息基本上都能够通过系统目录/proc获得,同时也有对应的便于记忆的命令来查看,其实用的多了基本就记住了。这些信息的获取对调试程序有一定帮助,本文作一小结。内核版本查看Linux内核版本及架构,使用:uname -a如下:% uname -aLinux y-srv 4.4....原创 2020-02-21 16:20:08 · 624 阅读 · 0 评论 -
Linux下定时任务crontab简介与使用
功能crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程。crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux下的任务调度分为两类,系统任务调度和用户任务调度。系统任务调度系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在...原创 2019-07-02 16:30:50 · 580 阅读 · 0 评论 -
linux下动态库soname简介
linux动态库Linux 支持两种类型的库,每一种库都有各自的优缺点。静态库包含在编译时静态绑定到一个程序的函数。动态库则不同,它是在加载应用程序时被加载的,而且它与应用程序是在运行时绑定的。静态库较适宜于较小的应用程序,因为它们只需要最小限度的函数。而对于需要多个库的应用程序来说,则适合使用共享库,因为它们可以减少应用程序对内存(包括运行时中的磁盘占用和内存占用)的占用。这是因为多...原创 2019-06-30 12:17:26 · 7829 阅读 · 0 评论 -
linux中的网络命名空间的使用
背景项目中使用了网络命名空间,用来隔离不同空间中的应用。命名空间的使用,类似虚拟化技术,在同一台物理机上,创建的多个命名空间相互独立,各个空间的进程独立运行,互不干扰。在此作一总结,学习加深理解。linux命名空间命名空间(Linux namespace)是linux内核针对实现容器虚拟化映入的一个特性。我们创建的每个容器都有自己的命名空间,运行在其中的应用都像是在独立...原创 2018-09-03 22:29:24 · 13053 阅读 · 0 评论 -
Windows与Linux互传文件的几种方式
概述Win系统之间互传文件的方式非常多,也比较简单,如通过系统的共享文件夹、飞Q、QQ、微信等,但Linux系统对这些应用的支持不是很好。在工作中,经常会混合使用Windows与Linux系统。一般情况下,开发用的pc机是Win系统的,而服务器是Linux。在这种情况下,经常是本地Win系统通过xshell或者SecureCRT通过ssh远程登录到Linux服务器进行开发,如果需要把本地文...原创 2019-06-16 16:17:08 · 62601 阅读 · 1 评论 -
Scons入门简介
Scons是什么make在Linux系统上做过c/c++开发的同学们都知道一个项目工程管理工具:make和Makefile。make 这个工具自上个世纪 70 年代 Stuart Feldman 在贝尔实验室开发出以来,就一直是类 UNIX 程序员的最爱之一。通过检查文件的修改时间,make 工具可以知道编译目标文件所要依赖的其他文件。在复杂的项目中,如果只有少数几个文件修改过,make...原创 2019-06-14 20:11:12 · 45833 阅读 · 2 评论 -
linux线程互斥量pthread_mutex_t使用简介
为什么使用线程锁在多线程应用程序中,当多个线程共享相同的内存时,如同时访问一个变量时,需要确保每个线程看到一致的数据视图,即保证所有线程对数据的修改是一致的。如下两种情况不存在不一致的问题:每个线程使用的变量都是其他线程不会读取和修改的变量是只读的当一个线程在修改变量的值时,其他线程在读取这个变量时可能会得到一个不一致的值。一个典型的例子是,在一个多线程程序中,两个及以上...原创 2018-06-03 20:30:42 · 82742 阅读 · 9 评论 -
linux下软件包的安装与卸载
rpm包 rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。这种软件包类似于Windows下的exe安装程序,各种文件已经编译完成并打包,各个文件已经指定到文...原创 2018-05-13 09:04:48 · 388 阅读 · 0 评论 -
linux文档压缩/解压缩方式总结
tar打包tar 打包:tar cvf filename.tar dirname 解包:tar xvf filename.tar (注意:tar是打包,不是压缩!)gz压缩gz 压缩:gzip filename 解压:gunzip filename/gzip -d filenametar.gz/tgz 压缩:tar zcvf filename.tar.gz fi...原创 2018-05-12 18:20:12 · 234 阅读 · 0 评论 -
使用malloc测试堆的最大申请数量
一、背景最近读《程序员的自我修养——链接、装载和库》(俞甲子等著)一书时,看到书中一个很有意思的例子:堆的最大申请数量(原书P168,6.4.3),原来从来没有考虑过这个问题,在此处记录学习一下。二、问题引入Linux下虚拟地址空间分配给进程的是3GB,Windows默认是2GB(操作系统为32位),然而程序真正能够使用到的有多少则要根据机器而异了。我们在编程的时候经常会使用到ma...原创 2018-03-11 21:21:42 · 4205 阅读 · 3 评论 -
数组分配内存过大导致SIGSEGV信号(段错误)
一、背景今天codding的时候,发现一个段错误。-> % ./a.out 9000000the size is: 0x895440[2] 10558 segmentation fault (core dumped) ./a.out 9000000打印跟了一下程序,段错误发生在定义数组的时候,感觉程序没毛病,就使用gdb跟了一下,效果如下:(gdb) r ...原创 2018-03-16 20:46:06 · 28096 阅读 · 1 评论 -
netlink使用简介
一、什么是netlinkNetlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。在Linux 内核中,使用netlink 进行应用与内核通信的应用有很多,如路由 daemon(NETLINK_ROUTE)用户态 socket 协议(NETLINK_USERSOCK)防火墙(NETLINK_FIREWALL)原创 2018-01-28 17:14:06 · 2895 阅读 · 0 评论 -
sqlite及sqlite odbc driver使用简介
简介SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。SQLite是一个进程内的库,它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。原创 2018-02-04 14:53:09 · 27234 阅读 · 1 评论 -
双机热备系统的方案与软件浅析
一、概述双机热备指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备。双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同业务分别在原创 2017-12-17 20:21:49 · 19506 阅读 · 1 评论 -
Linux使用unixODBC连接到Oracle数据库
一、概述ODBC概述ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问DBMS(Database Management System)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语原创 2017-12-24 19:27:39 · 6534 阅读 · 3 评论 -
内核转储-coredump简介
背景在liunx下c语言开发程序,最近遇到程序崩溃的现象,由于现场看不到任何崩溃的信息,很难定位问题。此时,内核转储(coredump)就派上用场了。通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等,在设置妥当的情况下,该coredump文件在程序出错时自动生成。coredump文件简介Coredump文件,是Unix/Linux操作系统的一种机制,对于线上服务而原创 2017-12-09 17:55:26 · 4300 阅读 · 0 评论