Linux之命令初识
Linux与windows目录结构对比
命令mkdir、ls、ls -l、cd 、pwd
[root@oldboyedu-01 ~]# #创建目录 make directory mkdir [root@oldboyedu-01 ~]# mkdir /data [root@oldboyedu-01 ~]# #查看目录里面的内容 [root@oldboyedu-01 ~]# ls /data [root@oldboyedu-01 ~]# [root@oldboyedu-01 ~]# #查看目录里面的详细信息 [root@oldboyedu-01 ~]# ls -l /data total 0 [root@oldboyedu-01 ~]# ls -l /tmp total 0 -rw-------. 1 root root 0 Sep 18 15:40 yum.log [root@oldboyedu-01 ~]# #进入到某一个目录 [root@oldboyedu-01 ~]# cd /data [root@oldboyedu-01 data]# [root@oldboyedu-01 data]# #我在哪里?定位 [root@oldboyedu-01 data]# pwd /data
绝对路径,相对路径
绝对路径 从根开始的路径 -精确定位
/data
/etc/hosts
相对路径 不从根开始的路径
容易 迷路
导航wd 和 创建文件touch
导航命令pwd-查看自己在哪 pwd 命令-创建一个文件touch [root@oldboyedu-01 data]# touch /data/oldboy.txt [root@oldboyedu-01 data]# ls -l /data/ total 0 -rw-r--r--. 1 root root 0 Sep 19 11:50 oldboy.txt [root@oldboyedu-01 data]# ls /data/ oldboy.txt
vi---记事本
##第一个里程碑-打开文件
vi /data/oldboy.txt
##第二个里程碑-进入编辑模式并增加内容
按i,进入到编辑模式(插入)
书写内容
##第三个里程碑-退出编辑模式
esc 退出编辑模式
##第四个里程碑-保持并退出
:wq #保持并退出
##第五个里程碑-查看文件的内容cat
[root@oldboyedu-01 data]# cat /data/oldboy.txt
I am studying linux.
VI常用命令
:wq 保持并退出
:q 退出
:q! 强制退出不保存
:wq! 强制退出并保存
输出命令echo、cat
[root@oldboyedu-01 ~]# echo hello oldboylinux hello oldboylinux [root@oldboyedu-01 ~]# echo hello oldboylinux >>/data/oldboy.txt [root@oldboyedu-01 ~]# cat /data/oldboy.txt I am studying linux. hello oldboylinux
漏斗家族
[root@oldboyedu-01 ~]# #漏斗-----重定向符号 [root@oldboyedu-01 ~]# #>>-------追加重定向 把内容放在文件的最后一行 [root@oldboyedu-01 ~]# echo hello oldboylinux >>/data/oldboy.txt [root@oldboyedu-01 ~]# cat /data/oldboy.txt I am studying linux. hello oldboylinux hello oldboylinux
向文件加入多行
cat >>/data/oldboy.txt<<EOF
I
am
studying
linux
EOF
EOF---->end of file
注意:很少在命令行写,都是写好后,复制在命令行
EOF 可以是任意字符,表示结束的意思
但是这个字符前面不能有任何东东
漏斗家族-其他成员
1 标准输出 执行正确的内容才会通过漏斗
#> 1> 标准输出重定向 先把文件的内容清空 把内容放在文件的最后一行
#>> 1>> 追加重定向 把内容放在文件的最后一行
2 错误输出
#2> 标准错误重定向
#2>> 错误追加重定向
[root@oldboyedu-01 ~]# eho hello 2>>/data/oldboy.txt [root@oldboyedu-01 ~]# cat /data/oldboy.txt hello oldboy 错误 -bash: eho: command not found [root@oldboyedu-01 ~]# eho hello 2>>/data/oldboy.txt [root@oldboyedu-01 ~]# cat /data/oldboy.txt hello oldboy 错误 -bash: eho: command not found -bash: eho: command not found
错误和正确的放一个文件中,两种方式
eho hello >>/data/oldboy.txt 2>>/data/oldboy.txt
eho hello >>/data/oldboy.txt 2>&1
< 输入重定向
# 支持的命令很少 echo 1 2 3 4 5 >/data/num.txt [root@oldboyedu-01 ~]# cat /data/num.txt 1 2 3 4 5 [root@oldboyedu-01 ~]# xargs -n2 </data/num.txt 1 2 3 4 5
为什么要用xargs
echo ‘--help’ |cat
echo ‘--help’ |xargs cat
参考:https://www.cnblogs.com/wangqiguo/p/6464234.html
<< 追加输入重定向
cat >>/data/oldboy.txt<<EOF
I
am
studying
linux
EOF
复制cp
###3.4 把oldboy.txt拷贝(复制)到/tmp下。 #copy ----cp 三个参数:-r 递归的复制 -p 复制的时候保持原素性不变 -a 复制所有 相当于-pdr [root@oldboyedu-01 ~]# cp /data/oldboy.txt /tmp/ [root@oldboyedu-01 ~]# ls -l /tmp/ total 4 -rw-r--r--. 1 root root 140 Sep 20 01:29 oldboy.txt -rw-------. 1 root root 0 Sep 18 15:40 yum.log
备份cp
# 操作前备份 操作后检查
# 备份就是 复制需要被分的文件,然后给文件加上后缀
[root@oldboyedu-01 ~]# cp /data/oldboy.txt /data/oldboy.txt.bak
[root@oldboyedu-01 ~]# ls -l /data/oldboy.txt
-rw-r--r--. 1 root root 140 Sep 20 01:12 /data/oldboy.txt
[root@oldboyedu-01 ~]# ls -l /data/
total 12
-rw-r--r--. 1 root root 10 Sep 20 01:15 num.txt
-rw-r--r--. 1 root root 140 Sep 20 01:12 oldboy.txt
-rw-r--r--. 1 root root 140 Sep 20 01:31 oldboy.txt.bak
复制整个目录cp -r
-r 递归的复制整个目录
[root@oldboyedu-01 ~]# cp /data/ /tmp/ cp: omitting directory `/data/'----忽略这个命令,Linux很多命令没办法直接处理目录 -r 复制整个目录及目录下的内容 [root@oldboyedu-01 ~]# cp -r /data/ /tmp/ [root@oldboyedu-01 ~]# ls -l /tmp/ total 8 drwxr-xr-x. 2 root root 4096 Sep 20 01:35 data -rw-r--r--. 1 root root 140 Sep 20 01:29 oldboy.txt -rw-------. 1 root root 0 Sep 18 15:40 yum.log
移动mv
题目: 把 /data 移动到 /root目录下面 #移动----搬家---move-mv [root@oldboyedu-01 ~]# mv /data/ /root/ [root@oldboyedu-01 ~]# ls -l /root/ total 40 -rw-------. 1 root root 1052 Sep 18 15:44 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 Sep 20 01:31 data -rw-r--r--. 1 root root 21736 Sep 18 15:44 install.log -rw-r--r--. 1 root root 5890 Sep 18 15:43 install.log.syslog [root@oldboyedu-01 ~]# ls -l /data ls: cannot access /data: No such file or directory
vmware 给你虚拟机拍摄快照
防止错误的操作破坏系统,进行时光穿梭
比如移动。修改。或者删除命令之后
删除rm –r -rf
###3.6 进入/root目录下的data目录,删除oldboy.txt文件 [root@oldboyedu-01 tmp]# rm data/ rm: cannot remove `data/': Is a directory默认无法直接删除目录 [root@oldboyedu-01 tmp]# rm -r data 使用-r删除目录 rm: descend into directory `data'? y rm: remove regular file `data/oldboy.txt'? n rm: remove regular file `data/.oldboy.txt.swp'? n rm: remove regular file `data/num.txt'? n rm: remove regular file `data/oldboy.txt.bak'? n rm: remove directory `data'? n [root@oldboyedu-01 tmp]# rm -rf data/ -rf 强制删除 [root@oldboyedu-01 tmp]# ls -l total 4 -rw-r--r--. 1 root root 140 Sep 20 01:29 oldboy.txt -rw-------. 1 root root 0 Sep 18 15:40 yum.log
查找命令find
找出你想要的东西再删除 ##find命令 [root@oldboyedu-01 tmp]# find /root/ -type f -name "oldboy.txt" /root/data/oldboy.txt [root@oldboyedu-01 tmp]# #find /root/ -type f -name "oldboy.txt" [root@oldboyedu-01 tmp]# #find 在哪里找 找什么类型的 找什么名字
type
-type 找什么类型的
f ----file 文件
d---- directory 目录
管道 |
用来传递数据
| 和 xargs 是黄金搭档
[root@oldboyedu-01 tmp]# find /root/ -type f -name "oldboy.txt"|xargs ls -l -rw-r--r--. 1 root root 0 Sep 20 02:27 /root/data/oldboy.txt
*
找出以.txt结尾的文件-用*
[root@oldboyedu-01 tmp]# find /root/ -type f -name "*.txt" /root/data/oldboy.txt /root/data/num.txt
目录跳转cd
返回上一级
题目:退出到上一级目录删除data目录。(原来在/root/data)
[root@oldboyedu-01 ~]# cd /root/data/
[root@oldboyedu-01 data]# pwd
/root/data
cd .. 和cd../../../
[root@oldboyedu-01 data]# cd .. [root@oldboyedu-01 ~]# pwd /root [root@oldboyedu-01 ~]# #进入当前目录的上一级目录 [root@oldboyedu-01 ~]# cd .. [root@oldboyedu-01 /]# cd ../../../ [root@oldboyedu-01 ~]# rm data/ -fr 把危险的参数放在后面 [root@oldboyedu-01 ~]# ls data ls: cannot access data: No such file or directory
注意:一个点指当前目录,不用与cd,配合其他命令,指当前目录
过滤命令
题目: 已知文件test.txt内容
oldboy
test
lidao
请给出输出test.txt文件内容时,不包含oldboy字符串的命令。
创建测试文件:
mkdir /data
cat >/data/test.txt<<EOF
test
liyao
oldboy
EOF
#方法1-grep -v
[root@oldboyedu-01 ~]# cd /data/ [root@oldboyedu-01 data]# cat test.txt test liyao oldboy [root@oldboyedu-01 data]# #过滤 在文件中找到你想要的内容 [root@oldboyedu-01 data]# grep "oldboy" test.txt oldboy [root@oldboyedu-01 data]# grep "ol" test.txt oldboy [root@oldboyedu-01 data]# #排除 [root@oldboyedu-01 data]# grep -v "oldboy" test.txt test liyao
#方法2-head取前几行
[root@oldboyedu-01 data]# head test.txt test liyao oldboy [root@oldboyedu-01 data]# head -n2 test.txt test liyao [root@oldboyedu-01 data]# head -2 test.txt test liyao
tail取最后几行
[root@oldboyedu-01 data]# tail test.txt test liyao oldboy [root@oldboyedu-01 data]# tail -2 test.txt liyao oldboy [root@oldboyedu-01 data]# tail -1 test.txt oldboy
#方法3-awk 配合’!/oldboy/’
[root@oldboyedu-01 data]# awk '/oldboy/' test.txt oldboy [root@oldboyedu-01 data]# grep "oldboy" test.txt oldboy [root@oldboyedu-01 data]# grep -v "oldboy" test.txt test liyao [root@oldboyedu-01 data]# awk '!/oldboy/' test.txt test liyao [root@oldboyedu-01 data]# #awk中 !表示取反 非
#方法4-sed(替换) 配合’/opldoy/d’
[root@oldboyedu-01 data]# sed '/oldboy/d' test.txt test liyao
小结:
1.grep 过滤 ******
2.head tail ******
3.sed awk 了解
无文件存在的排错
无文件存在用ls一层一层排错
##3.9 请用一条命令完成创建目录/oldboy/test,即创建/oldboy目录及/oldboy/test
[root@oldboyedu-01 data]# mkdir /oldboy/test mkdir: cannot create directory `/oldboy/test': No such file or directory
No such file or directory错误排查过程
1.ls 命令一层一层查看
2.查看每一层目录/文件是否存在
创建多层目录mkdir -p
[root@oldboyedu-01 data]# mkdir -p /oldboy/test [root@oldboyedu-01 data]# ls /oldboy/ test [root@oldboyedu-01 data]# ls -l /oldboy/ total 4 drwxr-xr-x. 2 root root 4096 Sep 25 10:28 test
使用:mkdir -pv 查看命令每一步的操作
注意:在word文档中的- ,复制到命令行中会出错
关于Linux别名
即给命令设置一个昵称
##小名 昵称 爱称 外号
为什么会有别名
###1.防止运行危险命令******
###2.省事 简化命令
我们总会遇到:提示你是否覆盖? 是否删除?
#为何我们执行cp的时候就相当于cp -i
#为何我们执行rm的时候就相当于rm -i
题目:已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让系统不提示是否覆盖(root权限下)。
[root@oldboyedu-01 data]# cp /mnt/test.txt /tmp/ cp: overwrite `/tmp/test.txt'? ^C
如何直接跳过这个提示
#方法1 撬棍
[root@oldboyedu-01 data]# \cp /mnt/test.txt /tmp/
#方法2 使用命令的绝对路径 全路径
[root@oldboyedu-01 data]# which cp 先找到命令的路径 alias cp='cp -i' /bin/cp [root@oldboyedu-01 data]# which mkdir /bin/mkdir [root@oldboyedu-01 data]# ls -l /bin/cp -rwxr-xr-x. 1 root root 122896 Mar 23 2017 /bin/cp [root@oldboyedu-01 data]# /bin/cp /mnt/test.txt /tmp/
怎么设置Linux别名-alias命令
###第一个里程碑-查看系统中的别名 [root@oldboyedu-01 data]# alias rm cp mv alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' ###第二个里程碑-模仿 #执行rm命令的时候提示 do not use rm root@oldboyedu-01 data]# echo do not use rm do not use rm [root@oldboyedu-01 data]# alias rm='echo do not use rm' [root@oldboyedu-01 data]# alias rm alias rm='echo do not use rm' [root@oldboyedu-01 data]# rm /tmp/test.txt do not use rm /tmp/test.txt [root@oldboyedu-01 data]# rm -f /tmp/test.txt do not use rm -f /tmp/test.txt [root@oldboyedu-01 data]# rm -fr /tmp/test.txt do not use rm -fr /tmp/test.txt ###第三个里程碑-永久生效 #/etc/profile #vim 快捷键 ##移动光标到文件的最后一行 G ##移动光标到文件的 第一行 gg ##在光标所在位置的下一行插入一个空行 并进入编辑模式 o(小写字母) [root@oldboyedu-01 ~]# tail -1 /etc/profile alias rm='echo do not use rm' 让命令生效 [root@oldboyedu-01 ~]# source /etc/profile 会用到source命令生效的很少。 [root@oldboyedu-01 ~]# alias rm alias rm='echo do not use rm' ###第四个里程碑-填坑 编辑 /root/.bashrc 把 alias rm='rm -i'这一行前面加上一个注释#
# 非要删除就使用撬棍或者绝对路径
小结:
1.配置别名
2.临时取消别名 cp rm
生成序列seq
seq 100 >/oldboy/ett.txt
显示指定行sed、head+tail、awk、grep
题目3.11 只查看ett.txt文件(共100行)内第20到第30行的内容 ###方法1-sed [root@oldboyedu-01 ~]# #sed 默认输出 sed命令会把文件的内容 默认都显示出来 [root@oldboyedu-01 ~]# sed -n '20p' /oldboy/ett.txt 20 [root@oldboyedu-01 ~]# sed -n '20,30p' /oldboy/ett.txt 20 21 22 23 24 25 26 27 28 29 30 ###方法2-head + tail [root@oldboyedu-01 ~]# head -30 /oldboy/ett.txt |tail -11 20 21 22 23 24 25 26 27 28 29 30 ###方法3-awk [root@oldboyedu-01 ~]# awk 'NR==20' /oldboy/ett.txt 20 #NR表示行号 #== 表示等于 [root@oldboyedu-01 ~]# awk 'NR==20,NR==30' /oldboy/ett.txt [root@oldboyedu-01 ~]# sed -n '20,30p' /oldboy/ett.txt ###方法4-grep [root@oldboyedu-01 ~]# grep "20" /oldboy/ett.txt 20 [root@oldboyedu-01 ~]# #文件的内容 ====等于这一行的行号 [root@oldboyedu-01 ~]# grep -A10 "20" /oldboy/ett.txt A显示20以及下面的10行 20 21 22 23 24 25 26 27 28 29 30
小结:
1.取出文件中的某一行,或者连续的几行
2.sed,head+tail
3.awk-了解
查找文件Find 与 替换sed
题目:把/oldboy目录及其子目录下所有以扩展名 .sh结尾的文件中,文件包含oldboy的字符串全部替换为oldgirl 创建测试环境: mkdir -p /oldboy/test cd /oldboy echo "oldboy">test/del.sh echo "oldboy">test.sh echo "oldboy">t.sh touch oldboy.txt touch alex.txt #第一个里程碑-找出你要的文件 [root@oldboyedu-01 oldboy]# find /oldboy/ -type f /oldboy/t.sh /oldboy/oldboy.txt /oldboy/test.sh /oldboy/test/del.sh /oldboy/ett.txt /oldboy/alex.txt [root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh" /oldboy/t.sh /oldboy/test.sh /oldboy/test/del.sh #第二个里程碑-oldboy替换为oldgirl 处理一个文件 [root@oldboyedu-01 oldboy]# cat /oldboy/t.sh oldboy [root@oldboyedu-01 oldboy]# #sed 's#找谁#替换为什么#g' /oldboy/t.sh [root@oldboyedu-01 oldboy]# #替换 [root@oldboyedu-01 oldboy]# sed 's#oldboy#oldgirl#g' /oldboy/t.sh oldgirl [root@oldboyedu-01 oldboy]# cat /oldboy/t.sh 默认是无法修改文件的,除了vim oldboy [root@oldboyedu-01 oldboy]# #sed修改文件的内容 用 -i [root@oldboyedu-01 oldboy]# sed -i 's#oldboy#oldgirl#g' /oldboy/t.sh [root@oldboyedu-01 oldboy]# cat /oldboy/t.sh oldgirl #第三个里程碑-把find命令找到的文件交给sed命令处理 [root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh" /oldboy/t.sh /oldboy/test.sh /oldboy/test/del.sh [root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs ls -l -rw-r--r--. 1 root root 7 Sep 25 11:59 /oldboy/test/del.sh -rw-r--r--. 1 root root 7 Sep 25 11:59 /oldboy/test.sh -rw-r--r--. 1 root root 8 Sep 25 12:08 /oldboy/t.sh [root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' oldgirl oldgirl oldgirl [root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' -i [root@oldboyedu-01 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat oldgirl oldgirl oldgirl
小结:
1.find 与|xargs
2.ls -l rm sed
3.sed名进行替换 修改文件内容