目录
执行shell时报错Syntax error: “(“ unexpected (expecting “}“)
awk 'END {print gsub("\r", "")}'
find . -name *.cpp | xargs grep -L "-Ddebug"
ls ./ | grep -v mac | xargs rm -rf
ifconfig eth0 promisc(或ioctl配置IFF_PROMISC)
dmesg | grep 0x2: | awk '{split($5, arr, ":"); print arr[2]}'
17、EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell
linux下的文件介绍
/dev/
tty、pts、pty
虚拟终端(/dev/pts/n):在Xwindows模式下的伪终端
串行端口终端(/dev/ttySn):串行端口终端(Serial Port Terminal): 使用计算机串行端口连接的终端设备 设备名称是/dev/tts/0 (或 /dev/ttyS0) , /dev/tts/1 ( 或 /dev/ttyS1 )等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、 COM2等
伪终端(/dev/pty/): 伪终端(Pseudo Terminal): 成对的逻辑终端设备 (即master和slave设备, 对master的操作会反映到slave上) 如: /dev/ptyp3和 /dev/ttyp3 ( 或者 在设备文件系统中分别是 /dev/pty/m3 和 /dev/pty/s3 ) ptyp3(master设备), ttyp3(slave设备)
控制终端(/dev/tty): 如 当前进程有控制终端(Controlling Terminal)的话,那 /dev/tty 就是当前进程的控制终端的设备特殊文件。 把虚拟机切换到字符界面下,看到的就是tty1/tty2.....
(6条消息) 终端和控制台 串口 console tty pty /dev目录下终端文件 pts/ptmx 伪终端 控制终端 虚拟终端_cpuCode的博客-CSDN博客
(6条消息) Linux 伪终端(pty)_程序员面试吧的博客-CSDN博客_linux伪终端
(6条消息) Linux中的tty、pts、pty等概念辨析_Adenialzz的博客-CSDN博客_pty
/proc/
获取UUID
cat /proc/sys/kernel/random/uuid 或者 uuidgen
通过服务端设备往指定的客户端输出内容
当我们使用ssh登录服务端时ls /ev/pts都会有新的/dev/pts/[n]设备文件产生。我们可以以此进行交互。
输入指令
可以看到,客户端就会打印出来
linux环境相关
执行shell时报错Syntax error: “(“ unexpected (expecting “}“)
硬盘损坏重装了系统,在执行之前的脚本时出现报错
Syntax error: "(" unexpected (expecting "}")
问题排查:
ls -l /bin/sh
默认链接的是 dash
知识补充
bash:为GNU计划编写的Unix shell
sh:相当于 /bin/bash --posix。是开启了POSIX标准的bash
dash:相比bash有更快的执行速度,但是支持的语句叶更少
解决方案
这里我对脚本执行的速度没有要求,只要求能用,所以 改成bash即可
cd /bin/; ln -sf bash /bin/sh
l
问题解决。
设置环境变量是对所有用户生效
1)当用户登录系统后,首先加载/etc/profile全局环境变量(这也是linux默认的shell主环境变量,每个用户登录都会加载这个文件)
2)接着加载/etc/profile.d/目录下的脚本文件,自动定义开机启动的脚本可以放在这个目录下
3)紧接着加载$HOME/.bash_profile(这是用户个人的环境变量文件)
4)在$HOME/.bash_profile文件中,会加载$HOME/.bashrc(也是用户个人的环境变量文件,包含在$HOME/.bash_profile中),如果有环境变量就加载,如果没有就不加载
5)在$HOME/.bashrc文件中,又会加载/etc/bashrc(这是全局环境变量),同理,有环境变量就加载,没有就不加载
普通用户ls没有颜色
使用root登录,vim /etc/profile
添加alias ls="ls --color"即可
调整内核打印信息等级
Linux内核printk(level,message)函数打印:
其中level是定义的打印优先级,当优先级小于console_loglevel时定义的优先级小于当前日志的打印级别时,信息才会打印在控制终端(根据要打印信息的类型,分为0~7,其中0位最高级别),通常宏来指示日志优先级
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */
其中console_loglevel的初始值是DEFAULT_CONSOLE_LOGLEVEL,可以通过sys_syslog()系统调用进行修改,或者修改文件/proc/sys/kernel/printk下的优先级,,这个文件中包含了4个整数值,分别是当前日志优先级,未明确指定的日志级别时的默认日志优先级,最小允许的日志优先级,引导时的默认日志优先级。向该文件中写入一个整数值,就会把当前日志文件的优先级修改为该值,修改方式为
echo 4 > /proc/sys/kernel/printk(linux内核2.6日志默认的优先级是4)
message是我们要打印出调试的信息
syslogd/rsyslogd
syslogd是Linux下的一个记录日志文件服务。新版本叫做rsyslogd。
syslogd -O /log/messages -l7 -b5
-O 指定日志输出目录
-l7 记录的日志等级
-b5 保留的个数:
shell技巧
sed
sed -i '1i\111111' file
在文件指定行添加内容
sed 批量修改文件内容
以下实现是目录下有很多SN开头的.ini文件,找到所有符合要求的文件,找到其中包含的ProductModel行,将其等号后面的内容后追加-13
#!/bin/bash
PRODUCT_NAME=
NEW_STRING=
_THREAD_PATH=$PWD
for Thread in `find $_THREAD_PATH -iname SN*.ini`;do
#echo -e "FileName[$Thread]"
echo -e "\n\n FileName[$Thread], [$PRODUCT_NAME] -- [$NEW_STRING] -- CMD[sed -i "s/$PRODUCT_NAME/$NEW_STRING/g" ./$Thread]"
PRODUCT_NAME=`cat $Thread | grep "ProductModel" | sed 's/.*=//'` #提取字符串 找到ProductModel = SN-IPR7150BYAN-B2.8 输出SN-IPR7150BYAN-B2.8
NEW_STRING="$PRODUCT_NAME""-13"
sed -i "s/$PRODUCT_NAME/$NEW_STRING/g" $Thread #在SN-IPR7150BYAN-B2.8追加-13
done
利用sed提取字符串
cat /proc/cmdline | sed 's/.*sz=//'
将包含sz=在内的左边的所有内容删除
awk
awk 'END {print gsub("\r", "")}'
RET=`awk 'END {print gsub("\r", "")}' ./debug.ini`
if [ $RET -ge 1 ];then
sed -i 's/\r//' ./debug.ini
fi
用于检测一个文件中的回车符。
awk 'END {print gsub("\r", "")}' ./debug.ini
:
awk
是一个文本处理工具,常用于模式扫描和文本/数据提取。'END {print gsub("\r", "")}'
是awk
的一个脚本,其中END
表示在处理完所有行之后执行这个动作。gsub("\r", "")
是一个全局替换函数,它会查找所有的\r
(回车符)并将其删除。./debug.ini
是要处理的文件路径。- 这个命令的目的是计算并返回文件中回车符的数量。
RET=
awk ...``:
- 这部分将上面的
awk
命令的输出(即回车符的数量)赋值给变量RET
。
if [ $RET -ge 1 ];then
:
- 这是一个条件语句,检查变量
RET
(回车符的数量)是否大于等于1。
echo "dos"
:
- 如果上面的条件为真(即回车符的数量大于1),则输出 "dos"。
简而言之,这段脚本的目的是检测
./debug.ini
文件中的回车符数量。如果回车符的数量大于1,则输出 "dos"。
find . -name *.cpp | xargs grep -L "-Ddebug"
列出当前目录下所有 不包含 字符串Ddebug的.cpp文件名称(有些编译选项需要所有的cpp中都包含, 这条命令就可以找出漏加的文件)
ls ./ | grep -v mac | xargs rm -rf
刪除当前目录下除了mac之外的所有其他文件
遍历目录 for xx in xx
_THREAD_PATH=.
for Thread in `ls $_THREAD_PATH`;do
echo $Thread
done
||操作
resources_check()
{
local RESET_FLAG=`cat /mnt/mtd/config/reset_flag`
if [[ ! -d /mnt/mtd/oem/osd || 1 == $RESET_FLAG ]];then
mkdir /mnt/mtd/oem/osd
cp /mnt/mtd/factory/PictureLogo/* /mnt/mtd/oem/osd/ -rf
fi
}
nohup
英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中
pstree
将所有进程以数状图显示。简单理解 ps tree,两个命令组合了起来(手动狗头)
pstree -p 进程号 | wc -l 就可以统计当前进程使用的线程数量
pstree -p | wc -l 可以统计出当前进程使用的进程数量
ifconfig eth0 promisc(或ioctl配置IFF_PROMISC)
配置网卡进入混杂模式,混杂模式下,网卡会接受所有经过它的数据流
ifconfig eth0 -promisc 退出混杂模式
dmesg | grep 0x2: | awk '{split($5, arr, ":"); print arr[2]}'
从内核打印中匹配0x2: split($1, arr, ":") ,把第一列,以“:”为分割符分割,把分割得到的结果放入arr数字中。(arr数组从1开始)
递归显示当前目录下的所有普通文件
#!/bin/bash
function lsdir()
{
for i in `ls`;do
if [ -d "$i" ] ;then
cd ./$i
lsdir
else
md5sum $i
fi
done
}
lsdir
fuser -mk /mnt/mtd
使用source 命令 在脚本中使用另一个脚本的参数定义
1.sh
2.sh
执行结果
将多个静态库整合成一个动态库
四则运算
加法
val=$(expr 10 + 20)
网卡模式配置
ifconfig eth0 promisc //配置混乱模式
ifconfig eth0 -promisc //退出混乱模式
nm命令
(2条消息) nm命令和其内容详解_二芒星的博客-CSDN博客_nm命令
id -u
查看用户ID, root用户是0, 可以此判断当前用户
17、EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell
读取终端输入,根据case执行不同分之
#!bin/bash
if [ ! -d $DIR_PATH ]; then
mkdir $DIR_PATH
fi
echo -e "input cmd : \n\t log : get log -- \n\t fps : set fsp -- \n"
read -p "please input cmd : " CMD
case $CMD in
log)
echo "get log -- "
;;
fps)
echo "set fsp --"
;;
*)
echo "unknow cmd --"
;;
esac
挂载临时文件系统并指定大小
#mount -t tmpfs -o size=5M tmpfs /log/
Debug
ldd
用来打印或者查看程序运行所需的共享库(访问共享对象依赖关系),常用来解决程序因缺少某个库文件而不能运行的一些问题
(105条消息) Linux :ldd 命令的介绍与使用_ldd命令_Cappuccino-jay的博客-CSDN博客在匹配行后面输出指定数量的行(105条消息) Linux :ldd 命令的介绍与使用_ldd命令_Cappuccino-jay的博客-CSDN博客