linux 常用命令大全

printf

printf其实本质就是一个加强版的echo 命令,与C语言当中的prinf函数类似
%d 有符号数字
%o 无符号八进制数字
%u 无符号数字
%x 无符号十六进制数字 使用小写字母(a-f)
%g 打印字符类似%f或者%e
%e 科学计数法打印数字
%s 将相应的字符转换为字符串
%f 浮点数打印

修饰符

<N> 任意数字,指定打印字符的最小宽度,如果字符小于打印宽度会输出空格进行补齐,如果大于宽度会被自动延长
. 配合上述最小宽度使用,指定如果字符大于输出后不在扩展宽度,而是截断,’%.s’这样是完全截断也就是不会被打印输出等价于’%.0s’.
* 通过参数指定最小宽度 printf "%*s" 2 '123' 那么2就是最小位宽
- 输出格式左对齐,默认是右对齐
0 使用0进行补齐而不是空格进行补齐
<space> 输出为正数空格进行补齐, 输出为负数减号进行补齐(-)
+ 输出为正数加号(+)进行补齐, 输出为负数减号进行补齐(-)
'

示例:

printf  "%s %s" $msg  $msg
printf "%1.2f" 1.1222 # 1.12

可以输出固定的字符串长度

printf "%-3s" $str #输出三位固定宽的字符串

read

read 之前在shell语法总结中渗透过这个命令.
常用的注意点如下:
read -a 获取一个数组变量
read -s在终端输入的内容会不显示,类似输入密码的模式
read -t timeout 获取输入值在指定的超时
read var1 var2 < file 注意当从文件当中读取内容,赋值给变量时,是以空格为分割,而不是换行符,因此采用while 循环的方式去读取文件,详情见shell语法总结.

如果没有设置read要赋值的变量,那么会默认复制到$REPLY变量当中

read 
var="$REPLY"
echo $var

let,eval,set

let命令主要是进行赋值和一些算操作与$(())类似

a=1
let a+=5
echo $a  #6

eval 主要功能是拓展命令的执行方式
eval “grep $1”

set命令,-a 可以设置环境变量
常用命令

set -- $variable  #将$1,$n参数赋值给$variable

chmod

修改文件或目录权限
命令比较简单
4:读取 2:写 1:执行

#权限设置中涉及三种人群,所属者,所属组,其他
chmod 755 dir

ln

说到这个命令,就不得不说一下,Linux系统当中的软硬链接的区别
软链接(符号链接):
在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
硬连接:
多个文件名,指向同一索引节点(Inode Index),可以用ls -li命令查看
硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能。
不可对目录建立硬连接,只能在同一文件系统中建立硬链接。

源文件被删除后,软链接不存在,而硬链接还存在
一般情况下,建立软链接为多数

ln -s f f1 #建立软连接
ln f f2 #建立硬链接

find

查找文件利器的命令

先说一下,文件的三个时间
ctime 最后状态改改变的时间(chmod )
mtime 文件最后修改的
atime 最后接近文件的时间

stat file #查看文件的状态

–type 选项 f 常规文件,d 目录,l 软链接
-exec rm rf {} \; 将找到的文件删除,{}代表所找到的文件
-name 指定查询文件的名称,例:find . -name '*jpg'
-i iNode index
-owner 指定所属者
-ctime 根据文件的创建时间, 例 find ./ --ctime -7' 查找7天内创建的文件
-mtime 根据文件的修改时间 例 find ./ --mtime -7' 查找7天内修改的文件
-atime 根据文件的访问时间 例 find ./ --aimte +7' 查找7天之前访问的文件
-cmin,-amin,-mmin 含义与上述一样,单位表示分钟.
-size 表示大小 例:-size +7G大于7G的文件
-减号表示小于,+加号表示大于

find /home/www -type f -actime -7

seq

seq 可以生成一系列的数字,在实际开发当中比较常用,例如生成带前缀的数字,用于for循环执行命令等.

seq [OPTION] FIRST 起始数字从1开始,FIRST指定最终数字
seq [OPTION] FIRST LAST FIRST:起始数字, LAST:终止数字
seq [OPTION] FIRST INCREMENT LAST FIRST:起始数字 INCREMENT:步长 LAST:终止数字

-w 输出固定宽度,如果宽度小,自动加前缀0补齐
-s 指定输出每个数的分隔符默认是\n
-f 指定输出格式与printf类似

假设我们需要执行一些重复的任务,但是每个任务的参数不一样:

for i in $(seq -w 10) ; do echo $i ; done  

tr

tr [OPTION] SET1 SET2
tr命令可以方便的用来替换单个字符.
支持POSIX字符集替换
-t 表示按照字符集1进行裁断
-d 删除字符集1
-c 配合-d使用输出补集
-s 当输入中出现了多个连续的SET1中的字符,当做一个字符进行替换

tr '\n' ' ' file #将换行替换为空格
tr 'ABC' CBS'
$ echo 'ttestt' | tr -s 't' 'a'
# aesa 如果不添加-s 那么输出则为 aaesaa

面对多个字符无法进行替换,可以采用sed命令.

xargs

xargs 命令获取标准输入,默认分割是空格或者换行,
将输入转化为参数,默认处理 使用echo

-d 分隔符设置
-l 最大行数
-n 最大参数
–max-procs 最大处理的进程数,如果为0,那么会一直
-p可以提升输出效率,开启多个进程
-t打印标准错误输出
-i 采用替换字符串测略,类似find命令
-I替换命令

ls . | xargs -i -t cp ./{} $1
ls . | xargs -I {} cp ./{} $1

小技巧:可以用xargs来进行行转列
假设我们需要将一列数据转换为一行并且用逗号分割

cat /tmp/sku | xargs |sed -r 's/\W/,/g'

sort,uniq

sort 用来各种个样的排序,
uniq 可以用来去重

sort 命令本身也支持去重
-r 反转排序的顺序,默认是升序
-u 去除重复行
-n 按数字排序(一般情况用到数字都需要加上否则会得出不正确的结果)
-t 指定相应的分割符,配合-k一起使用
-k 指定被分割的列,起始从1开始
-f 排序时忽略大小写字母

uniq:
注意uniq在某些情况下无法正确输出唯一结果
-c 计数(重要的功能)
-i 忽略大小写
-u 找出唯一存在的一行

cat file | sort -u

uniq 去重

cat file | uniq -u

cut剪切命令

一般情况下建议用awk进行代替
分割的LIST:

List类型(单位:字段,字符,字节)描述
N第N或者字符
N-从第N个开始到改行最后
N-M该行当中的从N到M
-M从一开始该行到M

上述LIST可以逗号进行分割,表示多个区间.例如1,4-5

-f 按照分割符进行截取,参数参照上述表格
-c 按照字符截取参数参照上述表格
-b 按照字节进行截取参数参照上述表格
-d 默认的分隔符为一个tab,如果需要以空格分割需要制定,只能配合-f使用
–output-delimiter 指明输出分隔符,输出每个字段之间的分割

cut -c 1-3  filename #按照字符切割
cut -f 1-3 -d , filename #取filename的1-3字段,-d指定分隔符为,

paste

paste 命令可以将两个文件合成一个文件

paste file1 file2

grep

-i 忽略大小写
-w 匹配字符
–color=red 设置匹配字符的颜色
-A 下文显示行数
-B 上文显示行数
-R 查找文件,在当前目录以及子目录
-n 显示匹配到的行号
-v 去除匹配的选项
-c 统计匹配的个数
-m 输出最大行数
-P 使用perl正则匹配模式,perl正则匹配支持懒惰模式等,因此推荐使用-P参数

pcregrep

pcregrep 特点:

-M :支持多行匹配,grep是不支持的
-u :支持utf8模式
–locale=localename 在匹配模式中使用哪种localename, locale清晰的定义了本地语言环境.
-A 下文显示行数
-B 上文显示行数

pcregrep -M "UPDATE.*orders.*\n^(^WHERE)\n"

grep之间的标准

date命令

format格式以+号开头指定格式化输出.

+%s unix时间戳
+%A 获取当前时间的为星期几 %a为简称
+%B 获取当前日期的月份 %b简称
%y %m %d %M %S %H 分别对应年月日 分秒时
%j 一年当中的天数,获取剩余时间 date +%j

-d 从字符串中获取时间,例如 -d '@1497833869' @符号后指定的时间戳,-d '1 year ago' 获取一年前时间 -d '3 seconds email'
-u 世界统一时间

示例
时间转日期

date '+%s'
1497833869

时间戳转日期

date -d '@1497833869' '+%b %a'
Jun Mon
date -d '@1497833869' '+%Y-%m-%d %H:%M:%S'
2017-06-19 08:57:49

wc

word count 计数命令
-w 单词计数
-l 按行计数
-c 字节计数
-m 字符计数
-L 输出长度最长的一行

wc -l filename

tar

对于gzip需要使用 -z
对于bzip2需要使用 -j选项
常用压缩

tar -zcf file.tar.gz file #压缩
tar -xzf file.tar.gz #解压

nc

nc命令是一个简单的基于TCP或者UDP发送或者监听网络连接的协议.

-L 监听指定的IP以及端口号
-4 使用IPV4
-6 使用IPV6
-I 指定TCP接收buffer的大小
-O 指定TCP发送buffer的大小
-D 启用socket调试
-k 配合-L使用,保持监听状态
-p 指定源端口号
-n 不使用DNS或者服务查询
-u 使用UDP协议
-U 指定为UNIX socket
-v 开启观察模式
-s 指定发送端IP以及端口
-w 超时时间
-X 代理协议三个取值: “4” (SOCKS v.4), “5” (SOCKS v.5) and “connect” (HTTPS proxy)
-x 代理地址,是指发送请求时的代理地址

例:监听一个socket

nc -l 1234

例:发送简单的HTTP请求

printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

ss

之前一直使用的是netstat,但是通过manual发现netstat已经被废弃.
-n 解析服务器名字或者端口转换为解析后的IP地址或者协议名称,例如22端口会转换成ssh.
-a 展示所有的sockets
-l 展示正在监听的端口
-o 展示该监听端口的活跃时间信息
-e 展示拓展信息
-s 展示统计信息
-p 展示进程信息,pid以及user
-t 展示TCP socket
-u 展示UDP socket
-x 展示unix domain socket
-4 展示IP4socket
-6 展示IP6socket

使用示例:

ss -ntlap  
State      Recv-Q Send-Q                                  Local Address:Port                                    Peer Address:Port 
LISTEN     0      50                                                 :::2999                                              :::*     
LISTEN     0      511                                                 *:8888                                               *:*      users:(("nginx",46106,27),("nginx",46107,27),("nginx",46108,27),("nginx",46109,27),("nginx",46110,27),("nginx",46111,27),("nginx",46112,27),("nginx",46113,27),("nginx",46114,27),("nginx",46115,27))

curl

curl 用于发送多种协议的请求(HTTP, HTTPS, FTP,FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or FILE).

-b 指定cookie
-c offset 指定断点下载的offset.
-d 指定传送的数据内容,curl会默认添加content-type application/x-www-form-urlencoded头.
-F 传送表单内容会添加Content-Type multipart/form-data头. 可以同过-F上传文件,但是文件路径必须要使用@标识. 例如:-F”web=@index.html;type=text/html”
-G 指定为get请求,-d的data会添加到url之后
-H 指定求的header
-M 最大执行命令的时间
-X 指定请求方法
-o file 替代标准输出输出到文件当中
-s silent模式,不输出任何信息
-S 配合-s,输出错误信息
-u 指定用户名和密码
-v 开启观察模式
-w 指定一些变量追加到输出当中,使用变量%{variable}
默认支持的变量:

http_code
time_total 总耗时(秒)
time_connect 连接时间(秒)
size_download  总下载字节
size_upload    总上传字节.
size_header   header字节大小
size_request 请求字节大小
speed_download 下载平均速度
speed_upload 上传平均速度

curl -w'Host:127.0.0.1 %{size_request}  %{size_request}    ' http://127.0.0.1

wget

wget 非交互式网络下载器.wget提供了丰富的功能用于网络下载,例如网页抓取,为文件下载提供了丰富的功能.

-b 以后台方式启动下载
-o logfile 输出所有的信息到logfile当中
-a logfile 追加所有信息到logfile当中
-d 开启debug输出
-q 关闭wget的输出
-v 开启观察输出,会输出所以可用数据
-nv 关闭观察输出
-i file 从文件当中读取urls
-t number 重试次数
-F 配合-i使用,将input做为html使用
-w seconds 指定每次请求的间隔秒数,一般在递归抓取网页时候可能会用到,防止访问过于频繁
-B URL 指定URL做为baseurl,例如将http://test/b.html 当解析../a.html 会解析为 http://test/a.html
-O file 所有输出都会被整合到一起写入到file里
-c 断点续传,如果文件已有不会重新下载,如果文件小于服务器文件会根据offset开始下载,如果文件大于服务器文件,wget无法判断,不会重新下载.
–progress=type(dot|bar) 改变指示器的样式
–spider 检查网页当中的连接是否存在,离真正的爬虫有一些距离,一般配合-F使用
-T seconds 设置超时时间

