Linux一些常用命令和shell脚本(解压缩、关闭服务、ssh交互、字符串操作、运算符 等等等等)

本文详细介绍了Linux下常用的解压缩命令,如tar、gzip、bzip2等,以及如何通过ssh进行远程服务管理,包括关闭多余服务、执行命令、脚本操作和SSH选项的使用。还涵盖了SELinux的查看与控制,以及字符串操作和环境变量管理等内容。
摘要由CSDN通过智能技术生成

解压缩命令

  • .tar

    #解包:(注:tar是打包,不是压缩!)
    tar xvf FileName.tar
    #打包:
    tar cvf FileName.tar DirName
    
  • .gz

    # 解压:
    gunzip FileName.gz
    gzip -d FileName.gz
    # 压缩:
    gzip FileName
    
  • .tar.gz 和 .tgz

    # 解压:
    tar zxvf FileName.tar.gz
    # 压缩:
    tar zcvf FileName.tar.gz DirName
    
  • .bz2

    # 解压:
    bzip2 -d FileName.bz2
    bunzip2 FileName.bz2
    # 压缩: 
    bzip2 -z FileName
    
  • .tar.bz2

    # 解压:
    tar jxvf FileName.tar.bz2 或tar –bzip xvf FileName.tar.bz2
    # 压缩:
    tar jcvf FileName.tar.bz2 DirName
    
  • .bz

    # 解压:
    bzip2 -d FileName.bz
    bunzip2 FileName.bz
    # 压缩:未知
    
  • .tar.bz

    # 解压:
    tar jxvf FileName.tar.bz
    # 压缩:未知
    
  • .Z

    # 解压:
    uncompress FileName.Z
    # 压缩:
    compress FileName
    
  • .tar.Z

    # 解压:
    tar Zxvf FileName.tar.Z
    # 压缩:
    tar Zcvf FileName.tar.Z DirName
    
  • .zip

    # 解压:
    unzip FileName.zip
    # 压缩:
    zip FileName.zip DirName
    # 压缩一个目录使用 -r 参数,-r 递归。例: 
    zip -r FileName.zip DirName
    

关掉一些不必要的服务

  • 一般端口

    chkconfig --list | grep "3:开" | egrep -v "sshd|network|rsyslog|sysstat|crond" | awk '{print "chkconfig",$1,"off"}' 
    chkconfig --list | grep "3:开" | egrep -v "sshd|network|rsyslog|sysstat|crond" | awk '{print "chkconfig",$1,"off"}' | bash 
    
    # 关闭25端口
    sudo systemctl stop postfix
    sudo systemctl disable postfix
    # 关闭631端口(未彻底关闭,过段时间又会启动)
    sudo systemctl stop cups
    sudo systemctl disable cups
    # 111
    sudo systemctl stop rpcbind.socket
    sudo systemctl stop rpcbind
    sudo systemctl disable rpcbind.socket 
    sudo systemctl disable rpcbind
    # 5353/udp avahi-daemon
    sudo systemctl stop avahi-daemon.socket;
    sudo systemctl stop avahi-daemon.service
    sudo systemctl disable avahi-daemon.socket 
    sudo systemctl disable avahi-daemon.service
    # 6000端口,进程是X,可能是图形界面,网上查是这么关的,但是关闭失败
    # sudo sed -i 's/^serverargs\=\"\"/serverargs\=\"-nolisten tcp\"/' /usr/bin/startx
    # 禁用IPv6
    sudo sed -i -e '/net.ipv6.conf.all.disable_ipv6/d' /etc/sysctl.conf
    sudo sh -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
    sudo sed -i 's/^\(GRUB_CMDLINE_LINUX\=\"\)\(crashkernel=auto\)/\1ipv6.disable\=1 \2/' /etc/default/grub
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    # 恢复IPv6
    sudo sed -ri 's/^net.ipv6.conf.all.disable_ipv6.*/#&/' /etc/sysctl.conf
    sudo sed -i 's/^\(GRUB_CMDLINE_LINUX=\"\)ipv6.disable=1\( *crashkernel=auto.*\)/\1\2/' /etc/default/grub
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  • 关于192.168.122.1:53
    在我们使用虚拟机管理器的图形界面来安装虚拟机的时候,自动创建虚拟网桥和虚拟网卡。但是我们很少会在一个虚拟机中再安装一个虚拟机,所以,我们可以将该网桥删除。

    使用ifconfig查看发现,有3个网卡:ens33、lo和virbr0,把virbr0干掉即可:

    # 安装libvirt,不然会提示找不到virsh命令
    sudo yum -y install libvirt
    sudo virsh net-list
    sudo virsh net-destroy default
    sudo virsh net-undefine default
    sudo systemctl restart libvirtd
    sudo yum -y remove libvirt
    

ssh远程执行命令

执行简单命令

