2019年 · Linux

shell 中的$0 $1 $* $@ $# $$ $? $() $(())

$0: 脚本本身文件名称
$1: 命令行第一个参数,$2为第二个,以此类推
$*: 所有参数列表
$@: 所有参数列表
$#: 参数个数
$$: 脚本运行时的PID
$?: 脚本退出码

∗与@的区别

当命令行为test.sh 1 2 3
"$*“表示"1 2 3”
"$@“表示"1” “2” “3”
二者没有被引号括起来时是一样的都为"1 2 3",只有当被引号括起来后才表现出差异

 

$()  等同于: ··(反引号):运行一段命令
$(()) 进行数字运算 
# a=3;b=2;c=5
# echo $((a+b*c))
2019年 · Linux

linux shell实现 URL 编码/解码方法

root@localhost:/data# cat 111.txt
aaa aaaaa
bbbbbbb
ccc,ccc
dd,dddd
#文件多行转换成一行
root@localhost:/data# cat 111.txt |sed ‘:a;N;$!ba;s/\n/\_/g’ -|sed ‘s/[[:space:]]/\_/g;s/\,/\_/g’
aaaaaaaa_bbbbbbb_cccccc_dddddd
(1)编码的两种方法:
root@localhost:/data# cat 111.txt |sed ‘:a;N;$!ba;s/\n/\_/g’ -|sed ‘s/[[:space:]]/\_/g’ |sed ‘s/\,//g’|tr -d ‘\n’ | xxd -plain | sed ‘s/\(..\)/%\1/g’
%61%61%61%61%61%61%61%61%5f%62%62%62%62%62%62%62%5f%63%63%63%63%63%63%5f%64%64%64%64%64%64
root@localhost:/data# cat 111.txt |sed ‘:a;N;$!ba;s/\n/\_/g’ -|sed ‘s/[[:space:]]/\_/g’ |sed ‘s/\,//g’|tr -d ‘\n’ |od -An -tx1|tr ‘ ‘ %
%61%61%61%61%61%61%61%61%5f%62%62%62%62%62%62%62
%5f%63%63%63%63%63%63%5f%64%64%64%64%64%64

(2)解码的两个步骤:
root@localhost:/data# url=”%61%61%61%61%61%61%61%61%5f%62%62%62%62%62%62%62%5f%63%63%63%63%63%63%5f%64%64%64%64%64%64″
root@localhost:/data# printf $(echo -n $url |sed ‘s/\\/\\\\/g;s/\(%\)\([0-9a-fA-F][0-9a-fA-F]\)/\\x\2/g’)”\n”
aaaaaaaa_bbbbbbb_cccccc_dddddd

2019年 · Linux

Centos 6.x 在线升级openssh版本

一、升级系统版本:
[root@localhost ~]# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final

二、安装telnet-server
升级ssh失败的话连接会断开,所以必须先装个telnet,用telnet登录上去操作
yum -y install telnet-server

更改配置文件,允许telnet远程连接:
vim /etc/xinetd.d/telnet
将disable = yes改为 disable = no,退出保存。
然后启动telnet服务:/etc/init.d/xinetd start
然后在客户端登录一下试试,这里注意一点,如果想用root用户登录,还要再改一点配置:vim /etc/securetty

在末尾添加几行:
pts/0
pts/1
pts/2
pts/3
pts/4

三、升级openssh

注意,从这里开始,就要用刚刚装好的telnet登录来操作了。
先关闭ssh:service sshd stop
然后安装openssl的开发版,编译openssh时需要它:yum install -y openssl openssl-devel
下载openssh-7.8p1.tar.gz包进行版本更新,参考完整版安装指南:http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/INSTALL
如果没有特殊需求,就是三个命令:
./configure && make &&
make install

启动sshd服务:/etc/init.d/sshd start

退出再重新登录,运行

ssh  -V

可以查看到openssh已经更新为7.8
[root@localhost ~]# ssh -V
OpenSSH_7.8p1, OpenSSL 1.0.1e-fips 11 Feb 2013
最后把telnet服务停掉,并设置默认不启动状态

2019年 · Linux

解决报错:error: The requested URL returned error: 401 Unauthorized while accessing

问题
报错:error: The requested URL returned error: 401 Unauthorized while accessing
git版本:1.7.1

解决方法一:指定用户
git clone https://github.com/org/project.git

换成
git clone https://username@github.com/org/project.git
或者
git clone https://username:password@github.com/org/project.git

在push或者pull出出现的话,则需要更改远程地址
git remote set-url origin https://username@github.com/org/project.git

解决方法二:去除验证
git config –global http.sslverify false

解决方法三:(推荐)
升级git 版本≥1.7.10