–user=user 指定user ftp,http授权信息
–password=password 指定password

–load–cookie file 从file当中加载cookie信息
–keep-session-cookies 保存session,下次请求也会使用
–header=’headerline’指定请求头:–header= ‘Accept-Charset: iso-8859-2’

–post-data=string 指定求的数据
–post-file=file 从file中读取请求数据

-r 开启递归请求,会把网页相关的链接会一一抓取存入到相应的目录
-l=depth 指定递归请求的深度

-D domain-list 指定抓取的域名

wget -rcBF -l1 https://www.thegeekstuff.com/2012/04/curl-examples/\?utm_source\=feedburner

System and Administrative Commands

展示用户相关信息
users
groups
id
w
who

用户相关的操作
useradd
userdel
usermod

用户组相关操作
groupdel
groupadd
groupmod

查看操作系统相关
uname -a
arch #系统架构
du #文件相关
df #文件系统相关
cat /etc/issue #查看到当前的发行版本

pidof

当对一个二进制可执行文件执行该命令时

pidof nginx
8235 8236 8237
pidof nginx | xargs ps #这样可以显示nginx相关的进程,可以找到master进程
#当然直接使用也可以
ps aux | grep nginx
#当需要查询一个脚本的pid号时,别忘记使用-x参数
pidof -x test.sh
8688

here document

here document 极大的方便了实际开发程序,应用比较广泛,在PHP,swift等语言当中存在着较多的应用.

#!/bin/bash
temp=123
$variable=$(cat <<EOF
`ls -l` #打印该命令的执行结果
$temp  #输出变量的值
$(( 3 + 2 )) #输出5
EOF
)
echo $variable  #将会输出EOF文档当中 的值

here string

here string 的出现完美替代了 输入重定向尴尬的问题,详见下方的示例

#!bin/bash
variable=test
cat <<< "$variable" #输出test

command <<< “str” 将here string 当做标准输入,传递到command命令当中

subshell

subshell 是被shell或shell 脚本启动的子进程


(
 IFS=:
 PATH=/bin
 unset TERMINFO
 set -C
 shift 5
 exit 3 # Only exits the subshell!
)
# The parent shell has not been affected, and the environment is preserved.
COMMAND6
COMMAND7

被圆括号包围着的命令会启动一个子进程去处理

What is the difference between “Redirection” and “Pipe”?

原文链接
总体来说
重定向符 是把输出 输出到文件或者stream流 当中
而管道符是将输出输出到另一个程序当中

进程替换也可以实现管道类似功能,但是本质还是类似于,将进程处理的结果放到/dev/fd/n这个文件当中,然后将文件当中的结果传递给另一个进程。

wc -l <(cat test.file)

注意:<>符号之间不能存在空格

Difference between < < and pipe

< <在传值时变量的值会保留更改,而在pipe当中不会保留值的更改

(
y=1
while read line 
do 
   ((y++))
done < <(ls -al)
echo $y
)
(
y=2
ls -al | while read line
do
    ((y++))
done    
echo $y    

/proc

在proc目录中我们可以获得进程相关的信息文件,
一般存储的方式为/proc目录中存取的相关的信息文件
/proc/pid/

注意:不要向/proc写文件,可能会造成系统崩溃,或者程序异常

echo

echo 语法输出颜色
方式1

echo -e "\033[4mThis is underlined text.\033[0m"

输出下划线,\033[4m中的\033 m固定格式,数字4 代表下划线,0代表关闭,1代表加粗

方式2

echo -e '\E[COLOR1;COLOR2m]'; tput sgr0

tput sgr0 命令的目的告诉终端恢复原来的颜色
COLOR1是指前景色,COLOR2是指背景色,m是终止序列的转义,接下来是字符串

ColorForegroundBackground
black3040
red3141
green3242
yellow3343
blue3444
magenta3545
cyan3646
white3747
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值