8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
last
last -n 5 <==仅取出前五行
umask
当我们使用touck命令创建一个文件时,没有给权限,那么就采用umask中默认的属性
我们可以设置这个属性
umask 002
设置规则:
目录规则:
首先设定777
然后从777中减掉002
文件规则:
将目录规则中的可执行x去掉就可以
suid和guid
SUID 是 Set User ID, SGID 是 Set Group ID的意思
chown和chmod
chown -R root one.file
将one.file的权限给root -R 下面的所有文件
chmod 我还是用着可以chmod u+r one.file chmod 777 one.file
符号链接(快捷方式)
ln -s sourcepath targetpath
find和xargs
find pathname -option [-print -exec -ok]
option:
-name
-perm
-user
-group
-mtime -n +n
-atime
-ctime
-type
-size
find ~ -name “.txt” -print
find . -name “.txt” -print
文件名字里面还可以用正则表达式
find . -perm 755 -print
find /etc -type d -print
find /etc !-type d -print
-exec 用来执行找到后来执行命令 ,必须使用{}
find . -type f -exec ls -l {}
find . -type f -exec rm {} 查找后删除
find . -type f -ok rm {} 查找后删除,但提示是否操作
find . -type f -print | xargs chomd 777 xargs用来处理find获取的文件
cron和crontab
后台执行命令
crontab文件的公式
第一列 第二列 。。。。
分钟1-59 小时 日 月 星期 要运行的命令
32 21 /shell/one.sh
32 21 1,2 * 1日和2日
32 21 10-12 10-12日运行
crontab []
-u
-e 编辑crontab
-l 列出
-r 删除crontab
crontab crontab文件 //提交文件到cron管理器
at
at 21:02
find / -name “*.txt” -print
ctrl+d
在21:02 执行这条语句
at -l
atrm job 2 //删除一个任务,job 2为id
& 不会占用前端控制台
find / -name “*.txt” -print &
ps x|grep 23015
kill id号
输入输出
echo
t
n
read name age
echo $name
echo $age
tee
tee -a files
who | tee tee.txt //将who的结果打印到console并且保存的tee.txt文件中去
重定向
0 标准输入
1 标准输出
2 标准错误
>追加
a>b 2>&1
a 2>b
commoda file 为commod的输入,执行完后输出的file文件中去
运算符
&&
||
(命令1;命令2)
正则
a{n}
a{n,}
a{n,m }
其他的我都熟悉了
正则和元字符是有区别的
grep家族
-c 匹配行的计数
-i 大小写
-n 行号
-v显示没有匹配的行数
-h 不显示文件名
grep “name” .txt
txt 格式文件中包含name的文件
grep “45“ data.f
匹配 45 后面有个空格
grep可以使用正则表达式
grep ‘^data$’.txt
ls -l | grep ‘^d’ 匹配目录
ls -l | grep ‘^[^d]’ 非目录文件
awk
从数据包中抽取一部分,数据过滤的工具
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
awk ‘{commod}’ awk.txt
-F 设定域的分割符
awk ‘{print $0}’ awk.txt //打印出awk.txt中所有域的所有值,$1….$n $0代表所有
awk ‘{print $1,$4}’ awk.txt
当然我们强大的awk可以写成脚本的形式,test.awk 让我们来进行数据的处理
test.awk
awk 还可以设置一个标题,放在BEGIN中
awk ‘BEGIN{print “name age n——————“}{print $1”t”$4}’
当然也可以放一个END
awk ‘BEGIN{print “name age n——————“}{print $1”t”$4}END{‘END-OF-PROJECT’}’
awk 高级应用
~用来匹配正则表达试
awk ‘{if($4~/back/) print $0}’ grade.txt
也可以$4~/back/,省略掉if
$3==45
$3!=45
$3>=45
$3>45
$3!~/back/
$3~/^…b/
/[Gg]reen/ 忽略大小写
还可以使用逻辑运算符
&& || !
awk 的内置变量
ARGC 传入脚本参数的个数
FS 分隔符
NF 浏览记录的域的个数
NR 已读的记录的个数
FILENAME awk浏览的文件名
awk ‘{print NF,NR,$0} END{print FILENAME}’ text.txt
设置变量域的别名
awk ‘{name=$1;age=$4;if(age~/13/)print name”的年纪为” age}’
$2 可以进行修改值$2 -1
新建一个作用域$8=$7+$1
awk ‘(tot+=$6)’ 将每一行的$6加起来给tot变量
但是 awk ‘{tot+=$6}’回打印出每一行的数据,然后最后显示加的结果,如果我们采用
awk ‘{(tot+=$6)}’ 增加一个{}后,只会打印出最后的结果,不会打印出每一行
打印出一个文件夹下面的文件占用内存的大小:
ls -l | awk ‘/^[^d]/ {print $9”t” $5} {tot+=$5} END{print “the file kb:” tot}’
awk的内置函数
gsub(r,s) 在整个域中s替换r
gsub(r,s,t) 在整个t域中s替换r
index (s,t)
length(s) 返回字符串的长度
match(s,r)
split(s,a,fs)在fs上将s分成序列a,fs是分割符号
awk ‘gsub(/7589/,250) {print $0}’ test.txt
awk ‘BEGIN {FS=”:”} {for(i=NF;i>=2;i–) {printf $i “;”};print $1}’ p1
找出一行数据中的最大值:
2 8 9
8 4 6
3 5 7
awk ‘{ max=0; i=1; while (i<=NF) { if (max
9
8
7
awk的printf
printf支持和c语言一样的输出
printf “%c”,65 //A
printf “%f”,$0
printf “%-15s %sn”, $1,%3 //$1左对齐,15个字符长度
awk ‘{if($5
df -k 文件系统的空间容量
awk 脚本
test.awk
#! /usr/bin/awk -f
BEGIN { printf “%s/n”,”Writing my first awk executable script!” }
$ ./test.awk
BEGIN { FS=”:” }
搜索用户名 wangxufeng 并输出账号细节
/ wangxufeng/ { print “Username :”,$1,”User ID :”,$3,”User GID :”,$4 }
### awk 数组
array.awk
BEGIN{
record=”123#456#789”
split(record,myarray,”#”)
}
END{
for(i in myarray){print myarray[i]}
}
./array.awk /dev/null
123
456
789
sed
sed是一个非交互性文本流编辑器
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
定位方式
x
x,y
/patten/
x,/patten/
x,y!不包含x,y行
命令模式:
p 打印匹配行
= 显示文件行号
a 定位行号后,附加新的内容
i 定位行号后,插入新的内容
d删除匹配行
c用新文本替换定位文本
将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
nl /etc/passwd | sed ‘2,5d’
要删除第 3 到最后一行
nl /etc/passwd | sed ‘3,$d’
在第二行后(亦即是加在第三行)加上『drink tea?』字样!
nl /etc/passwd | sed ‘2a drink tea’
那如果是要在第二行前
nl /etc/passwd | sed ‘2i drink tea’
sed -n ‘2p’ test.txt 打印第2行
sed -n ‘4,/the/‘p 在第四行中匹配the,
$代表最后一行
sed -e ‘/music/=’ =是代表打印行号
sed也可以是脚本的形式
#!/usr/bin/sed -f
/commod/ a
then suddendy ap suppose
在commod匹配后加入一句话
和并与分割
sort命令
-c 测试文件是否已经分类
-m 合并两个分类文件
-u 删除所有复制行
-o 存储sort结果的输出文件名
-t 分隔符
sort -t: test.txt //基本的排序,按照第一个域
sort -t: -r test.txt 逆序输出
sort -t: +1 test.txt 按照制定的域进行排序,第二域进行分类
如果要分类的数值,需要加上n
sort -t: +1n test.txt
sort -u test.txt 去除重复的行
sort -t: -k4 test.txt 对第四域进行分类
sort -t: -k4 -k1test.txt 先对第四域进行分类,在对第一域进行分类
sort +0 -2 +3 先对域0分类,忽略域2,然后在对域3分类
按照域的字符分类
sort -t: +1.2 //按照第一域中的第三个字符分类
head -1 显示文件的第一行
tail -1 显示文件的最后一行
通过管道配合awk使用
sort -t: -r -k4 | tail -1 | awk ‘{print ‘name is ‘ $1,’price is ‘ $3}’
合并两个分类文件
sort -t: -m +0 video.txt test.txt
uniq
从文件中去除重复行
-u 只显示不重复行
-d 只显示有重复数据行
-c 打印每一行连续重复的次数
join
合并两个分类文件
和mysql中的join差不多
join name.txt result.txt
把result.txt 域中和name一样的放在一起
join -a1 -a2 name.txt result.txt
join -a1 name.txt result.txt //当result.txt 中有的内容name.txt 中没有时,自动忽略result.txt 的内容
制定特殊的域进行链接
join -j1 3 -j2 1 name.txt result.txt 文件一的第三域和文件2的第一域进行链接
cut 用法
用来从文件中裁剪列或者域
-c 指定裁剪的字符数
-f 指定裁剪域
-f 1,5 裁剪第一域和第五域
-d分割符
cut -d: -f3 text.txt 裁处第三域
paste
将cut裁剪出来的域拼接起来,形成一个新文件
-d 链接的符号
paste -d: name.txt age.txt
ls | paste -d”” - - 其中-代表输出的格式是一行两个元素,空格作为输入的一个标准
split
将大文件分割成小文件
tr
用来从标准输入通过变化来改变字符
大小写转换
删除空行
tr -s [a-z] text.txt //去除text.txt 中字符a-z中重复的字符
tr -s “[ 12]” text.txt //删除空行
tr -s [“n”] text.txt //删除空行
tr “[a-z]” “[A-Z]” 小写转大写
tr “[04]” ““ text.txt 匹配至少含有四个零的项,并将每个字符转换为*
登录环境
变量
name=value //设置值
name+value //如果设置了name的值 ,则重新设置值
name:?value //如果未设置name的值,提示用户错误信息
name?value //如果未设置name的值,提示系统错误信息
name:=value // 如果未设置name,设置其值
name:-value //如果未设置name,设置其值,如果设置了,则用设置的不用value
例子
name=”wangxufeng”
echo ${name}
unset name 清除变量
set 显示本地所有变量
readonly name 设置变量的名字为只读
设置环境变量
name=value;export name
env 显示所有的环境变量
IFS 指定作用域的分隔符
LOGNAME
PATH
PS1 shell命令行的修饰符
ps2
pwd
pager
子进程之间相互访问变量
当在1.sh
中定义 FILE=”aaaaaa”
export FILE
在2.sh中我们可以直接使用$FILE
位置变量参数
$0 脚本名字
$1
|
$9
传入脚本参数
特定变量参数
$# 传递到脚本的参数个数
$* 所有参数的字符串表示形式
$$ 进程id
$? 最后退出的状态,0表示没有错误