Linux单个函数的最大长度,走进linux

本文探讨了程序员在购买键盘时红轴和茶轴的选择,并详细介绍了Linux命令行工具的使用,包括umask、文件权限、suid和guid、find和xargs、cron和crontab的配置、awk的高级应用、sed文本流编辑器以及cut、paste、tr等工具。此外,还讲解了环境变量、shell脚本中变量的设置和使用。
摘要由CSDN通过智能技术生成

66b52468c121889b900d4956032f1009.png

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表示没有错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值