linux_gdb与shell命令
Shell命令大全
Shell命令⼤全⼀、Linux下常⽤命令:⽂件与⽬录操作basename:从⽂件名中去掉路径和扩展名cd:切换当前⼯作⽬录到指定⽬录chgrp:改变⽂件所属组chmod:改变⽂件的权限chown:改变⽂件的所有者和组cp:复制⽂件或⽬录dd:复制⽂件并转换⽂件内容file:确定⽂件类型find:在指定⽬录下查找⽂件并执⾏指定的操作ln:创建⽂件链接locate/slocate:快速定位⽂件的路径ls/dir/vdir:显⽰⽬录内容mkdir:创建⽬录mv:移动或重命名⽂件pwd:显⽰当前⼯作⽬录rename:重命名⽂件rm:删除⽂件或⽬录rmdir:删除空⽬录touch:修改⽂件的时间属性updatedb:创建或更新slocate数据库whereis:显⽰指令程序、源代码和man⼿册页which:显⽰指令的绝对路径⼆、Linux下常⽤命令:备份与压缩ar:创建、修改归档⽂件和从归档⽂件中提取⽂件arj:.arj⽂件压缩指令bunzip2:压缩bzip2格式的压缩⽂件bzcat:解压缩⽂件到标准输出bzip2:创建.bz2格式的压缩⽂件bzip2recover:修复损坏的.bz2⽂件bzless/bzmore:解压缩.bz2⽂件并分屏显⽰内容compress:压缩数据⽂件cpio:存取归档包中的⽂件dump:⽂件系统备份gunzip:解压缩由gzip压缩的⽂件gzexe:压缩可执⾏程序gzip:GNU的压缩和解压缩⼯具lha:压缩和解压缩指令resotre:还原由dump备份的⽂件或⽂件系统tar:创建备份档案⽂件unarj:解压缩.arj⽂件uncompress:解压缩.Z⽂件unzip:解压缩.zip⽂件zcat:解压缩⽂件并送到标准输出zforce:强制gzip格式的⽂件加上.gz扩展名zip:压缩⽂件zipinfo:显⽰zip压缩⽂件的详细信息znew:将“.Z”⽂件转换成“.gz”⽂件三、Linux下常⽤命令:⽂本处理cat:链接⽂件并显⽰到标准输出cksum:检查和计算⽂件循环冗余校验码cmp:⽐较两个⽂件的差异col:过滤控制字符colrm:从输⼊中过滤掉指定的列comm:⽐较两个有序⽂件的不同csplit:分割⽂件cut:显⽰⽂件中每⾏的指定内容diff3:⽐较3个⽂件的不同diff:⽐较并显⽰两个⽂件的不同diffstat:根据diff指令的结果显⽰统计信息ed:⾏⽂本编辑器emacs:全屏⽂本编辑器ex:⽂本编辑器expand:将Tab转换为空⽩(Space)fmt:最优化⽂本格式fold:设置⽂件显⽰的⾏宽grep/egrep/fgrep:显⽰⽂件中匹配的⾏head:输出⽂件开头部分内容ispell:交互式拼写检查程序jed:⽂本编辑器joe:编辑⽂本⽂件join:合并两个⽂件的相同字段less:分屏查看⽂本⽂件look:显⽰⽂件中以特定字符串开头的⾏more:分屏查看⽂本⽂件od:以数字编码输出⽂件内容paste:合并⽂件的内容pico:⽂本编辑器sed:流⽂件编辑器sort:排序数据⽂件spell:拼写检查split:分割⽂件sum:计算并显⽰⽂件的校验码tac:反序显⽰⽂件内容tail:输出⽂件尾部部分内容tee:将输⼊内容复制到标准输出和指定⽂件tr:转换或删除⽂件中的字符unexpand:将空⽩(Space)转换为Tabuniq:删除⽂件中的重复⾏vi:全屏⽂本编辑器wc:计算⽂件的字节数、单词数和⾏数四、Linux下常⽤命令:shell指令alias:定义命令别名bg:将作业(或任务)放到后台运⾏bind:显⽰或设置键盘配置declare:声明shell变量dirs:显⽰shell⽬录堆栈中的记录echo:打印字符串到标准输出enable:激活与关闭shell内部命令eval:执⾏指定指令并返回结果exec:执⾏给定指令后退出登录exit:退出当前shellexport:设置与显⽰环境变量fc:编辑并执⾏历史命令fg:将后台任务(或作业)切换到前台运⾏hash:显⽰与清除指令时运⾏查询的哈希表history:显⽰与操纵历史命令jobs:显⽰shell的作业信息kill:杀死进程或作业logout:退出登录shellpopd:从shell⽬录堆栈中删除记录pushd:向shell⽬录堆栈中添加记录set:设置shell的执⾏⽅式shopt:设置控制shell⾏为变量的开关值ulimit:设置shell的资源限制umask:设置创建⽂件的权限掩码unalias:取消由alias定义的命令别名unset:删除定义的变量或函数五、Linux下常⽤命令:打印相关指令accept:接受打印请求cancel:取消打印任务disable:停⽌打印机enable:启动打印机lp:打印⽂件lpadmin:配置cups打印机和类lpc:控制打印机lpq:显⽰当前打印队列lpr:打印⽂件lprm:删除当前打印队列中的作业lpstat:显⽰CUPS的状态信息pr:打印前转换⽂本格式reject:拒绝打印请求六、Linux下常⽤命令:其他基础指令bc:实现精确计算的计算器cal:显⽰⽇历clear:清屏指令consoletype:显⽰当前使⽤的终端类型ctrlaltdel:设置热键Ctrl+Alt+Del的功能date:显⽰和设置系统⽇期时间dircolors:设置ls指令显⽰时的颜⾊eject:弹出可移动设备的介质halt:关闭计算机hostid:显⽰当前主机的数字标识hwclock:查询和设置系统硬件时钟info:读取帮助⽂档login:登录系统man:显⽰联机帮助⼿册md5sum:计算并显⽰⽂件的md5摘要信息mesg:设置终端写权限mtools:显⽰mtools软件包的指令mtoolstest:测试并显⽰mtools⼯具包的配置poweroff:关闭计算机并切断电源reboot:重新启动计算机shutdown:关闭计算机sleep:睡眠指定长的时间stat:显⽰⽂件或⽂件系统的状态talk:与其他⽤户交谈wall:向所有终端发送信息whatis:在数据库中查询关键字who:显⽰当前已登录⽤户的信息whoami:显⽰当前⽤户名write:向指定⽤户终端发送信息yes:不断输出指定字符串七、Linux下常⽤命令:⽤户管理chfn:改变⽤户的finger信息chsh:改变⽤户登录时的默认shellfinger:⽤户信息查询程序gpasswd:管理组⽂件/etc/groupgroupadd:创建组groupdel:删除组groupmod:修改组信息groups:显⽰⽤户所属的组grpck:验证组⽂件/etc/group的完整性grpconv:启⽤组的影⼦⼝令⽂件grpunconv:关闭组的影⼦⼝令⽂件logname:显⽰登录⽤户名passwd:设置⽤户密码pwck:验证⽤户⽂件密码⽂件的完整性pwconv:启⽤⽤户的影⼦⼝令⽂件pwunconv:关闭⽤户的影⼦⼝令⽂件su:切换⽤户useradd:创建⽤户userdel:删除⽤户usermod:修改⽤户的配置信息users:显⽰当前登录系统的⽤户名⼋、Linux下常⽤命令:进程管理init:进程初始化控制killall:根据名称结束进程nice:设置进程优先级nohup:以忽略挂起信号⽅式运⾏程序pgrep:基于名字查询并显⽰进程号pidof:查找正在运⾏程序的进程号pkill:向指定的进程发送信号ps:显⽰系统当前的进程状态pstree:⽤树形图显⽰进程的⽗⼦关系renice:调整进程优先级w:显⽰当前登录⽤户的相关信息watch:全屏⽅式显⽰指定命令的输出信息九、Linux下常⽤命令:磁盘与⽂件系统管理badblocks:磁盘坏块检查⼯具blockdev:从命令⾏调⽤块设备的ioctl函数chattr:改变⽂件的第2扩展⽂件系统属性convertquota:转换quota⽂件格式df:报告磁盘剩余空间情况dumpe2fs:显⽰ext2/ext3⽂件系统信息e2fsck:检查ext2/ext3⽂件系统e2image:保存ext2/ext3源数据到⽂件e2label:设置ext2/ext3⽂件系统标签edquota:编辑⽤户的磁盘空间配额fdisk:Linux下的分区⼯具findfs:查找⽂件系统fsck:检查与修复Linux⽂件系统grub:Linux下的引导加载器hdparm:调整硬盘I/O性能lilo:Linux加载器lsattr:显⽰⽂件的ext2⽂件系统属性mkbootdisk:为当前系统创建专门的引导软盘mke2fs:创建第2扩展⽂件系统mkfs:创建各种⽂件系统mkinitrd:创建初始化ram磁盘映像⽂件mkisofs:创建光盘映像⽂件mknod:创建块设备或字符设备⽂件mkswap:创建交换分区⽂件系统mktemp:创建临时⽂件mount:加载⽂件系统parted:磁盘分区管理⼯具quota:显⽰⽤户磁盘配额quotacheck:创建、检查和修复配额⽂件quotaoff:关闭⽂件系统的磁盘配额功能quotaon:打开⽂件系统的磁盘配额功能quotastat:显⽰磁盘配额状态repquota:显⽰⽂件系统磁盘配额信息报表swapoff:关闭交换空间swapon:激活交换空间sync:强制将缓存数据写⼊磁盘tune2fs:调整ext2/ext3⽂件系统的参数umount:卸载已经加载的⽂件系统⼗、Linux下常⽤命令:内核与性能depmod:处理内核可加载模块的依赖关系dmesg:显⽰内核的输出信息free:显⽰内存使⽤情况insmod:加载模块到内核iostat:报告CPU、I/O设备及分区状态ipcs:显⽰进程间通信的状态信息kernelversion:显⽰内核主版本号lsmod:显⽰已加载的模块modinfo:显⽰内核模块信息modprobe:加载内核模块并解决依赖关系mpstat:显⽰进程相关状态信息rmmod:从内核中删除模块sar:收集、显⽰和保存系统活动信息slabtop:实时显⽰内核的slab缓存信息sysctl:运⾏时修改内核参数tload:监视系统平均负载情况top:显⽰和管理系统进程uname:显⽰系统信息uptime:显⽰系统运⾏时间及平均负载vmstat:显⽰虚拟内存的状态⼗⼀、Linux下常⽤命令:X-Window系统startx:初始化X-Window会话xauth:X系统授权许可⽂件管理⼯具xhost:显⽰和配置X服务器的访问权限xinit:X-Window系统初始化程序xlsatoms:显⽰X服务器原⼦数据定义xlsclients:显⽰指定显⽰器上运⾏的X程序xlsfonts:显⽰X服务器使⽤的字体信息xset:设置X系统的⽤户偏爱属性⼗⼆、Linux下常⽤命令:系统安全chroot:以指定根⽬录运⾏指令nmap:⽹络探测⼯具和安全扫描器scp:加密的远程复制⼯具sftp:安全⽂件传输⼯具slogin:加密的远程登录⼯具ssh:加密的远程登录⼯具sudo:以另⼀个⽤户⾝份执⾏指令⼗三、Linux下常⽤命令:编程相关指令awk/gawk:模式扫描与处理语⾔expr:计算表达式的值gcc:GNU的C语⾔编译器gdb:GNU调试器ldd:显⽰共享库依赖make:⼯程编译⼯具nm:显⽰⽬标⽂件的符号表perl:perl语⾔的命令⾏⼯具php:PHP脚本语⾔命令⾏接⼝test:条件测试⼗四、Linux下常⽤命令:其他系统管理与维护指令arch:显⽰当前主机的硬件架构at:按照时间安排任务的执⾏atq:查询待执⾏的任务atrm:删除待执⾏的任务batch:在指定时间运⾏任务chkconfig:设置系统在不同运⾏等级下所执⾏的服务crontab:按照时间设置计划任务last:显⽰以前登录过系统的⽤户相关信息lastb:显⽰登录系统失败的⽤户相关信息logrotate:系统⽇志的轮循⼯具logsave:将命令的输出信息保存到⽇志⽂件logwatch:报告和分析系统⽇志lsusb:显⽰所有的USB设备patch:补丁与更新⽂件rpm:Red Hat软件包管理器runlevel:显⽰当前系统的运⾏等级service:Linux服务管理和控制⼯具telinit:切换当前系统的运⾏等级yum:RPM软件包⾃动化管理⼯具⼗五、Linux下常⽤命令:⽹络配置dnsdomainname:显⽰系统的DNS域名domainname:显⽰和设置主机域名hostname:显⽰或者设置系统主机名ifcfg:配置⽹络接⼝ifconfig:配置⽹络接⼝的⽹络参数ifdown:关闭指定⽹络接⼝ifup:启动指定⽹络接⼝nisdomainname:显⽰和设置主机域名route:显⽰与操纵本机的IP路由表ypdomainname:显⽰和设置主机域名⼗六、Linux下常⽤命令:⽹络测试与应⽤arp:管理本机arp缓冲区arping:向相邻主机发送ARP请求报⽂arpwatch:监听⽹络上的ARP信息dig:域名查询⼯具elinks:纯⽂本⽹页浏览器elm:电⼦邮件客户端程序ftp:⽂件传输协议客户端host:DNS域名查询⼯具ipcalc:IP地址计算器lynx:纯⽂本⽹页浏览器mail:电⼦邮件管理程序ncftp:增强的FTP客户端⼯具netstat:显⽰⽹络状态nslookup:DNS域名查询⼯具pine:电⼦邮件和新闻组处理程序ping:测试到达⽬标主机的⽹络是否通畅rsh:远程shelltelnet:远程登录⼯具tftp:简单⽂件传输协议客户端tracepath:追踪数据经过的路由traceroute:追踪数据包到达⽬的主机经过的路由wget:从指定URL地址下载⽂件⼗七、Linux下常⽤命令:⾼级⽹络指令arptables:管理内核的ARP规则表ip:强⼤的多功能⽹络配置⼯具iptables:IP包过滤与NAT管理⼯具iptables-save:保存内核中iptables的配置iptables-restore:还原iptables的配置信息tcpdump:监听⽹络流量⼗⼋、Linux下常⽤命令:⽹络服务器指令ab:Web服务器性能测试apachectl:Apache HTTP服务器控制接⼝exportfs:管理NFS服务器共享的⽂件系统htdigest:管理⽤于摘要认证的⽤户⽂件htpasswd:管理⽤于基本认证的⽤户⽂件httpd:Apache超⽂本传输协议服务器mailq:显⽰待发送的邮件队列mysql:MySQL服务器的客户端⼯具mysqladmin:MySQL服务器管理⼯具msqldump:MySQL服务器备份⼯具mysqlimport:MySQL数据库导⼊⼯具mysqlshow:显⽰MySQL数据库、表和字段信息nfsstat:显⽰⽹络⽂件系统状态sendmail:电⼦邮件传送代理程序showmount:显⽰NFS服务器上的加载信息smbclient:samba服务器客户端⼯具smbmount:加载samba⽂件系统smbpasswd:改变samba⽤户的密码squid:HTTP代理服务器程序sshd:OpenSSH守护进程。
linux-实验指导手册-常用命令
实验一Linux常用命令(一)1、Shell环境和Shell命令格式如果实验用计算机上Linux以图形方式启动,登录系统后打开终端窗口。
方法:桌面:右键菜单-Terminal(终端);或:主菜单-系统工具-Terminal(终端)。
命令格式:command [-option(s)] [option argument(s)] [command argument(s)]步骤1:使用who命令步骤2:使用date命令步骤3:使用上下健提取历史命令who,执行。
2、文件系统操作命令(1)改变目录命令:cd 目标目录路径步骤1:使用绝对路径依次进入Linux根目录下的所有子目录。
例如:cd /usr/bin步骤2:使用绝对路径依次进入用户目录。
步骤3:使用相对路径进入子目录1)使用绝对路径进入/lib目录2)使用相对路径进入/lib/i868目录3)使用相对路径退回到/lib目录(2)列出并观察目录中的文件步骤1:进入任意目录,使用无参数ls命令列出并观察其中所有文件;步骤2:进入任意目录,使用通配符列出其中部分文件;例如:cd /binls c*步骤3:使用-l选项,列出目录中文件的各种属性,并观察识别这些属性。
步骤4:直接列出子目录中的文件。
例如:ls i868步骤5:仅列出子目录本身(-d)步骤6:使用-F选项,显示文件类型标志。
步骤7:使用-a或-A选项,观察结果有什么变化。
步骤8:综合使用以上选项。
(3)目录的创建与删除步骤1:在用户目录中,使用相对路径创建一个任意名称的目录,如“tmp”。
mkdir tmp步骤2:删除该目录rmdir tmp步骤3:在根目录中,使用绝对路径在用户命令中创建一个子目录。
mkdir ~/tmp步骤4:删除该目录rmdir ~/tmp步骤5:使用-p参数一次创建多级目录。
如:mkdir ~/tmp/dir1步骤6:使用-p参数删除多级目录。
如:cd ~rmdir tmp/dir1(4)文件和目录拷贝命令:cp步骤1:从/usr/include目录中,任选一个文件拷贝到用户目录的tmp子目录中mkdir ~/tmpcp /usr/include/signal.h ~/tmp步骤2:从/usr/include目录中,任选一个文件拷贝到用户目录的tmp子目录中,并改变其文件名。
[精品]linux下编译运行程序命令大全
gcc警告提示功能
当GCC在编译不符合ANSI/ISO C语言标准的源代码时,如果加上了pedantic选项,那么使用了扩展语法的地方将产生相应的警告信息:
# gcc -pedantic illcode.c -o illcode illcode.c: In function `main': illcode.c:9: ISO C89 does not support `long long' illcode.c:8: return type of `main' is not `int'
编译并运行上述代码,会产生一个严重的段错误 (Segmentation fault)如下:
gcc -g crash.c -o crash ./crash Input an integer:10 Segmentation fault
程序调试工具—gdb
使用下表中的命令,可以进行shell中的命令
项目问题二—C程序的编译
Linux应用程序表现为2种特殊类型的文件:可执行文 件和脚本文件。可执行文件是计算机可以直接运行的 程序,相当于Windows的.exe文件。脚本文件是一组 指令的集合,相当于Windows的.bat文件。 在POSIX兼容的系统中,C语言编译器被称为 c89.Linux尽量实现相关标准,c89,cc和gcc这些命 令全都指向系统的C语言编译器,通常是GNU C编译 器,或者称为gcc。
需要注意的是,-pedantic编译选项并不能保证被编译程序与ANSI/ISO C 标准的完全兼容,它仅仅只能用来帮助Linux程序员离这个目标越来越近。 或者换句话说, -pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码,但不是全部,事实上只有ANSI/ISO C语言标准中要求进行 编译器诊断的那些情况,才有可能被GCC发现并提出警告。 除了-pedantic之外,GCC还有一些其它编译选项也能够产生有用的警告 信息。这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能 够使GCC产生尽可能多的警告信息:
Linux常用命令
apt-get update 更新本地数据库
apt-get upgrade 升级软件包
apt-get dist-upgrade 智能升级软件包
apt-get check 检查本地软件依赖关系
apt-get remove 卸载依赖软件
递归展开方式:VAR=var
简单方式:VAR:=var
变量使用格式为:$(VAR)
makefile规则:makefile中一条语句代表一条规则。有普通规则、隐式规则、模式规则。
autotools
*******************************************************************************************************
du 显示文件大小
cat 显示文件内容/连接指定文件
grep 基于行对文件内容进行查找
more 逐屏显示内容
less 浏览文件内容
tail 显示尾部信息
head 显示头部信息
ifconfig [interface] [options] 显示和配置网络设备属性
who:u、g、o
operator:+、-、=
permission:r、w、x、s、l文件加锁
chmod [mod] filename 绝对模式管理用户权限
chown 修改文件拥有者
umask 设置文件默认权限屏蔽码
*****************************************************************************************************
gdb的使用
GDB的使用1:gdb是一个主要用来调试C、C++程序的功能强大的调试器2:gdb调试:如果要使用gdb(arm-linux-gdb)调试,那么在用gcc(arm-linux-gcc)编译源文件时必须在命令最后加上“-g”,使可执行文件包含调试信息调试步骤:首先:输入#gdb 可执行文件名(arm-linux-gdb 可执行文件名)然后会进入gdb命令行:(gdb)命令名gdb包含的命令有:1:查看文件:(gdb)l(list)2:设置断点:(gdb)b(break)行号设置临时断点,到达后被自动删除:(gdb)tbreak 行号或函数名在指定文件的对应行设置断点:(gdb)break filename 行号在内存某一位置处暂停:(gdb)break <0x……>设置条件断点,在循环中使用非常方便:(gdb)break 行号if 条件3:删除断点:(gdb)d(delete)断点号清除对应行的断点:(gdb)clear 要清除断点的行号4:查看断点情况:(gdb)info b(break)可用于查询断点号查看断点或观察点的情况:(gdb)info breakpoints/watchpoints5:运行代码:(gdb)r(run);在r后面加上行号即可从程序中指定行开始运行6: 查看变量:(gdb)p(print)变量名;7:修改变量的值:(gdb)p 变量=要修改的值8:执行一行源程序并进入函数内部:(gdb)s(step)9: 执行一行源程序而不进入函数内部:(gdb)n(next)10: 继续程序运行直到再次遇到断点:(gdb)c(continue)11: 退出gdb:(gdb)q(quit)12:执行其后的shell命令:(gdb)shell13:终止正在调试的程序:(gdb)kill14:让所设断点暂时失效:(gdb)disable 断点编号;如要让多个断点失效可将编号之间用空格隔开让所设断点有效:(gdb)enable 断点编号15:显示被调试程序的各种信息:(gdb)[break/files/cocal/var]16: 不退出gdb就可以重新生成可执行文件:(gdb)make17:显示指定调试命令的帮助(gdb) help [command]18: 查看函数调用:(gdb)where19:在某一循环处观察一个变量的变化情况:(gdb)watch 变量设置一个观察点,当变量被程序读时,程序被暂停:(gdb)awatch 变量或(gdb)watch 变量设置一个观察点,当变量被读出或写入时程序被暂停:(gdb)rwatch 变量GDB中数据相关命令:1:显示表达式的值:(gdb)display 表达式;使用了该命令后,每当程序运行到断点处都会显示表达式的值2:显示当前所有要显示值的表达式的有关情况:(gdb)info display3:删除一个要显示的表达式:(gdb)delete display 编号;调用这个命令删除一个表达式后,被删除的表达式将不被显示4:使一个要显示的表达式暂时无效:(gdb)disable display 编号5:使一个要显示的表达式有效:(gdb)enable display 编号6:结束某个表达式值的显示:(gdb)undisplay display 编号7:显示某个表达式的数据类型:(gdb)whatis 变量8:打印变量或表达式的值:(gdb)p(print) 变量或表达式9:改变程序中一个变量的值:(gdb)set 变量=变量值GDB调试运行环境相关命令:1:设置运行参数:(gdb)set args2: 参看运行参数:(gdb)show args3: 切换工作目录:(gdb)cd 工作目录4:一直运行到函数返回:(gdb)Finish5:运行到函数某一行:(gdb)until 行数6:改变程序流程,直接结束当前函数,并将指定值返回:(gdb)Return <返回值>7:在当前位置执行所要运行的函数:(gdb)call 函数堆栈相关命令:1:打印栈帧指针,也可以再该命令后加上要打印的栈帧指针的个数:(gdb)backtrace/bt 2:打印栈帧:(gdb)frame3:查看寄存器使用情况:(gdb)info reg4:查看堆栈情况:(gdb)info stack5:跳到上一层函数:(gdb)up6:跳到下一层函数:(gdb)down注意:在n行设置了断点,则程序会运行到第n-2行,n-1行并没有运行3:使用arm-linux-gdb实现交叉调试:Arm-linux-gdb实现远程交叉调试,通过gdb主机与目标系统上的gdb代理之间的互相协作来进行的,它们之间的通信遵循“gdb远程串行协议”,gdb交叉调试是在gdb调试器与调试代理gdbserver或KGDB之间进行的。
Linux中执行shell脚本命令的4种方法总结
Linux中执⾏shell脚本命令的4种⽅法总结bash shell 脚本的⽅法有多种,现在作个⼩结。
假设我们编写好的shell脚本的⽂件名为hello.sh,⽂件位置在/data/shell⽬录中并已有执⾏权限。
⽅法⼀:切换到shell脚本所在的⽬录(此时,称为⼯作⽬录)执⾏shell脚本:复制代码代码如下:cd /data/shell./hello.sh./的意思是说在当前的⼯作⽬录下执⾏hello.sh。
如果不加上./,bash可能会响应找到不到hello.sh的错误信息。
因为⽬前的⼯作⽬录(/data/shell)可能不在执⾏程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。
查看PATH的内容可⽤ echo $PASH 命令。
现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执⾏。
⽅法⼆:以绝对路径的⽅式去执⾏bash shell脚本:复制代码代码如下:/data/shell/hello.sh⽅法三:直接使⽤bash 或sh 来执⾏bash shell脚本:复制代码代码如下:cd /data/shellbash hello.sh或复制代码代码如下:cd /data/shellsh hello.sh注意,若是以⽅法三的⽅式来执⾏,那么,可以不必事先设定shell的执⾏权限,甚⾄都不⽤写shell⽂件中的第⼀⾏(指定bash路径)。
因为⽅法三是将hello.sh作为参数传给sh(bash)命令来执⾏的。
这时不是hello.sh⾃⼰来执⾏,⽽是被⼈家调⽤执⾏,所以不要执⾏权限。
那么不⽤指定bash路径⾃然也好理解了啊,呵呵……。
⽅法四:在当前的shell环境中执⾏bash shell脚本:复制代码代码如下:cd /data/shell. hello.sh或复制代码代码如下:cd /data/shellsource hello.sh前三种⽅法执⾏shell脚本时都是在当前shell(称为⽗shell)开启⼀个⼦shell环境,此shell脚本就在这个⼦shell环境中执⾏。
Linux13:shell脚本基本命令
Linux13:shell脚本基本命令shell脚本基本命令输出命令echo输出命令echo,基本模式就是echo [选项] [输出内容]输出内容如果包含空格,则必须将内容⽤双引号括起来。
选项-e可以使输出语句⽀持反斜线转义。
加⼊退格后就不会显⽰退格符左边的⼀个字符。
ascii码表中有对应的⼋进制和⼗六进制表⽰法,所以可以表⽰对应的字符。
显⽰环境变量的值:echo ${PATH}或echo $PATH,如果⼀个变量没有被设定,那么就什么都不返回。
颜⾊输出如将abcd⽤红⾊打印:echo -e "\e[1;31m abcd \e[0m"其中\e[1的意思是开启颜⾊输出,⽽\e[0m是结束颜⾊输出,31m代表红⾊,abcd是输出内容,其他颜⾊如下:第⼀个脚本与脚本执⾏⽅式新建⼀个脚本hello.sh:#!/bin/bash#the first programecho "hello world"exit 0其中第⼀⾏是声明,不是注释,不能省略,这是在指定使⽤哪个shell,如果没有这⾏有的程序可能⽆法执⾏。
第⼆⾏#开头的是注释,第四⾏是命令。
最后⼀⾏在设置回传值,在执⾏完该脚本后,执⾏echo $?就能查看这个值,可以通过这个⾃定义错误信息。
在脚本中有需要时要重新定义⼀下PATH环境变量,以便直接使⽤⼀些外部命令⽽不是写绝对路径:PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/module/jdk1.8.0_144/bin:/opt/module/hadoop-2.7.2/bin:/opt/module/hadoop-2.7.2/sbin:/root/bin export PATH执⾏shell脚本要先赋予其可rx权限:chomd 755 hello.sh然后再执⾏./hello.sh这⾥也可以⽤绝对路径执⾏。
linuxshell命令行参数
linuxshell命令行参数Linux shell 命令行参数是指在执行命令时可以传递给命令的一些选项或参数,用来修改命令的行为或执行特定的操作。
在 Linux 系统中,命令行参数通常以`-`或`--`开始,后面跟着选项的名称或参数的值。
以下是一些常见的 Linux shell 命令行参数及其用法:1. `-a` 或 `--all`:显示所有文件和目录,包括隐藏文件。
2. `-l` 或 `--long`:以长格式显示文件和目录的详细信息,包括权限、所有者、大小等。
3. `-h` 或 `--human-readable`:以人类可读的格式显示文件和目录的大小。
4. `-r` 或 `--recursive`:递归地执行命令,包括子目录。
5. `-f` 或 `--force`:强制执行命令,忽略警告或错误。
6. `-i` 或 `--interactive`:交互式地执行命令,需要用户确认或输入。
7. `-n` 或 `--numeric-sort`:按照数字顺序对输出进行排序。
8. `-s` 或 `--size`:按照文件或目录的大小进行排序。
10. `-u` 或 `--user`:以用户的身份执行命令。
11. `-g` 或 `--group`:以组的身份执行命令。
12. `-e` 或 `--execute`:执行命令或脚本文件。
13. `-v` 或 `--verbose`:显示详细的输出信息。
14. `-q` 或 `--quiet`:不显示任何输出信息。
15. `-d` 或 `--directory`:指定要操作的目录。
16. `-p` 或 `--preserve`:保留文件或目录的元数据,如权限、所有者等。
17. `-x` 或 `--extract`:解压缩文件或目录。
18. `-z` 或 `--gzip`:使用 gzip 压缩文件或目录。
19. `-c` 或 `--count`:统计文件或目录的数量。
Shell脚本编写的高级技巧使用调试器和性能分析工具
Shell脚本编写的高级技巧使用调试器和性能分析工具在Shell脚本编写中,使用调试器和性能分析工具是提高脚本效率和准确性的重要技巧。
调试器可以帮助我们找出脚本中的错误,并进行步进调试,而性能分析工具则可以帮助我们找出脚本中的性能瓶颈,进而进行优化。
本文将介绍Shell脚本编写中的高级技巧,包括调试器和性能分析工具的使用方法和注意事项。
一、调试器的使用调试器是Shell脚本编写中必备的工具之一,它可以帮助我们定位脚本中的错误,并进行逐行或逐语句的调试。
下面将介绍两种常用的Shell脚本调试器:Bash调试器和GDB调试器。
1. Bash调试器Bash调试器是Bash shell内置的调试工具,可以通过设置环境变量来启动调试模式。
在调试模式下,可以使用各种命令来检查变量的值、查看函数的调用栈以及设置断点等。
以下是一些常用的Bash调试器命令:- 设置调试模式:`set -o'xtrace'` 或者 `set -x`- 取消调试模式:`set +o'xtrace'` 或者 `set +x`- 设置断点:在代码中插入 `set -o'xtrace'` 或者 `set -x`- 查看变量值:`echo $变量名`- 查看函数调用栈:`caller` 或者 `caller $函数名`- 单步执行:使用合适的命令进行单步执行,如 `next` 或者 `n`- 继续执行:`continue` 或者 `c`- 跳转到下一个断点:`next` 或者 `n`通过使用Bash调试器,我们可以逐行检查脚本的执行过程,帮助我们找出潜在的错误并进行调试。
2. GDB调试器GDB是一个功能强大的调试器,可以用于多种编程语言,包括Shell脚本。
在使用GDB调试器之前,需要将脚本编译成可执行程序。
以下是GDB调试器的一些常用命令:- 加载可执行程序:`gdb 可执行程序`- 设置断点:`break 函数名` 或者 `break 行号`- 查看变量值:`print 变量名`- 单步执行:`next` 或者 `n`- 继续执行:`continue` 或者 `c`- 跳转到下一个断点:`next` 或者 `n`通过使用GDB调试器,我们可以更详细地检查脚本的执行过程,查看变量的值和函数的调用栈,帮助我们找到脚本中的错误并进行调试。
LINUX SHELL
LINUX SHELLlinuxshellLinux shell主要命令的详细说明shell是用户和linux操作系统之间的接口。
linux中有多种shell,其中缺省使用的是bash。
本章讲述了shell的工作原理,shell的种类,shell的一般操作及bash的特性。
什么是贝壳linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。
它是命令语言、命令解释程序及程序设计语言的统称。
Shell是用户和Linux内核之间的接口程序。
如果你认为Linux内核是一个球体的中心,那么外壳就是内核的外层。
当命令从shell或其他程序传递到Linux时,内核将做出相应的响应。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。
用户在提示符下输入的命令都由shell先解释然后传给linux核心。
shell中包含了一些命令,例如更改工作目录命令CD。
其他命令,如copy命令CP和move命令RM,是存在于文件系统目录中的独立程序。
对于用户来说,命令是构建在shell 中还是构建在单独的程序中并不重要。
shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。
然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。
如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。
如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给linux内核。
shell的另一个重要特性是它是一种解释性编程语言。
Shell编程语言支持高级语言中可以看到的大多数程序元素,例如函数、变量、数组和程序控制结构。
Shell编程语言简单易学。
可以在提示符下键入的任何命令都可以放入可执行的shell程序中。
linux shell详解
linux shell详解Linux Shell 是一种运行在 Linux 操作系统上的命令行解释器,它提供了一种与系统进行交互的方式。
本文将详细介绍Linux Shell 的相关知识,包括 Shell 的基本概念、常用命令以及一些实用技巧。
## 一、Shell 的基本概念Shell 是用户与操作系统内核之间的接口,它接收用户输入的命令,并将其转发给内核执行。
在Linux 中,常见的Shell 有Bash (Bourne Again Shell)、Csh(C Shell)等。
Bash 是最常用的Shell,也是默认的 Shell。
Shell 的主要功能包括命令解析与执行、环境控制、脚本编程等。
用户可以通过Shell 提供的命令来执行文件操作、进程管理、权限控制等操作。
## 二、常用 Shell 命令1. 目录操作命令:- `ls`:列出当前目录下的文件和子目录。
- `cd`:切换当前工作目录。
- `pwd`:显示当前工作目录的路径。
2. 文件操作命令:- `cp`:复制文件或目录。
- `mv`:移动文件或目录。
- `rm`:删除文件或目录。
- `cat`:查看文件内容。
3. 进程管理命令:- `ps`:显示当前正在运行的进程。
- `top`:实时显示进程状态。
- `kill`:终止指定进程。
4. 网络命令:- `ping`:测试与指定主机的连通性。
- `ifconfig`:查看和配置网络接口信息。
- `ssh`:远程登录到其他主机。
5. 权限管理命令:- `chmod`:修改文件或目录的权限。
- `chown`:修改文件或目录的所有者。
- `chgrp`:修改文件或目录的所属组。
## 三、Shell 脚本编程Shell 脚本是一种可以用来编写一系列命令的脚本文件,它可以实现自动化任务的目的。
Shell 脚本通常以 `.sh` 作为文件后缀名。
以下是一个简单的Shell 脚本示例,用于统计指定目录下文件的数量:```shell#!/bin/bashdir_path="/path/to/directory"file_count=0# 遍历目录下的文件for file in $(ls $dir_path)doif [ -f $dir_path/$file ]; then((file_count++))fidoneecho "文件数量:$file_count"```以上脚本中,使用了 `for` 循环遍历目录下的文件,并通过判断是否是普通文件来统计文件数量。
linux系统调试工具GDB 命令详细解释..
Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。
和所有常用的调试工具一样,gdb提供了以下功能:# 监视程序中变量的值# 在程序中设置断点# 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项。
调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:* 在启动gdb后执行以下命令:file 可执行文件路径* 在gdb启动时就载入程序:gdb 可执行文件路径载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:* list:显示程序中的代码,常用使用格式有:list输出从上次调用list命令开始往后的10行程序代码。
list -输出从上次调用list命令开始往前的10行程序代码。
list n输出第n行附近的10行程序代码。
list function输出函数function前后的10行程序代码。
* forward/search:从当前行向后查找匹配某个字符串的程序行。
使用格式:forward/search 字符串查找到的行号将保存在$_变量中,可以用print $_命令来查看。
* reverse-search:和forward/search相反,向前查找字符串。
使用格式同上。
* break:在程序中设置断点,当程序运行到指定行上时,会暂停执行。
使用格式:break 要设置断点的行号* tbreak:设置临时断点,在设置之后只起作用一次。
使用格式:tbreak 要设置临时断点的行号* clear:和break相反,clear用于清除断点。
使用格式:clear 要清除的断点所在的行号* run:启动程序,在run后面带上参数可以传递给正在调试的程序。
linux中修改可执行文件的方法
linux中修改可执行文件的方法在Linux中,要修改一个可执行文件,你可以使用以下几种方法,每种方法都有其各自的特点和用途。
1. chmod命令chmod是change mode的缩写,用于修改文件的访问权限。
通过使用chmod命令,你可以更改文件的所有者、所属组以及其他用户的权限。
以下是一些常用的chmod命令选项:- chmod +x file:给文件添加可执行权限- chmod -x file:移除文件的可执行权限- chmod u+x file:给文件的所有者添加可执行权限- chmod g+x file:给文件的所属组添加可执行权限- chmod o+x file:给其他用户添加可执行权限例如,要给一个名为script.sh的文件添加可执行权限,你可以运行以下命令:```shellchmod +x script.sh```2. chown命令chown命令用于更改文件的所有者和所属组。
通过使用chown命令,你可以将可执行文件的所有权转让给其他用户或组。
以下是一些常用的chown命令选项:- chown user file:将文件的所有者更改为指定的用户- chown user:group file:将文件的所有者和所属组同时更改为指定的用户和组例如,要将script.sh的所有权转让给用户"john",你可以运行以下命令:```shellchown john script.sh```3. vi或nano编辑器vi和nano是Linux中常用的文本编辑器,你可以使用它们来修改可执行文件的内容。
通过编辑文件,你可以添加、删除或修改文件中的命令和代码。
使用这种方法修改可执行文件需要一定的编程和脚本语言知识。
-使用vi编辑器:运行以下命令打开文件:```shellvi script.sh```按"i"键进入插入模式,然后修改文件内容。
完成后按"Esc"键退出插入模式,并输入":wq"保存并退出文件。
gdb 常用命令
2)cd命令:改变工作目录。
3)pwd命令:返回当前工作日录。
4)run命令:执行当前被调试的程序。
5)kill命令:停止正在调试的应用程序。
6)list命令:列出正在调试的应用程序的源代码。
7)break命令:设置断点。
8)Tbreak命令;设置临时断点。它的语法与break相同。区别在于用tbreak设置的断点执行一次之后立即消失。
13)step命令:执行下一条源代码,进入函数内部。如果调用了某个函数,会跳到函数所在的代码中等候一步步执行。执行这个命令的前提是已经用run开始执行代码。
14)display命令:在应用程序每次停止运行时显示表达式的值。
15)info break命令:显示当前断点列表,包括每个断点到达的次数。
9)watch命令:设置监视点,监视表达式的变化。
10)awatch命令:设置读写监视点。当要监视的表达式被读或写时将应用程序挂起。它的语法与watch命令相同。
11)rwatch命令:设置读监视点,当监视表达式被读时将程序挂起,等侍调试。此命令的语法与watch相同。
12)next命令:执行下一条源代码,但是不进入函数内部。也就是说,将一条函数调用作为一条语句执行。执行这个命令的前提是已经run,开始了代码的执行。
22)Shell命令:执行Linux Shell命令。
23)make命令:不退出gdb而重新编译生成可执行文件。
24)it命令:退出gdb。
16)info files命令:显示调试文件的信息。
17)info func命令:显示所有的函数名。
18)info local命令:显示当前函数的所有局部变量的信息。
GDB使用说明
GDB使用说明文档一、简介:GDB能让你观察一个程序在执行时的内部活动,或程序出错时发生了什么。
GDB主要能为你做以下四件事,帮助你找出程序中的错误。
1.运行你的程序,设置所有的能影响程序运行的东西。
2.保证你的程序在指定的条件下停止。
3.当你程序停止时,让你检查发生了什么。
4.改变你的程序。
那样你可以试着修正某个bug引起的问题,然后继续查找另一个bug.二、GDB运行方式1.通常的调试可执行程序:gdb <可执行文档名>2.调试执行文件指定一个core文件:gdb <可执行文件名> core3.为执行的文件指定一个进程号:gdb <可执行文件名> <进程号>三、GDB常用命令下面先说明GDB的基本指令:(大部分命令使用时只要输入第一个字母就好了,同时支持TAB的自动补全,与shell相类似)1.help:查看帮助2.file:指定一个可执行文件进行调试,gdb将读取些文件的调试信息3.list:列出程序源文件4.run:装载完要调试的可执行文件后,可以用run命令运行可执行文件5.break:设置断点breakpoint,如b 25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;也可以使用b funcname,funcname为函数的名称,当程序调用些函数时,则产生中断6.continue:c命令可以使中断的程序继续执行,直到下一个中断点或程序结束7.print:输入某个变量的值,如程序定义了一个int aa的就是,p aa就会输出aa的当前值8.next:程序执行到断点时中断执行,可以用n指令进行单步执行9.step:程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数,如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish10.attach:命令为attach PROCESS-ID,这个命令把一个已经运行的进程(在gdb外启动)连接入gdb,以便调试。
Linux常用shell命令大全
第2讲 Linux常用shell命令使用LINUX虚拟机的快照3以下文章由影视网收集于提供实验目的:掌握Linux常用命令实验步骤:一、基本命令1、立即关机并重启动,执行如下命令:shutdown -r now或者reboot2、立即关机,执行如下命令:shutdown -h now或者poweroff3、等待2分钟关机并重启动,执行如下命令:shutdown -r 24、等待2分钟关机,执行如下命令:shutdown -h 25、使用当前用户的历史命令,执行如下操作:history将会显示使用过的每条命令及其序号,可利用序号重复执行该命令。
例如输入!1并回车,将会重复执行第1条历史命令。
也可用上下光标键调出某条历史命令,然后按回车键重复执行。
还可用上下光标键调出某条历史命令,修改后按回车键执行。
6、清除当前用户的历史命令,执行如下命令:history -c此时用向上光标键将会调不出任何历史命令。
7、命令提示键<Tab>:输入命令开头一个或几个字母,然后按1次【Tab】键,系统会自动补全能够识别的部分;再按1次【Tab】键,系统显示出符合条件的所有命令供用户选择。
例如输入group后按两次<Tab>键,将会显示以group开头的所有命令。
8、显示内核版本号,执行如下命令:uname -r注:内核版本号不同于软件发行版本号。
例如,RHEL 5.4的内核版本号是2.6.18-164.el5,软件发行版本号是5.4。
9、清除屏幕,执行如下命令:clear10、显示操作系统时钟,执行如下命令:date11、加载光盘到/media,执行如下命令:mount /dev/cdrom /media12、卸载光盘,执行如下命令:umount /dev/cdrom或者 umount /media注意:不要在/media或其子目录中执行此命令,否则将会出现“设备忙错误”。
13、查看存储设备,执行如下命令:fdisk –l14、加载U盘到/mediamount /dev/sdb1 /media15、卸载U盘,执行如下命令:umount /dev/sdb1或者 umount /media注意:不要在/media或其子目录中执行此命令,否则将会出现“设备忙错误”。
GDB用法详解
GDB用法详解GDB是一个强大的命令行调试工具。
虽然X Window提供了GDB的图形版DDD,但是我仍然更钟爱在命令行模式下使用GDB。
大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。
UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。
于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。
而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。
在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还是有不如命令行的地方。
1 GDB概述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。
所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。
(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。
一个调试示例源程序:tst.c代码:1 #include23 int func(int n)4 {5 int sum=0,i;6 for(i=0; i7 {8 sum+=i;9 }10 return sum;11 }121314 main()15 {16 int i;17 long result = 0;18 for(i=1; i<=100; i++)19 {20 result += i;21 }2223 printf("result[1-100] = %d", result );24 printf("result[1-250] = %d", func(250) );25 }编译生成执行文件:(Linux下)root@linux:/home/benben/test# gcc -g tst.c -o tst使用GDB调试:代码:root@linux:/home/benben/test# gdb tst <---------- 启动GDBGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-suse-linux"...(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。
linux常用shell命令
linux常用shell命令学习linux我们必须掌握linux常用的shell命令,下面由店铺为大家整理了linux常用shell命令的相关知识,希望大家喜欢!linux常用shell命令一、文件、目录操作命令1、ls命令功能:显示文件和目录的信息ls 以默认方式显示当前目录文件列表ls -a 显示所有文件包括隐藏文件ls -l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行ls -lh 显示文件的大小,以容易理解的格式印出文件大小 (例如 1K 234M 2G)ls -lt 显示文件,按照修改时间排序ls -F 在列出的文件名和目录名后添加标志。
例如,在可执行文件后添加“*”,在目录名后添加“/”以区分不同的类型。
2、cd命令功能:改名目录cd dir 切换到当前目录下的dir目录cd / 切换到根目录cd .. 切换到到上一级目录cd ../.. 切换到上二级目录cd ~ 切换到用户目录,比如是root用户,则切换到/root下3、cp命令功能:copy文件cp source target 将文件source复制为targetcp /root /source . 将/root下的文件source复制到当前目录cp –av soure_dir target_dir 将整个目录复制,两目录完全一样4、rm命令功能:删除文件或目录rm file 删除某一个文件rm -f file 删除时候不进行提示。
可以于r参数(递归删除)配合使用rm -rf dir 删除当前目录下叫dir的整个目录5、mv命令功能:将文件移动走,或者改名,在uinx下面没有改名的命令,如果想改名,可以使用该命令mv source target 将文件source更名为target6、diff功能:比较文件内容diff dir1 dir2 比较目录1与目录2的文件列表是否相同,但不比较文件的实际内容,不同则列出diff file1 file2 比较文件1与文件2的内容是否相同,如果是文本格式的文件,则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的comm file1 file2 比较文件,显示两个文件不相同的内容7、ln命令功能:建立链接。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
continue, step, next,finish
continue(简写:c), step(简写:s), next(简写: n),finish(简写:fin)实现恢复程序运行和单步调试功能。 continue 运行到下一个断点 step 进行函数内部 next 单步执行
continue, step, next,finish
delete、disable、enable
disable断点号i 断点号j … 使断点号i,j,...的断点无效即断点号为 i,j,…的断点未删除但已经不生效 enable 断点号i 断点号j … 使断点号i,j,…的断点有效 disable使断点暂时不使用,并没有删除 如果想继续使用只要enable即可。
break,watch
break … if 条件 是设置条件断点,程序运行时满足if后的条件, 运行到断点处才停止。 info break 是查看本程序中设置断点
break,watch
watch命令设置观察点。与watch相关的命令 如下所示 watch rwatch awatch info watchpoints
目录
Gdb调试基础知识 Gdb调试技巧 Shell脚本的基本知识
GDB调试基础知识
本章主要介绍gdb调试基础知识,通过 介绍这些基础知识能够掌握gdb调试。 本章主要内容如下: GDB介绍 GDB调试方法 GDB调试命令
GDB介绍
GDB是GNU开源组织发布的一个强大的 程序调试工具。 gdb - GNU debugger gdb官方网址 /software/gdb/gd b.html gdb下载地址 /gnu/gdb/
list
使用list命令时需要将程序的源代码与可执行 程序放到同一磁盘上且源代码与编译程序时 的目录结构相同。否则执行list命令没有结果 显示。在测试线上代码与程序不在同一磁盘 上,执行list命令没有结果显示。
print(简写:p)为查看当前程序的运行数据。 通常命令使用格式有两种 print 变量名称 print /格式 变量名称
finish 跳出函数
thread,info thread
thread,info thread为操作线程的命令 thread 线程序号i 切换到线程序号为i的线程 info thread 查看当前程序中的所有线程 这两个命令通常一起使用,一般先通过命令info thread 查找到线程的序号再切换线程。使用info thread命令 后显示的结果的第一列为线程的序号
GDB调试方法
常用的gdb调试方法有两种 调试一个新进程 调试一个正在运行的进程
调试一个新进程
调试一个新进程为将一个编译好的程序以gdb 方式运行起来。在以gdb方式运行前先确定此 程序是否可以进行gdb。程序都是由.c文件通 过编译连接生成的。在编译.c时如果没有添加 -g编译选项则不能进行gdb调试。例如有一个 test.c文件,编译连接时执行
确定core文件与执行文件同一目录
确定core文件与执行文件同一目录 将core文件与产生core的程序放在同一个目 录下
gdb core文件
gdb core文件 core文件与产生core文件的程序在同一个目 录下后则以gdb方式进行调试。调试命令为: gdb 程序名称 core文件名称
分析core文件
定位cpu使用过高
①
在运行时发现某个进行的cpu使用率过 高,可以通过gdb方式定位cpu过高的 原因。定位cpu过高的步骤如下所示: 查看每个进程中的每个纤程使用cpu的 占用率 在linux的shell界面上执行命令: ps xm –eo pid,tid,pcpu,comm 执行完毕命令后显示结果中显示每个进 程的每个纤程的cpu使用率,找到使用 率最高的线程,记录线程id
print 变量名称 查看变量值 print /格式 变量名称 以某种格式显示变量名称。格式种类如下所示:
x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十六进制格式显示无符号整型。 o 按八进制格式显示变量。 t 按二进制格式显示变量。 a 按十六进制格式显示变量。 c 按字符格式显示变量。 f 按浮点数格式显示变量。
break,watch
break(简写为:b)命令来设置断点 有几种设置断点的方法: break 函数名 break 文件名file:行号line break 行号line break … if 条件 info break
break,watch
break 函数名 是在一个函数上设置断点,如果程 序运行到此函数则程序停止 break 文件名file:行号line 是在文件名为file文件的line行上设 置断点。 break 行号 line 是在当前文件的line行上设置断点
break,watch
info watchpoints 查看设置的watch点。info break同时显示 break断点与watch断点。故可以用info break 来查看
delete、disable、enable
delete(简写:d)、disable(简写:dis)、
enable(简写:ena)为维护断点的命令 delete 断点号i 断点号j … 为删除断点号为i, j, …的断点。如果delete后 没有参数则删除所有断点。 断点号:设置的第几个断点。可以通过info break命令查看
调试一个正在运行的进程
调试一个正在运行的进程为如果程 序已经运行,在运行时通过log, 黑匣子或其他功能发现正在运行的 程序出现问题,此时可以通过gdb 调试正在运行的程序。调试正在运 行程序的步骤如下所示
查找正在运行的进程号(pid) 2. 执行命令 gdb –p 进程号 查找正在运行程序的进程号的方式很多。 一般使用ps -ef命令。
gcc test.c –o test 则编译出的test程序不能进行gdb调试。执行 gcc –g test.c –o test 编译出的程序test可以进行gdb调试
调试一个新进程
确认程序可以进行gdb调试后,gdb调试一个 新的进程方式如下所示 gdb 程序名称 例如gdb test程序 gdb test
调试core文件
调试core文件是通过以gdb的方式分析 core文件查找出出现core的原因。Core 文件分析一般有如下步骤。 确定core文件类型 core文件与执行文件同一目录 gdb core文件 分析core文件
调试core文件
① ②
确定core文件类型 从外场或测试线发现的core文件现有 两种基本类型。 压缩后的core文件 没有压缩的core文件 对于压缩后的core文件需要解压。一 般的解压命令为tar xzvf 压缩后的core 文件名
x
b表示单字节 h表示双字节 w表示四字节 g表示八字节 如果不填写则默认按照四字节显示
call
call为强制调用函数命令 call 函数名function 强制调用函数名为function的函数。如果函数 function带参数在参数必须填写否则函数调用 失败。如调用printf函数进行打印hello call printf(“hello”) 不能这样调用 call printf “hello”
run
run(简写为r)为程序启动运行命令。有两种使 用格式 run run 启动参数
run
run 在gdb一个新的程序时程序启动不需要任何参数,运行 此命令则程序开始运行。或程序以gdb方式启动后运 行一段时间之后需要重新运行则可以执行此命令 run 启动参数 在gdb一个新的程序时程序启动需要启动参数,运行此
命令使用技巧
快速匹配 gdb调试的命令比较多有时不能记住命令的全 部字段,可以通过快速匹配解决此问题。只要 记住命令的前面 几个字母,然后按两次tab键 则自动匹配命令。 如果命令后的参数为程序中的内容,也可以通 过按两次tab键来匹配。
命令使用技巧
对上面内容通过举例来说明。 例如显示变量g_pstSmfnpmGlbMemMng 则需要执行如下命令 print g_pstSmfnpmGlbMemMng 如果通过匹配命令可以如下
例如以16进制显示变量i print /x I 程序默认以10进制显示
x
x(小写)为查看内存命令 x /内存的长度/显示格式/请求的字节数 内存的长度:表示显示内存的长度,也就是说从 当前地址向后显示几个地址的内容 显示格式:显示的格式如以16进制显示则填x 请求的字节数:表示gdb每次从内存中读取字节 的单位。可以是如下几个值:
break,watch
watch 全局变量名称 如果全局变量值发生变化则程序在全局变量发 生变化位置停止 rwatch 全局变量名称 如果全局变量被读取则程序在全局变量被读取 的位置停止 awatch全局变量名称 如果全局变量被读取或修改则程序在全局变量 被读或写的位置停止。 上面命令的全局变量如果是指针,上面的命令 可能不起作用。
命令使用技巧