先说道面试题
实例一:只查看test.txt文件(100行)内第20到第30行的内容(企业面试) 4 + 2种 方法
(1)seq 30 >/my/et.txt
head -30 /my/et.txt | tail -11
(2)sed -n '20,30' p et.txt (sed功能增删该查 -n 取消默认输出 按规则输出打印(p))
(3)awk ' NR>19&&NR<31' et.txt ({if(NR>=20 && NR<=30) print $1}可以替换 ‘’ 内的内容意思相同)
(4) grep
A 除了显示匹配到的一行外 ,并显示该行之后的num行 例子: grep 20 -A 10 a.txt
B 除了显示匹配到的一行外 ,并显示该行之前的num行 例子: grep 30 -B 10 a.txt
C 除了显示匹配到的一行外 ,并显示改行之前的num行 例子: grep 25 -C 5 a.txt
一条指令 将/my/a.txt 复制到 /temp/a.txt 后不提示信息
(1)\cp /my/a.txt /temp/a.txt
(2)/bin/cp /my/a.txt /temp/a.txt
(3)unalias cp ----> (该条功能不建议使用,服务器重启后 失效 )
cp /my/a.txt /temp/a.txt
把/my 目录及其子目录中使用扩展名为‘ .sh’结尾的文件中包含 oldboyde 字符串全部替换成 oldgirl;
创建测试数据
[root@root ~]# cd /my
[root@root my]# echo 'oldboy' >/test/a.sh
-bash: /test/a.sh: No such file or directory
[root@root my]# echo 'oldboy' >test/a.sh
[root@root my]# echo 'oldboy' >test.sh
[root@root my]# echo 'oldboy' >t.sh
[root@root my]# tree
.
├── 8.txt
├── ett.txt
├── new1
│ └── new2
│ └── new3
├── new2
│ └── new2
│ └── new3
├── test
│ └── a.sh
├── test.sh
└── t.sh
测试开始替换数据
[root@root my]#find -type f -name '*.sh'|xargs sed 's#oldboy#oldgirl#g' (只是替换但尚未修改)
oldgirl
oldgirl
oldgirl
[root@root my]# find -type f -name '*.sh'|xargs sed -i 's#oldboy#oldgirl#g'
(加 -i 直接替换修改)
[root@root my]#find -type f -name '*.sh'|xargs cat 信息流 给cat
oldgirl
oldgirl
oldgirl
(不加xargs 直接变成数据流 交给cat)
[root@root ~]# find /my -type f -name '*.sh'| cat
/my/test/a.sh
/my/t.sh
/my/test.sh
五星级别的命令 :
linux 三剑客之
grep \ awk \ sed;他们都有过滤字符串的功能;
grep :查找过滤最擅长
awk :处理列擅长(NF :代表字段 NR:代表 记录 一个记录代表一行)
sed : 擅长添加、替换、修改、删除 、
帮助指令:
ifconfig 查看网卡链接信息---- 相同于 ip addr
man 命令 Linux 指令
--help 简洁 版 帮助
help 命令 内置指令帮助
操作查看目录指令:
mkdir 创建目录
全名称:make directorys :
mkdir (/data)是创建的目录;或者 cd /; mkdir data
第一个指令 是 直接创建 目录 在根 " / "下 : mkdir /data ;
第二个是 进入根" / "下直接创建 :cd /; mkdir data
例子: mkdir /myfile 或者 cd /; mkdir myfile
#### 递归创建目录
mkdir -p /my/new1/new2
#### 多重创建
[root@root ~]# mkdir /yyn/{335,336,3365}/yyn -p
[root@root ~]# tree /yyn
/yyn
├── 332
│ └── yyn
├── 335
│ └── yyn
├── 336
│ └── yyn
└── 3365
└── yyn
ls 列表
ll :查看该目录下的文件总个数
指令规则:命令 【参数选项】【文件或路径】
ls -ld (参数 l 和 d) 多参数可以直接连起来操作 前面 加 “ - ”
参数 l (long) 长格式
参数 d (directorys) 查看目录
例子: ls -l \ ls -d \ ls -ld() ls /data (进入目录下查看)
cd 改变目录路径
全名称 :change directory
相当路径:没有从根 " / " 开始 cd data
绝对路径:从根 " / " 开始 cd /etc
例子: cd /etc ; cd data
pwd 打印工作目录(显示当前所在路径)
全名称 :print work directory
例子: pwd 输出结果:/directory / (那个文件)
touch 创建文件及更新时间戳
若文件不存在 touch file.txt
若文件存在 更新时间戳(文件的时间属性) ;
例子: touch /myfile/file.txt
touch 另外
touch {1..10}.txt 创建
mv `find /my -type f -name " *.txt " ` /data
vi 编辑文件
vi file.txt
vi 后跟 操作的文件 ; 回车进入待编辑状态
按 " a "或 " i " 字母 进入编辑状态 ; 编辑好之后
按 键盘 Esc 回到 待编辑状态;
输入 " :wq " 保存和退出 编辑 回到 命令行模式;
不想保存: 输入 :q
强制退出 输入 :q!
解释 wq : w(write) 、q (Quit) ;
vim 复杂编辑器
功能复杂,高亮,自动缩进,写脚本(shell / python 脚本用)
vim file.txt
按 " a "或 " i " 字母 进入编辑状态 ; 编辑好之后
按 键盘 Esc 回到 待编辑状态;
输入 " :w " 保存后再按":q"退出 编辑 回到 命令行模式;
echo 覆盖或追加内容 配合 " 重定向 > " , " 追加 >>"
echo ' I am study Linux now; ' >myfile.txt
echo {a..z} myfile.txt 相当于 序列 seq 部分功能
解释:echo 后面跟 文件内容 " > " 代表重定向到 那个文件
或者其他" > " 后的文件若存在 会 先清空 该文件的内容
后 写入 " > " 前面的 内容 ;
此 " > " 指令 操作 危险 ,在操作前 请先备份 ,
再操作;若想追加 则用 " >> "
例子: echo 'I drop in love river with you; '>>myfile.txt
cat 查找,单行和多行文本添加
Linux 常用的指令功能:
查看网卡连接设置
cat /etc/sysconfig/network-scripts/ifcfg- ens34 网卡名称
cat >myfile.txt 回车 后编辑输入 I love you in my life;在按 Ctrl + C 或 D 结束编辑;
[root@root myfile]# cat >>myfile.txt<<my : (多行追加实例:)
i love you in mylife;
do you want to mirry with me?
my(my 可以换成任意,但必须顶格写)
[root@root myfile]# cat myfile.txt (实例显示的结果:)
I studying Linux now;
i love you in mylife;
do you want to mirry with me?
Cat 其它用法: 多行文本输入
cat >> /my/a.txt << my
123
123
456
my
特殊符号 < 、< <、>、>> 的说明:箭头的指向代表数据的流向
'>' 或 (0\1\2)> 输出重定向:把前面的内容输入到后面,会清除原有的文件内容;(有 1 没有都一样)
例子 :>myfile.txt (清空原有内容) echo ' i love you ' >myfile.txt
'>>' 或 (0\1\2)>> 追加输出重定向:把前面的内容追加到后面,不会清除原有文件内容;
例子:echo 'I drop in love river with you; '>>myfile.txt
0< 或 < 输入重定向 : 把文件或文本内容 输入给 前面的命令;
例子:
[root@root myfile]# echo ' 1 2 3 4 '>myfile.txt
[root@root myfile]# cat myfile.txt
1 2 3 4
[root@root myfile]# xargs -n 2 <myfile.txt (xargs -n 2 理解为:2个一个单位分组)
1 2
3 4
0<< 或 << 输入追加重定向
[root@root myfile]# cat >>myfile.txt<<my : (多行追加实例:)
i love you in mylife;
do you want to mirry with me?
my
数字的说明:
标准输入(stdin): 代码为0 ,使用 0< 或 0<< ,数据(输入的数据)流向从右到左
例子: cat < myfile.txt
标准正常输出(stdout):代码为1 ,使用 1> 或 1>> ,数据(正确的数据)流向从左到右
例子: echo oldbook >myfile.txt echo oldbooks >> myfile.txt
标准错误输出( stderr ): 代码为2 ,使用 2> 或 2>> ,数据(错误的数据)流向从左到右
echo oldbook > myfile.text 2>b.txt 意思是:正确的数据输出到 myfile.txt,错误的输出到b.txt
cho odkbb > a.txt 2>'&' 意思是: 正确或者错误都输出到 a.txt
cho oooddd &>a.txt 意思是: 正确或者错误都输出到 a.txt
echo shuikm &>>a.txt 意思是:正确或者错误输出追加到 a.txt
xargs 分组
xargs -n number <wenjian 分组
echo 1 2 3 4 5 6 7 8 >a.txt
例子:xargs -n 3 <a.txt
cp 拷贝
cp file /temp 把某个文件或目录拷贝到 某个地方
例子: cp a.txt /temp/ 相对路径拷贝
[root@root myfile]# cp /myfile/a.txt /my
cp: overwrite `/my/a.txt'? y
若拷贝目录需要 加参数 " -r 递归拷贝 "
" -a 相对于 ;
-p: 保持属性 ;
-d:链接文件
-r "拷贝目录
在拷贝时 ,让系统 不提示覆盖信息
cp 前 加 " \ " ;或者 写全路径
例子:/bin/cp /my/a.txt /temp/ a.txt
\cp -r /myfile /temp
rm remove
rm -f(force)强制 -r(recuresive) 递归删除目录 / mydirectory
rm -fr /{1,2,3,4,5,6,7,8}
mv 移动文件和目录
mv file.txt /temp 原位置文件就没有了
find 查找
find 查找 -type f (什么类型) -name (叫什么名字) " file.txt" -exec(做什么动作)
find /myfile -type f -name ' myfile.txt ' -exec rm {} \;
! 取反的意思 find /myfile -type f ! -name ' myfile.txt'
-a(and) 交集 find /myfile -type f -name ' myfile.txt' -a 'a.txt' 默认是交集
-o (or) 并集 find /myfile -type f -name ' myfile.txt' -o 'a.txt'
上面例子是:找到/myfile 目录下file类型的myfile.txt 文件 ' {} 内容 '删除操作
find /myfile -type f -name "*.txt " | xargs rm -f
把查找的内容 放到一行上 进行删除
find + rm 删除该目录下其他文件 但保留指定文件
find /my -type f !- name ' 8.txt' -exec rm -f {} \;
grep 过滤 -v 排除后面的
grep 【内容】 【 文件】 显示【内容】 例子:grep 123 a.txt
v 过滤排除的内容显示除了过滤以外的内容 例子: grep -v 123 a.txt
A 除了显示匹配到的一行外 ,并显示该行之后的num行 例子: grep 20 -A 10 a.txt
B 除了显示匹配到的一行外 ,并显示该行之前的num行 例子: grep 30 -B 10 a.txt
C 除了显示匹配到的一行外 ,并显示改行之前后的num行 例子: grep 25 -C 5 a.txt
head 头部 tail 尾部
head -num a.txt 读取前 num 行 从a.txt文件
例子:head -10 a.txt 读取前10行数据
tail -num a.txt 读取后 num 行 从a.txt文件
例子: tail -10 a.txt 读取后10行数据
有个 a.txt 文件内容100行,要求读取20-30行
例子:head -30 a.txt | tail -11
安装软件包
yum install 【参数】【y/n 代表 是否提示】
yum install tree -y
别名 的作用:alias \ unalias
给危险指令加防护 防止误操作
简化命令
alias 查看和设置系统现有的别名设置别名
unalias 取消现有的别名
unalias cp 取消cp -i 的别名
[root@root /]# alias rm='echo this command does not allow to use'
[root@root /]# rm
this command does not allow to use
[root@root /]# alias net='cat /etc/sysconfig/network-scripts/ifcfg-eth0'
[root@root /]# net
DEVICE=eth0
HWADDR=00:0c:29:54:22:9d
TYPE=Ethernet
UUID=f0212429-d0c9-4ff5-9d33-8c7231d5664c
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
USERCTL=no
PEERDNS=yes
IPV6INIT=no
seq 序列
seq num 默认从1开始num结束
seq -s " " num 横着从1开始num结束; -s 指定分隔符 默认 \n
seq num1 num2 从num1开始到num2结束
seq num1 num2 num3 从 num1 开始到 num3 结束 间隔 num2
横着输出打印
[root@root ~]# seq -s " " 10
1 2 3 4 5 6 7 8 9 10
[root@root my]# seq 10 |xargs -n 3
(seq num 默认从1开始num结束,xargs -n num 分组)
1 2 3
4 5 6
7 8 9
10
[root@root my]# seq 3 10 |xargs -n 3
(seq num1 num2 从num1开始到num2结束,xargs -n num 分组)
3 4 5
6 7 8
9 10
[root@root my]# seq 1 2 20 |xargs -n 3
(seq num1 num2 num3 从 num1 开始到 num3 结束 间隔 num2,xargs -n num 分组)
1 3 5
7 9 11
13 15 17
19
sed
语法:
sed ' s#1#2#g' et.txt
1 , 2 把 1 的内容, 替换成 2 的内容
# 号 是分隔符 ,可以 / 或者 @ 替换
参数:
-n 取消默认输出
sed -n '20,30'p /my/ett.txt
-i 修改文件内容
sed -i 's#oldboy#oldgirl#g' test.sh t.sh test/a.sh
-e 允许多项修改
功能:
p 打印
sed -n '20,30'p /my/ett.txt
g 和 s 联合是 表示当前行全局匹配替换
sed -i 's#oldboy#oldgirl#g' test.sh t.sh test/a.sh 原理是这样)
(1) sed -i 's#oldboy#oldgirl#g' `find /my -type f -name "*.sh"`
(2) find /my -type f -name "*.sh |xargs sed -i 's#oldboy#oldgirl#g'
s 查找并替换
sed -i 's#oldboy#oldgirl#g' test.sh t.sh test/a.sh (原理是这样)
(1) sed -i 's#oldboy#oldgirl#g' `find /my -type f -name "*.sh"`
(2) find /my -type f -name "*.sh |xargs sed -i 's#oldboy#oldgirl#g'