Linux 命令及踩坑

常用命令

每个账号都可以有多个用户组的支持

chgrp: 改变文件所属用户组
chown:改变文件所有者
chmod:改变文件的权限

umask:取消什么权限

diff: 比较文件之间的区别

file :查看文件类型

which:寻找执行文件 如 which ls

whereis locate:查找文件,前者精确 后者部分,都从数据库查找,效率高

updatedb:更新上面两个命令所使用的数据库,cent OS默认一天更新一次

**find: **查找文件,较复杂,从磁盘找,较慢

**wc: ** 统计
-l:仅列出多少行
-w:仅列出多少字(英文单词)
-m:多少字符

ls:
-a 列出所有文件,包括隐藏文件
-d 仅列出目录本身
-S 以文件容量大小进行排序

cp:
-i:覆盖前询问
-a:复制出和原文件一模一样的文件, 包括建立时间等
-p:连同文件的属性一起复制过去,而非使用默认属性,(备份常用)
-r:递归持续复制,用于目录的复制
-s:复制成为符号链接文件, 即快捷方式文件
-f:强制
-u:在目标文件和源文件有差异时才会复制,(备份常用)

查看linux系统主机信息:

  1. 查看逻辑CPU的个数

cat /proc/cpuinfo | grep "processor" | wc -l

  1. 查看内存信息

cat /proc/meminfo

vim:
R:使用recover选项
:set nu 显示行号
:dd 删除光标所在的整行
:yy 复制光标所在的一行
:gg 移动到文件的第一行
:G 移动到这个文件的最后一行
:p表示将一复制的数据粘贴在光标的下一行, :P表示粘贴在上一行
:[ctrl] + v 块选择
:n编辑上一个文件 :N表示编辑下一个文件
:sp 在新窗口打开同一份文件 :sp + 文件名 打开另一个文件

cat:
-n:打印行号

head tail:

  • -n 100 // 打印前(后)多少行

压缩、解压缩:
解:tar -zxvf *.tar.gz *
压:tar -zcvf ...
排除目录: tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat

远程 传输文件----scp
示例:
1. 从远程复制目录到本地目录。
说明:从192.168.120.204机器上的/opt/soft/中下载mongodb 目录到本地的/opt/soft/目录来。

$scp -r root@192.168.120.204:/opt/soft/mongodb /opt/soft/

2. 上传本地文件到远程目录。
说明:复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器192.168.120.204的opt/soft/scptest目录

$scp /opt/soft/nginx-0.5.38.tar.gz root@192.168.120.204:/opt/soft/scptesiiiit

注:scp配置免密登录
若A想要ssh免密登录B:
1.先在两台主机对应用户目录生成.ssh文件

ssh-keygen

2.在B对应用户目录下的.ssh文件中生成authorized_key文件

vim authorized_key

3.将A主机对应用户目录的.ssh目录下的id_rsa.pub文件的内容复制到B主机刚生成的authorized_key文件内

bash 环境变量

参考
Linux 中/etc/profile、~/.bash_profile 环境变量配置及执行过程

linux ssh自动登录,自动交互 expect

参考
linux expect详解(ssh自动登录)

shell编程

一行执行多条命令可以分号(;)隔开, 命令会依序执行

test 命令:
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试

-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

实例演示:

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi
输出结果:

两个数相等!

字符串测试

= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真

实例演示:

num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi
输出结果:

两个字符串不相等!

文件测试

-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真

实例演示:

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi
输出结果:

文件已存在!

&和&&,|和||:

  1. & 表示任务在后台执行,如要在后台运行redis-server,则有

redis-server &

  1. && 表示前一条命令执行成功时,才执行后一条命令 ,如

echo 'hello‘ && echo 'world'

  1. | 表示管道,上一条命令的输出,作为下一条命令参数,如

echo 'hello' | wc -l

  1. || 表示上一条命令执行失败后,才执行下一条命令,如

cat nofile || echo "failed"

cut grep
cut: 将一段信息的某一段切出来,处理信息以为单位 示例如下:

cut -d ':' -f 3,5
A:B:C:D:E:F
以“:”为分隔符,列出第三个和第五个C和E

grep: 可以解析一个文件中的一行文字,取得关键字,就会整行列出来

grep [-acinv] "查找的字符串" filename
-a:将binary文件已text文件的方式查找数据
-c:计算找到 “查找字符串” 的次数
-i:忽略大小写的不同
-n:顺便输出行号
-v:反向选择,即显示出没有 “查找字符串” 内容的哪一行

printf命令

printf format-string [arguments...]

%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。

#!/bin/bash
 
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 

执行脚本,输出结果如下所示:

姓名     性别   体重kg
郭靖     男      66.12
杨过     男      48.65
郭芙     女      47.99

sh脚本执行其他sh文件的三种方式:

第一种
♦fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用
  foo.sh 这个脚本,比如如果是 foo.sh 在当前目录下,就是 ./foo.sh。运行的时候 terminal 会新开一个子 Shell 执行脚本 foo.sh,子 Shell 执行的时候, 父 Shell 还在。子 Shell 执行完毕后返回父 Shell。 子 Shell 从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回父 Shell。