解决方法四:
添加ssh秘钥

2019年

运维老司机总结:常用的150个命令

说到运维大家总是想到的是修网络的,其实就修网络的学问也是很大的,现在来听听一位老运维总结下在运维工程中,常用的150个命令汇总。

线上查询及帮助命令(2个)

  • man:查看命令帮助,命令的词典,更复杂的还有info,但不常用。
  • help:查看Linux内置命令的帮助,比如cd命令。

文件和目录操作命令(18个)

  • ls:全拼list,功能是列出目录的内容及其内容属性信息。
  • cd:全拼change directory,功能是从当前工作目录切换到指定的工作目录。
  • cp:全拼copy,其功能为复制文件或目录。
  • find:查找的意思,用于查找目录及目录下的文件。
  • mkdir:全拼make directories,其功能是创建目录。
  • mv:全拼move,其功能是移动或重命名文件。
  • pwd:全拼print working directory,其功能是显示当前工作目录的绝对路径。
  • rename:用于重命名文件。
  • rm:全拼remove,其功能是删除一个或多个文件或目录。
  • rmdir:全拼remove empty directories,功能是删除空目录。
  • touch:创建新的空文件,改变已有文件的时间戳属性。
  • tree:功能是以树形结构显示目录下的内容。
  • basename:显示文件名或目录名。
  • dirname:显示文件或目录路径。
  • chattr:改变文件的扩展属性。
  • lsattr:查看文件扩展属性。
  • file:显示文件的类型。
  • md5sum:计算和校验文件的MD5值。

查看文件及内容处理命令(21个)

  • cat:全拼concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。
  • tactac:是cat的反向拼写,因此命令的功能为反向显示文件内容。
  • more:分页显示文件内容。
  • less:分页显示文件内容,more命令的相反用法。
  • head:显示文件内容的头部。
  • tail:显示文件内容的尾部。
  • cut:将文件的每一行按指定分隔符分割并输出。
  • split:分割文件为不同的小片段。
  • paste:按行合并文件内容。
  • sort:对文件的文本内容排序。
  • uniq:去除重复行。oldboy
  • wc:统计文件的行数、单词数或字节数。
  • iconv:转换文件的编码格式。
  • dos2unix:将DOS格式文件转换成UNIX格式。
  • diff:全拼difference,比较文件的差异,常用于文本文件。
  • vimdiff:命令行可视化文件比较工具,常用于文本文件。
  • rev:反向输出文件内容。
  • grep/egrep:过滤字符串,三剑客老三。
  • join:按两个文件的相同字段合并。
  • tr:替换或删除字符。
  • vi/vim:命令行文本编辑器。

文件压缩及解压缩命令(4个)

  • tar:打包压缩。oldboy
  • unzip:解压文件。
  • gzipgzip:压缩工具。
  • zip:压缩工具。

信息显示命令(11个)

  • uname:显示操作系统相关信息的命令。
  • hostname:显示或者设置当前系统的主机名。
  • dmesg:显示开机信息,用于诊断系统故障。
  • uptime:显示系统运行时间及负载。
  • stat:显示文件或文件系统的状态。
  • du:计算磁盘空间使用情况。
  • df:报告文件系统磁盘空间的使用情况。
  • top:实时显示系统资源使用情况。
  • free:查看系统内存。
  • date:显示与设置系统时间。
  • cal:查看日历等时间信息。

搜索文件命令(4个)

  • which:查找二进制命令,按环境变量PATH路径查找。
  • find:从磁盘遍历查找文件或目录。
  • whereis:查找二进制命令,按环境变量PATH路径查找。
  • locate:从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用updatedb更新库。

用户管理命令(10个)老男孩

  • useradd:添加用户。
  • usermod:修改系统已经存在的用户属性。
  • userdel:删除用户。
  • groupadd:添加用户组。
  • passwd:修改用户密码。
  • chage:修改用户密码有效期限。
  • id:查看用户的uid,gid及归属的用户组。
  • su:切换用户身份。
  • visudo:编辑/etc/sudoers文件的专属命令。
  • sudo:以另外一个用户身份(默认root用户)执行事先在sudoers文件允许的命令。

基础网络操作命令(11个)老男孩

  • telnet:使用TELNET协议远程登录。
  • ssh:使用SSH加密协议远程登录。
  • scp:全拼secure copy,用于不同主机之间复制文件。
  • wget:命令行下载文件。
  • ping:测试主机之间网络的连通性。
  • route:显示和设置linux系统的路由表。
  • ifconfig:查看、配置、启用或禁用网络接口的命令。
  • ifup:启动网卡。
  • ifdown:关闭网卡。
  • netstat:查看网络状态。
  • ss:查看网络状态。

