Linux之命令初识

Posted 游小刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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名进行替换 修改文件内容

以上是关于Linux之命令初识的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础:初识shell之系统命令基础

Linux操作系统基础解析之——grep命令家族及正则表达式初识

linux初级运维 之 初识终端

初识linux之畅游其中

新手学Linux,linux运维之初识shell

初识linux之文件管理