第二种
♦exec 特点:exec调用一次之后的所有代码都不执行
  exec 与 fork 不同,不需要新开一个子 Shell 来执行被调用的脚本. 被调用的脚本与父脚本在同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本中 exec 行之后的内容就不会再执行了。这是 exec 和 source 的区别.

第三种
♦sourcesource特点不会生成子PID也就是子进程,他就行把被用的脚本拷贝到当前shell脚本中执行,可以重复被调用。
  与 fork 的区别是不新开一个子 Shell 来执行被调用的脚本,而是在同一个 Shell 中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。

踩坑

1. 升级Python版本 - 升级后会遇到pip的问题,如下
 'Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
  from pip import main
  ImportError: No module named 'pip' ''

用该方法解决pip 重新安装

2. unary operator expected 报错

运行报错 :

line 5: [: -ge: unary operator expected
错误原因:
由于变量rate初始化赋值为空,那么就成了 [ -ge "10"] 了,显然和 "10" 不相比较并且缺少了 符号,所以报了这样的错误。
shell判断条件时变量不若没有初始化就会为空,就会报错

解决办法:多套一个中括号

3. `` '' "" $() linux命令中单引号 双引号 反引号的区别
  1. 单引号''和双引号"" 反引号`` 的区别
    (1)单引号' '
    单引号将其中的内容都作为了字符串来,忽略所有的命令和特殊字符,类似于一个字符串的用法

       >echo 'This is a string'
       >This is a string
       >echo 'ls ./'
       >ls ./
    

(2)双引号" "
双引号与单引号的区别在于其可以包含特殊字符(单引号直接输出内部字符串,不解析特殊字符;双引号内则会解析特殊字符),包括 (', ", $, , ) 如果要忽略特殊字符,就可以利用\来转义,忽略特殊字符,作为普通字符输出:

     var = 1
     echo '$var'
     >$var
     echo "$var"
     > 1
     echo "Here 'this is a string' is a string"
     >Here 'this is a string' is a string
     echo "Here \"this is a string\" is a string"
     >Here "this is a string" is a string

(3)反引号``
反引号用来包含一个命令字符串的,其中的命令会先执行,得到的结果会返回到层命令再执行:

 echo `echo 'this is the inner string'`+'out' 
 > this is the inner string+out
 echo `echo 'this is the inner \` string'`+'out'    #转义反引号
 > this is the inner ` string+out

反引号类似与$(command)类似。

  1. 把命令输出结果赋给变量两种方式

    (1)last_msg=cut -d '+' -f 2 ./msg
    (2)last_msg=$(cut -d '+' -f 2 ./msg)

    以上两种方式都是直接把输出的内容付给变量并不是带引号的字符串形式,所以后续在使用的时候就有问题,
    比如 grep 命令的pattern 是带双引号的"" 才可以匹陪 所以需要给这样的变量加上字符串 可以这样

    "${last_msg}"

就相当于给变量加上字符串啦

  1. 解决SSH自动断线,无响应的问题。
    描述这样一种情况:
    两台linux主机 A和B,在A上执行这样一条命令

ssh tyx@10.55.1.12 sh /home/tyx/slave_build.sh

此处ip为B的,编造,忽略,tyx是B主机上的用户,由于该脚本需执行较长时间,所以ssh连接总被自动断掉。导致脚本执行失败,报错如下


截图.PNG

最后翻阅众多博客,文章无果,搜索报错无果,最后仔细分析原因搞清ssh断的原因找出了解决办法,配置/etc/ssh/sshd_config 和 /etc/ssh/sshd_config 文件

TCPKeepAlive yes
ClientAliveInterval 360 #每6分钟(360秒)向client端发个包
ClientAliveCountMax 20 #最多发20次,这样可以保持2小时(7200秒)的连接

最后重启一下ssh服务:

service sshd restart

注:

  1. 第一个参数表示要保持TCP连接
  2. ClientAliveInterval是设定SSH强制超时断开的参数ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0,不发送。而ClientAliveInterval 60表示每分钟发送一次,然后客户端响应,这样就保持长连接了。这里比较怪的地方是:不是客户端主动发起保持连接的请求(如FTerm, CTerm等),而是需要服务器先主动。
  3. ClientAliveCountMax,使用默认值3即可。ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值,就自动断开,正常情况下,客户端不会不响应。

参考链接1:解决SSH自动断线,无响应的问题。
参考链接2:ssh执行远程命令的坑

  1. 后台执行命令

nohup sh ./ha_test.sh > run.log 2>&1 &

  1. 建立swap分区 从系统分区分出来

用文件作为Swap分区

dd if=/dev/zero of=/root/swapfile bs=1M count=4096
mkswap /root/swapfile
swapon /root/swapfile

  1. 缺少动态连接库.so--cannot open shared object file: No such file or directory
    ---修改/etc/ld.so.conf,然后刷新

vim /etc/ld.so.conf
add /where/you/install/lib
sudo ldconfig

参考 : 缺少动态连接库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容