深入网络操作命令(9个)

  • nmap:网络扫描命令。
  • lsof:全名list open files,也就是列举系统中已经被打开的文件。
  • mail:发送和接收邮件。
  • mutt:邮件管理命令。
  • nslookup:交互式查询互联网DNS服务器的命令。
  • dig:查找DNS解析过程。
  • host:查询DNS的命令。
  • traceroute:追踪数据传输路由状况。
  • tcpdump:命令行的抓包工具。

有关磁盘与文件系统的命令(16个)

  • mount:挂载文件系统。
  • umount:卸载文件系统。
  • fsck:检查并修复Linux文件系统。
  • dd:转换或复制文件。
  • dumpe2fs:导出ext2/ext3/ext4文件系统信息。
  • dumpe:xt2/3/4文件系统备份工具。
  • fdisk:磁盘分区命令,适用于2TB以下磁盘分区。
  • parted:磁盘分区命令,没有磁盘大小限制,常用于2TB以下磁盘分区。
  • mkfs:格式化创建Linux文件系统。
  • partprobe:更新内核的硬盘分区表信息。
  • e2fsck:检查ext2/ext3/ext4类型文件系统。
  • mkswap:创建Linux交换分区。
  • swapon:启用交换分区。
  • swapoff:关闭交换分区。
  • sync:将内存缓冲区内的数据写入磁盘。
  • resize2fs:调整ext2/ext3/ext4文件系统大小。

系统权限及用户授权相关命令(4个)

  • chmod:改变文件或目录权限。
  • chown:改变文件或目录的属主和属组。
  • chgrp:更改文件用户组。
  • umask:显示或设置权限掩码。

查看系统用户登陆信息的命令(7个)

  • whoami:显示当前有效的用户名称,相当于执行id -un命令。
  • who:显示目前登录系统的用户信息。
  • w:显示已经登陆系统的用户列表,并显示用户正在执行的指令。
  • last:显示登入系统的用户。
  • lastlog:显示系统中所有用户最近一次登录信息。
  • users:显示当前登录系统的所有用户的用户列表。
  • finger:查找并显示用户信息。

内置命令及其它(19个)

  • echo:打印变量,或直接输出指定的字符串
  • printf:将结果格式化输出到标准输出。
  • rpm:管理rpm包的命令。
  • yum:自动化简单化地管理rpm包的命令。
  • watch:周期性的执行给定的命令,并将命令的输出以全屏方式显示。
  • alias:设置系统别名。
  • unalias:取消系统别名。
  • date:查看或设置系统时间。
  • clear:清除屏幕,简称清屏。
  • history:查看命令执行的历史纪录。
  • eject:弹出光驱。
  • time:计算命令执行时间。
  • nc:功能强大的网络工具。
  • xargs:将标准输入转换成命令行参数。
  • exec:调用并执行指令的命令。
  • export:设置或者显示环境变量。
  • unset:删除变量或函数。
  • type:用于判断另外一个命令是否是内置命令。
  • bc:命令行科学计算器

系统管理与性能监视命令(9个)

  • chkconfig:管理Linux系统开机启动项。
  • vmstat:虚拟内存统计。
  • mpstat:显示各个可用CPU的状态统计。
  • iostat:统计系统IO。
  • sar:全面地获取系统的CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU中断和网络等性能数据。
  • ipcs:用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。
  • ipcrm:用来删除一个或更多的消息队列、信号量集或者共享内存标识。
  • strace:用于诊断、调试Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
  • ltrace:命令会跟踪进程的库函数调用,它会显现出哪个库函数被调用。

关机/重启/注销和查看系统信息的命令(6个)

  • shutdown:关机。
  • halt:关机。
  • poweroff:关闭电源。
  • logout:退出当前登录的Shell。
  • exit:退出当前登录的Shell。
  • Ctrl+d:退出当前登录的Shell的快捷键。

进程管理相关命令(15个)

  • bg:将一个在后台暂停的命令,变成继续执行 (在后台执行)。
  • fg:将后台中的命令调至前台继续运行。
  • jobs:查看当前有多少在后台运行的命令。
  • kill:终止进程。
  • killall:通过进程名终止进程。
  • pkill:通过进程名终止进程。
  • crontab:定时任务命令。
  • ps:显示进程的快照。
  • pstree:树形显示进程。
  • nice/renice:调整程序运行的优先级。
  • nohup:忽略挂起信号运行指定的命令。
  • pgrep:查找匹配条件的进程。
  • runlevel:查看系统当前运行级别。
  • init:切换运行级别。
  • service:启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
原文转载于:http://network.51cto.com/art/201907/599828.htm