Linux 基础命令
1. 将用户添加到sudo中
root 登陆, vim /etc/sudoers添加如下:
UserA ALL=(ALL) ALL
UserB ALL=(ALL) ALL
UserC ALL=(ALL) ALL
要想使user在 sudo的时候不输入密码。
1. #%wheels 那一行注释揭开
2. 执行 gpasswd -a UserA wheel
2.gzip: 将文件压缩到一个压缩包中
#gzip -v a.txt
-v:现实压缩的比例,压缩之后原文件消失。
#gzip -d a.txt.gz
-d 解压缩。
zcat a.txt.gz
查看压缩文件的内容
#gzip folder/* 压缩子文件夹中所有文件使用 gzip folder/*/* 二级菜单在内的所有文件压缩
变量的定义
a=1
b=2
变量值在当前的bash中有效,要想子进程中有效许将变量倒入到一个缓冲区中也就是环境变量。export
如: a=1; export a; bash; echo $a
变量类型的定义
declar -iaxr
i: int
a: array
x: export
r: readonly
declare -i num
declare -a array
array[1]=1
echo ${array[1]}
关于 $(), $(()), $ 和 ${}
$用于变量的引用, 如 a=123 echo $a
${}用于输出数组元素 如: declare -a array ; array[1]='a'; array[2]='b'; echo ${array[1]}则输出a
$()用于执行括号内的命令 如: echo $(pwd) 和 echo pwd的区别
$(())容易和上面的混合,他的作用是把括号内的内容作为运算副
变量内容的删除和替换
PATH='/usr/lib/gradle/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/Software/IDEA/idea-IU-141.1532.4/bin:/usr/lib/java/bin:/home/ygshen/.local/bin:/home/ygshen/bin'
删除.local/bin:之前的 配置
echo ${abc#/*local/bin:}这里#代表从最左侧的某个字符即/开始向右数0-N 个字符直到local/bin:结束,将查找到的最短匹配删除调
结果: '/usr/lib/gradle/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/Software/IDEA/idea-IU-141.1532.4/bin:/usr/lib/java/bin:/home/ygshen/.local/bin:/home/ygshen/bin'
如果改成 echo ${abc##/*local/bin:}结果将变成也即最长匹配
'/usr/lib/gradle/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/Software/IDEA/idea-IU-141.1532.4/bin:/usr/lib/java/bin:/home/ygshen/.local/bin:/home/ygshen/bin'
只保留最后一个设置: echo ${abc%:*bin}从最后一个:开始查找最短匹配
只保留第一个配置 echo ${abc%%:*bin}从最后一个:开始查找最长匹配
变量的替换
abc='john shen is a big shen'
echo ${abc/shen/SHEN} 之替换第一个匹配的字符
echo ${ab//shen/SHEN}替换所有匹配的字符
输入和输出
1.sudo usera
ll -al /home/usera /home/userb 1>~usera/file 2>~usera/file2
1>或者2>代表覆盖
1>> 或者2>>代表追加输出
以上信息 1>代表输出流 2>代表错误流
2. cat >~ygshen/file 键盘输入并且保存到文件中知道按 ctrl+d
3. cat >~ygshen/file <~/.bashrc 将~/.bashrc中的内容输出到~ygshen/file中
<代表输入流不写代表输入来自键盘
4.cat>~ygshen/file <<eof键盘输入字符保存到~ygshen/file中,结束条件是输入eof字符并会场而不是ctrl+d
5. echo /dev/null >~ygshen/.bashrc将文件制成空
运算符 &&、||
ls /opt/session-server && touch /opt/session-server/file.txt - 如果存在目录就在目录下面新建一个文件
ls /opt/session-server || mkdir /opt/session-server && touch /opt/session-server/file.txt -接上面的,如果不存在就创建一个目录 然后目录里创建文件
A&&B = A 成功的情况下才执行B
A||B = A成功了就不执行B 不成功才执行B
管道:
选取命令之 cut -
echo $PATH | cut -d ':' -f 1 将PATH按照字符 ‘:’分割 取出数组第一个元素 这里是每行作一次切割的如下面的例子
[ygshen@localhost my-service1]$ cat file.txt
hello world;this is a test;
Second line
Third Line; Test
[ygshen@localhost my-service1]$ cat file.txt | cut -d ';' -f 1
hello world
Second line
Third Line
[ygshen@localhost my-service1]$
选取命令之 grep - 选取包含指定字符串的行
last | grep unknown
选取结果的排序和统计
last | grep -d ' ' -f 1 | sort | uniq -c : 查找所有登陆的帐号按' '分割并取第一列,对去道德结果作排序并且统计每一个帐号的登陆次数
Sed: 四个功能 -
1. 删除 num1到num2 之间的文字 sed 'num1,num2d'
2. 新增 num1后面新增一行 sed 'num1a this is a new line' 也可以新增 n 行 sed 'num1a this is a new line .....\
> another line....\
> third line'
3. 替换: sed 'num1,num2c this is to replace lines between num1 and num2 with the text here given'
4. 输出 sed 'num1,num2p' -n 这里参数-n 是不允许有重行的形式输出
awk功能: 通过print的功能将每一行的字段列出来格式 awk '条件1{运行段如print} 条件2{运行字段}'
举例 : last -n 5 | awk '{print $1,$3}'
有一个table
Name | score1 | score2 |
JOhn | 1 | 2 |
Bob | 3333 | 34234 |
生成一个统计文件, 表格保存在file.txt中
cat file.txt | awk 'NR==1 {printf "%10s %10s %10s %10s\n",$1,$2,$3,"total"} NR>=2 {printf "%10s %10d %10d %10f\n",$1,$2,$3,$2+$3}'
注意printf的使用以及格式的末尾\n,注意awk的格式
显示所有文件并按照时间排序:
ll -a | sort -n