ssh ccc@192.168.5.51 "ls"

执行交互命令,需要-t选项

ssh -t ccc@192.168.5.51 "sudo ls"

执行多个命令,用封号隔开

ssh ccc@192.168.5.51 "ls; pwd"

执行多个命令,多行输入,一行一个命令,用单引号或双引号,如果命令有双引号,外面就用单引号

ssh ccc@192.168.5.51 "
ls
pwd
/opt/test.sh haha
"
# 或者这样,remotessh可以随便改成别的,两个一样就行,第二个必须顶头,前面不能有缩进
ssh -tt ccc@192.168.5.51 << remotessh
cd /opt
pwd
ls /opt
/opt/test.sh haha
exit
remotessh

引用变量,需要-c选项

TMP=Hello
ssh ccc@192.168.5.51 bash -c "'
echo $TMP
'"
unset TMP

远程执行脚本

执行本地的脚本,-s

echo -e "ls\npwd\necho \$1" > test.sh
chmod +x test.sh
ssh ccc@192.168.5.51 'bash -s' < test.sh haha

执行对方的脚本

# 如果需要用到/etc/profile里面的路径设置,命令必须增加source /etc/profile;
# 如: ssh ccc@192.168.5.51 "source /etc/profile;java -version"
ssh ccc@192.168.5.51 "/opt/test.sh haha"
# 对方的/opt/test.sh里面没有sudo,否则需要使用-t,并手动输入口令
ssh -t ccc@192.168.5.51 "/opt/test.sh haha"

执行对方的脚本,带交互

#!/usr/bin/expect -f
# 执行ssh服务器上的命令或脚本,必须有类似sudo这种需要用户交互的才用次脚本,否则直接运行,没必要用次脚本
# 需要4个参数:ip、usr、pwd、cmd,其中cmd即远程机器中的脚本,绝对路径,允许带参数
# 例: TMP=hahaha;./test1.sh 192.168.5.51 user01 123456 "/opt/test.sh ${TMP}"

set timeout 5
set ip [lindex $argv 0]
set usr [lindex $argv 1]
set pwd [lindex $argv 2]
set cmd [lindex $argv 3]

spawn ssh -t ${usr}@${ip} ${cmd}

expect {
    "(yes/no)?" {
        send "yes\n"
        expect "password:"
        send "${pwd}\n"
    }
    "password:" {
        send "${pwd}\r"
    }
    "密码:" {
        send "${pwd}\r"
    }
}
expect eof
# interact表示保持交互
# interact

关闭SELinux

查看

getenforce

关闭

# 临时关闭
setenforce 0
# 永久关闭
vi /etc/selinux/config
# 将SELINUX=enforcing 改为 SELINUX=disabled 

字符串操作(长度,读取,替换)

表达式含义
${#string}$string的长度
${string:position} s t r i n g 中 , 从 位 置 string中, 从位置 string,position开始提取子串
${string:position:length} s t r i n g 中 , 从 位 置 string中, 从位置 string,position开始提取长度为$length的子串
${string#substring}从变量 s t r i n g 的 开 头 , 删 除 最 短 匹 配 string的开头, 删除最短匹配 string,substring的子串
${string##substring}从变量 s t r i n g 的 开 头 , 删 除 最 长 匹 配 string的开头, 删除最长匹配 string,substring的子串
${string%substring}从变量 s t r i n g 的 结 尾 , 删 除 最 短 匹 配 string的结尾, 删除最短匹配 string,substring的子串
${string%%substring}从变量 s t r i n g 的 结 尾 , 删 除 最 长 匹 配 string的结尾, 删除最长匹配 string,substring的子串
${string/substring/replacement}使用 r e p l a c e m e n t , 来 代 替 第 一 个 匹 配 的 replacement, 来代替第一个匹配的 replacement,substring
${string//substring/replacement}使用 r e p l a c e m e n t , 代 替 所 有 匹 配 的 replacement, 代替所有匹配的 replacement,substring
${string/#substring/replacement}如果 s t r i n g 的 前 缀 匹 配 string的前缀匹配 stringsubstring, 那么就用 r e p l a c e m e n t 来 代 替 匹 配 到 的 ∥ replacement来代替匹配到的\| replacementsubstring
${string/%substring/replacement} s t r i n g 的 后 缀 匹 配 string的后缀匹配 stringsubstring, 那么就用 r e p l a c e m e n t 来 代 替 匹 配 到 的 replacement来代替匹配到的 replacementsubstring

变量默认值

表达式含义
${vari:-defaultValue}当var没有定义时,此时使用defaultValue, 而vari依然为空,没有改变值
${vari:=defaultValue}当vari没有定义时,此时使用defaultValue, 同时vari也被赋值为defaultValue
${vari:+value}当vari定义并且不为空,将用value替换vari的值,否则什么也不做, 与${vari:-value}相反
${vari:?value}当vari没有定义时,或者定义了值为空,将在终端报错并且退出,用于检查是否定义以及是否为空

文件比较符

表达式含义
-e判断对象是否存在
-d判断对象是否存在,并且为目录
-f判断对象是否存在,并且为常规文件
-L判断对象是否存在,并且为符号链接
-h判断对象是否存在,并且为软链接
-s判断对象是否存在,并且长度不为0
-r判断对象是否存在,并且可读
-w判断对象是否存在,并且可写
-x判断对象是否存在,并且可执行
-O判断对象是否存在,并且属于当前用户
-G判断对象是否存在,并且属于当前用户组
-nt判断file1是否比file2新 [ “/data/file1” -nt “/data/file2” ]
-ot判断file1是否比file2旧 [ “/data/file1” -ot “/data/file2” ]

逻辑运算符

表达式含义-
=等于应用于:整型或字符串比较 如果在[] 中,只能是字符串
!=不等于应用于:整型或字符串比较 如果在[] 中,只能是字符串
<小于应用于:整型比较 在[] 中,不能使用 表示字符串
>大于应用于:整型比较 在[] 中,不能使用 表示字符串
-eq等于应用于:整型比较
-ne不等于应用于:整型比较
-lt小于应用于:整型比较
-gt大于应用于:整型比较
-le小于或等于应用于:整型比较
-ge大于或等于应用于:整型比较
-a双方都成立(and)逻辑表达式 –a 逻辑表达式
-o单方成立(or)逻辑表达式 –o 逻辑表达式
-z空字符串
-n非空字符串

set命令

-a标示已修改的变量,以供输出至环境变量。
-b使被中止的后台程序立刻回报执行状态。
-C转向所产生的文件无法覆盖已存在的文件。
-dShell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e若指令传回值不等于0,则立即退出shell。
-f取消使用通配符。
-h自动记录函数的所在位置。
-HShell:可利用"!"加<指令编号>的方式来执行history中记录的指令。
-k指令所给的参数都会被视为此指令的环境变量。
-l记录for循环的变量名称。
-m使用监视模式。
-n只读取指令,而不实际执行。
-p启动优先顺序模式。
-P启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t执行完随后的指令,即退出shell。
-u当执行时使用到未定义过的变量,则显示错误信息。
-v显示shell所读取的输入值。
-x执行指令后,会先显示该指令及所下的参数。

查看进程的环境变量

当Fabric网络的状态数据库使用CouchDB时,如何保护CouchDB口令是一个问题。

查看进程号

pgrep peer
# 或者通过查看端口,也可以看到进程号,如
sudo netstat -ntlp

查看环境变量

cat /proc/14191/environ | tr '\0' '\n'
# cat /proc/14191/environ | tr '\0' '\n' | grep COUCHDB

openssl

ans1parse

openssl asn1parse -in ca.key
openssl x509 -text -noout -in server.pem
echo MEYCIQC1obiO2+lwn9hZBGvwyGADC9xmNZhes//MiTWDcxvxWAIhAMBWItE5NDQ0vP4NIdn75DtDPL//BGfbKZKERBQXEvFc | gmssl base64 -d -out sign.data

查看用户

  1. 用户列表文件:/etc/passwd/
  2. 用户组列表文件:/etc/group
  3. 查看系统中有哪些用户:
    $ cut -d : -f 1 /etc/passwd
    
  4. 查看可以登录系统的用户
    $ cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1
    
  5. 查看系统中有哪些用户组
    $ cut -d : -f 1 /etc/group
    
  6. 查看可以登录系统的用户组
    $ cat /etc/group | grep -v /sbin/nologin | cut -d : -f 1
    
  7. 查看用户操作:w命令(需要root权限)
  8. 查看某一用户:w 用户名
  9. 查看登录用户:who
  10. 查看用户登录历史记录:last
  11. 修改root用户密码:passwd
  12. root用户修改其他用户密码:
    passwd <user_name>
    

关于"Too many open files"

# 查看某进程的限制:
cat /proc/81824/limits
cat /proc/`lsof -ti:5984`/limits

# vim /etc/security/limits.conf 和 /etc/security/limits.d/20-nproc.conf
# 新建一个独立文件/etc/security/limits.d/nofilelimit.conf,重启生效(ssh连接无需重启,直接生效)
sudo sh -c "echo -e '* soft nofile 65535\n* hard nofile 65535' > /etc/security/limits.d/nofilelimit.conf"
# ssh远程执行脚本
ssh -t ccc@192.168.8.154 "sudo sh -c 'echo -e \"* soft nofile 65535\n* hard nofile 65535\" > /etc/security/limits.d/nofilelimit.conf'"



# ulimit -a

# 要让上述设置在ssh中生效,需在/etc/ssh/sshd_config文件中设置:
UsePAM Yes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值