您的位置:首页 > 运维架构 > Linux

Linux 基础命令知识1

2015-07-05 16:08 621 查看




生成空白文件

touch c.txt



去掉字符串前后空格

echo "    a bc    " | awk 'gsub(/^ *| *$/,"")'



计算变量的length长度:

var="abc";echo ${#var}



查看进行Id

pgrep java



查看进行环境变量

cat /proc/${pid}/environ



超级用户的$UID 为0

if [ $UID -nq 0 ] ;then echo "Not su";fi;



Shell
中字符串进行数学运算,使用let 、 []、 (()) 、 expr

num1=5;num2=5;let result=num1+num2;echo $result;
result=$[ num1 + num2 ]
result=$[ $num1 + 4 ]
result=$(( num1 + num2 ))
resutl=`expr 3 + 4`
result=$(expr $num1 + 4)
#自加 自减 简写形式
let num1++; let num1--;  let num1+=4;

#########以上运算方法不支持浮点数运算
我们可以使用BC来做浮点数等精密运算
echo "4 * 0.56" | bc
通过scale设置小数位个数
echo "scale=2;3/8" | bc
计算平方根
echo "sqrt(100)" | bc
echo "10^10" | bc
进制转换:
echo "obase=2;100"|bc
echo "obase=8;100"|bc



命令:tee Copy standard input to each FILE, and also to standard output.

cat a.txt | tee -a copy.txt | cat -n # tee -a 表示是末尾追加不会覆盖 , cat -n 输出行号
ls | cat -n  > out.txt # ls 结果输出给cat



数组和关联数组

array_var=(1 2 4 5) # 注意是以空格分隔
echo ${array_var[0]} # 输出第一个值
echo ${array_var[*]} #输出整个数组的值
echo ${array_var[@]} #输出整个数组的值
echo ${array_var[$index]}
echo ${#array_var[*]} #输出数组长度



关联数组 , key-value

declare -A ass_array
ass_array=([index1]=value1 [index2]=value2) #定义的时候赋值
ass_array[index1]=value1
echo ${ass_array[index1]}



格式输出系统当前时间点

echo $(date "+%Y-%m-%d %H:%M:%S")



Shell函数定义

function fname(){
echo $1 ,$2 # 访问参数
echo "$@" #打印所有参数
echo "$*" #打印所有参数

return 0; #返回值
}

方法调用
fname arg1 arg2



利用IFS变量分割行,答应出系统用户和用户目录

oldIFS=$IFS
IFS=":"
while read line ;
do
count=0
for item in $line;
do
[ $count -eq 0 ] && user=$item
[ $count -eq 5 ] && homedir=$item
let count++
done;
echo $user"   "$homedir
done</etc/passwd;
IFS=$oldIFS

#For循环的使用
for((i=0;i<10;i++));do echo $i;done;
for((i=0;i<10;i++)){ echo $i;}
for i in {1..10};do echo $i;done;



Shell 算术比较

#算术比较一般放在[]中括号中, 需要注意的是在操作符和操作数之间存在一个空格,如果忘记空格会报错。
var=10;[ $var -eq 10 ] or [ $var -lt 20 ] && echo $var;
result: 10
#逻辑与 -a
[ $var -ne 10 -a $var -lt 20 ]
#逻辑或 -o
[ $var -ne 0 -o $var -gt 2 ]
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
-eq:等于



文件系统相关测试

[ -f $file_var ] #如果给定变量包含正常文件路径或者文件名,则返回true
[ -x $file_var ] #如果给定文件可以执行则返回True
-d: 判断目录
-e: 文件存在
-w:文件可写
-r: 文件可读

Demo:
file_path="/etc/passwd";if [ -e $file_path ];then echo File exist;fi; [ -x $file_path ] && echo ~;



字符串比较

字符串进行比较时最好使用双括号,因为有时候采用单个括号会产生错误。
[[ $str1 = $str2 ]] :判断两个字符串是否相等 同样可以使用两外一个中法 [[ $str1 == $str2 ]]
demo:
str1="xueping.you";str2="xueping.you"; [[ $str1 = $str2 ]] && echo equal; [[ $str1 != 'test' ]] && echo not equal;
其他:
[[ $str1 > $str2 ]]
[[ -z $str1 ]] :判断是否是空字符串,返回真
[[ -n $str1 ]] : 如果str1是非空字符串,返回真



find 命令的使用

find . -print # 打印文件和目录中的列表
-name:根据文件名或者正则表达式匹配搜索
demo: find . -name 'export*' -print
-iname: 忽略大小写
find 匹配多个条件,可以使用Or 或者 And
demo:find . \( -name "*.txt" -o -name "*.csv" \) -print   # \( .....\) find 会将这个视为一个整体

-path: 匹配文件路径
demo: find . \( -path "*ticket*" \) -print
result:
./ticket
./ticket/saveOrderNo.txt_cp
./ticket/ticket_merchantCodeOfOnceDay.txt
./ticket/supplierId_amount_file.csv
./ticket/recharge.20160623.md5
./ticket/bill_settle_bill_no.txt
./ticket/balance.txt
./ticket/bill_detail_order_no.txt
./ticket/uniq_key.csv
./ticket/recharge.20160623.txt
./ticket/balanceOrderNo.txt
./ticket/saveOrderNo.txt
./ticket/result_cp.txt
./tuan_ticket.csv

-regex:类似于-path ,不同点是-regex使用的是正则表达式来匹配路径
demo:find . \( -regex ".*ticket.*" \) -print # 输出和上面demo输出一致

否定参数:
find可以用“!”否定参数的含义。例如:
demo:find . ! \( -regex ".*ticket.*" \) -print

-maxdepth:搜索的最大深度
-mindepth:搜索的最小深度
-type :搜索的文件类型  d,只列出目录  f,只列出文件 l,只列出链接
demo: find . -maxdepth 2 -regex ".*ticket.*" -type f -print

#UNIX|LINUX文件系统中的每个文件都有三种时间戳,-atime 用户最近一次的访问时间 -mtime 文件最后一次修改的时间  -ctime 文件数据源最后一次变更(权限或所有权)的时间

find . -type f -atime -7 -print #-表示小于 + 表示大于 单位为天
#-amin -mmin -cmin 单位基于秒
#-newer 我们可以用于指定一个参考文件,find找出所有比参考文件更新的文件
#-size 指定文件大小(单位:c k M G) -size +2K (大于)| -size -2K (小于)| -size 2K (等于)
find . -type f -newer file.txt -print

#-delete 删除匹配的文件
find . -type f -name "*.swap" -delete



xargs的使用

xargs 用于将stdin接收的数据重新格式化,再将其作为参数提供给其他命令。
#合并多为为单行
demo:
cat testinput.txt
1 2 3 4
5
6

7 8
cat testinput.txt | xargs
1 2 3 4 5 6 7 8

cat testinput.txt | xargs -n 2 # -n用于指定每行最大个数
1 2
3 4
5 6
7 8

echo "xuepingyou,xiaoming,langlang" | xargs -d "," -n 1 #-d 用于指定一个定界符
xuepingyou
xiaoming
langlang



tr命令的使用方法

#tr对来自标准输入的字符进行替换,删除和压缩,tr只能通过stdin 而无法通过命令行参数接收输入。
#执行方式: tr [option] set1 set2
echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z' #大写转换为小写
#简单的加密和解密:
echo 12345 | tr '0-9' '9876543210'
87654
echo 87654 | tr '9876543210' '0-9'
12345

#用tr删除字符
echo "Hello 123 world 345" | tr -d '0-9'

#用tr压缩字符
echo "GNU is    not  UNIX . Recursive  right ?" |tr -s ' '
GNU is not UNIX . Recursive right ?



sort
、uniq 命令使用 ,这两个命令一般情况下会搭配使用

simple demo:cat test.txt |sort |uniq #排序去重
sort -n file.txt #按照数字进行排序
sort -r file.txt #逆序排序
cat test.txt | sort -n -r
124
33
24
13
12
1
#可以使用sort检查文件是否已排序
sort -nrC test.txt.sort ; if [ $? -eq 0 ];then echo sorted;else echo Unsorted;fi;
sorted

sort -C test.txt.sort ; if [ $? -eq 0 ];then echo sorted;else echo Unsorted;fi;
Unsorted

#-k指定了排序应该按照哪一个key来进行排序,建指的是列号。
sort -nrk 1 data.txt
#多行作为key
sort -nrk 1,2 data.txt

sort -u unsorted.txt #只显示唯一的行
sort unsorted.txt | uniq -u #效果和上一个命令效果一样
sort unsorted.txt | uniq -c #统计各行重复的次数
sort unsorted.txt | uniq -d #找出重复的行



分割文件和数据

#生成一个大小为100kb的测试文件
dd if=/dev/zero bs=100k count=1 of=data.file

spilt -b 10k data.file



根据扩展名切分文件名

#借助%操作分来分离出"名称.扩展名"这种格式的文件名
ls | while read line;do name=${line%.*};echo $name;done;
#"%"从左向右通过非贪婪找到最短的匹配结果。 "%%"则是通过贪婪查找
var="home.work.txt";echo ${var%.*};
home.work
var="home.work.txt";echo ${var%%.*};
home

#借助"#"操作符提取出文件名的扩展名
ls | while read line;do name=${line#*.};echo $name;done;
# "#"从左到右删除 "##" 和"%" "%%"规则一直



文件之间的比较命令:comm

comm a.txt b.txt #第一列是a中出现的,第二列是b中出现的,第三列是a和b中相同的列
a
b
c
d
#-1 从输出中删除第一列
#-2 从输出中删除第二列
#-3 从输出中删除第三列
comm a.txt b.txt -1 -2
b
c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: