Linux命令初识

一、Linux命令初识

Linux与windows目录结构对比

PS1设置样式

#编辑:
vim /etc/bashrc 
#最下面添加:
export PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\\$ "
#生效:
source /etc/bashrc

命令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
相对路径  不从根开始的路径
          容易 迷路

导航pwd 和 创建文件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 #保持并退出

##第五个里程碑-查看文件的内容
[root@oldboyedu-01 data]# cat /data/oldboy.txt
I am studying linux.

:wq   保持并退出
:q    退出
:q!   强制退出不保存
:wq!  强制退出并保存

vi---记事本
vim--notepad++ emeditor word wps

输出命令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

漏斗家族

1、标准输出 执行正确的内容才会通过漏斗

#>   1> 标准输出重定向 先把文件的内容清空 把内容放在文件的最后一行
#>> 1>> 追加重定向 把内容放在文件的最后一行

#2>    标准错误重定向
#2>>  错误追加重定向

# 正确或者错误都写入文件

eho hello >>/data/oldboy.txt 2>>/data/oldboy.txt
eho hello >>/data/oldboy.txt 2>&1
                                          2>&1把错误的信息放入到对的信息中 对的错的在一起

2、< 输入重定向

# 支持的命令很少
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

3、<< 追加输入重定向

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

删除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

无文件存在的排错


无文件存在用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文档中的- ,复制到命令行中会出错
[root@nfs01 /data]# ll
total 4
-rw-r--r-- 1 root root    0 Feb 28 02:50 1.txt
-rw-r--r-- 1 root root    0 Feb 28 02:50 2.txt
-rw-r--r-- 1 root root    0 Feb 28 02:50 3.txt
-rw-r--r-- 1 root root    0 Feb 28 02:50 4.txt
-rw-r--r-- 1 root root    0 Feb 28 02:50 5.txt
drwxr-xr-x 2 root root 4096 Feb 28 02:51 bubu
[root@nfs01 /data]# ls|wc -l
6
[root@nfs01 /data]# ls|wc -l  #查看文件数量

关于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'这一行前面加上一个注释#

# 非要删除就使用撬棍或者绝对路径

生成序列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

查找文件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、大写

2、在系统大部分地方都可以使用,含义相同

3、常见的环境变量

LANG     PATH    PS1

PATH环境变量

env 命令查看环境变量

路径-存放的是Linux命令的位置/路径

[root@luffy_boy-001 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
# 用冒号分割 [root@luffy_boy
-001 ~]# echo $LANG en_US.UTF-8

linux下面运行命令过程

1、输入命令

2、在PATH里面 进行查找

3、找到了就运行,找不到就提示:command not found

查看目录

如何过滤出已知当前目录下oldboy中的所有一级目录(提示:不包含oldboy目录下面目录的子目录及隐藏目录,即只能是第一级目录)?

##创建环境
mkdir /oldboy -p
cd /oldboy
mkdir ext/oldboy test xiaodong xiaofan xingfujie -p
touch jeacen oldboy wodi.gz yingsui.gz
##方法1-tree
yum install  tree -y
[root@oldboyedu43-lnb oldboy]# tree -Ld 1
.
├── ext
├── test
├── xiaodong
├── xiaofan
└── xingfujie

5 directories

##方法2-find
[root@oldboyedu43-lnb oldboy]# find  -maxdepth 1 -type d   把-maxdepth放在前面,否则会有警告信息
.
./xingfujie
./test
./xiaodong
./xiaofan
./ext


[root@oldboyedu43-lnb oldboy]# find  -maxdepth 1 -type d  -name "."
.
[root@oldboyedu43-lnb oldboy]# find  -maxdepth 1 -type d ! -name "."
./xingfujie
./test
./xiaodong
./xiaofan
./ext


##方法3-grep
[root@oldboyedu43-lnb oldboy]# ls -l |grep "以d开头的行"
[root@oldboyedu43-lnb oldboy]# ls -l |grep "^d"
drwxr-xr-x  3 root root 4096 Dec 15 00:26 ext
drwxr-xr-x. 2 root root 4096 Dec 11 21:22 test
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaodong
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaofan
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xingfujie

^  高级货色(三剑客使用) 正则表达式 以.....开头的行

##方法4-awk

[root@oldboyedu43-lnb oldboy]# ls -l |awk '第2列大于1'
awk: 第2列大于1
awk: ^ invalid char '奠in expression
[root@oldboyedu43-lnb oldboy]# ls -l |awk '$2>1'
total 32

drwxr-xr-x  3 root root 4096 Dec 15 00:26 ext
drwxr-xr-x. 2 root root 4096 Dec 11 21:22 test
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaodong
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaofan
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xingfujie
这种方法其实是不准确的,了解一下

##方法5-ls
[root@oldboyedu43-lnb oldboy]# ls -F|grep "/"
ext/
test/
xiaodong/
xiaofan/
xingfujie/
[root@oldboyedu43-lnb oldboy]# #-F 给不通类型的文件 加上不通的标记/尾巴


##方法6-ls
ls -ld */
## 查看某个软件包里面有什么
[root@luffy_boy-001 oldboy]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
查看某个软件是否安装
rpm -qa |grep tree
查看软件包里面的内容
rpm -ql tree

跳转目录

 如何快速的回到 上一次所在的位置/目录

 cd -   快速回到上一次的位置。- 相当于 环境变量

cd  -  #cd $OLDPWD
cd  -  #如何快速的回到 上一次所在的位置
cd  .  #当前目录
        复制/移动
cd  .. #进入当前目录的上级目录
cd  ~  #进入当前目录的家目录 回老家
cd     #进入当前目录的家目录 回老家

查找最近更新的文件

一个目录中有很多文件(ls查-看时好多屏),想最快速度查看到最近更新的文件。如何看?

[root@luffy_boy-001 etc]# ls -lrt
t 按时间排序
r 逆序

实时查看日志内容的实时更新

调试系统服务时,希望能实时查看系统日志/var/log/messages 的更新,如何做?

#1、重新打开一个窗口
[root@luffy_boy-001 etc]# tail -f /var/log/messages 

tailf ==== tail -f 一样的

查找文件内容以及行号

三剑客sed、grep、awk都能过滤,但是在过滤方面还是grep的比较快一些

sed跟擅长替换,修改文本内容

awk擅长取行,取列

打印配置文件nginx.conf的内容的行号以及内容,该如何做?

打造环境

echo stu{01..10} |xargs -n1 >nginx.conf

###方法1
[root@oldboyedu-39-nb oldboy]# cat -n nginx.conf
     1    stu1
     2    stu2
     3    stu3
     4    stu4
     5    stu5

###方法2 vi /vim
:set nu   #显示行号
:set nonu #取消显示行号


###方法3 grep

[root@oldboyedu-39-nb oldboy]# grep -n "." nginx.conf
1:stu1
2:stu2
3:stu3
4:stu4
5:stu5

####. 正则表达式里面的  表示任意一个字符

###方法4 sed
[root@oldboyedu-39-nb oldboy]# sed '=' nginx.conf |xargs -n2
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5


###方法5 awk
[root@oldboyedu-39-nb oldboy]# awk '显示行号' nginx.conf
awk: 显示行号
awk: ^ invalid char '?in expression
[root@oldboyedu-39-nb oldboy]# awk '{print NR}' nginx.conf
1
2
3
4
5
[root@oldboyedu-39-nb oldboy]# awk '{print NR,$0}' nginx.conf
1 stu1
2 stu2
3 stu3
4 stu4
5 stu5

###方法6
[root@oldboyedu-39-nb oldboy]# nl nginx.conf
     1    stu1
     2    stu2
     3    stu3
     4    stu4
     5    stu5

文件处理(日志仅保留7天)

已知apache/nginx服务的访问日志按天记录在服务器本地目录/app/logs下,由于磁盘空间紧张,现在要求只能保留最近7天访问日志!请问如何解决? 请给出解决办法或配置或处理命令。(提示:可以从apache服务配置上着手,也可以从生成出来的日志上着手。)

# 创建环境
mkdir -p /app/logs
cd /app/logs
for  time in  {01..20};do  date -s "201705$time"; touch access_www_$(date +%F).log ;done
date -s "20170520"  修改系统时间

# 前第七天
[root@luffy_boy-001 logs]# find -type f -name '*.log' -mtime 7
./access_www_2017-05-13.log
# 7天之前
[root@luffy_boy-001 logs]# find -type f -name '*.log' -mtime +7
./access_www_2017-05-11.log
./access_www_2017-05-12.log
./access_www_2017-05-10.log
./access_www_2017-05-08.log
./access_www_2017-05-09.log
./access_www_2017-05-01.log
./access_www_2017-05-02.log
./access_www_2017-05-03.log
./access_www_2017-05-06.log
./access_www_2017-05-07.log
./access_www_2017-05-05.log
./access_www_2017-05-04.log
# 最近7天
[root@luffy_boy-001 logs]# find -type f -name '*.log' -mtime -7
./access_www_2017-05-18.log
./access_www_2017-05-15.log
./access_www_2017-05-20.log
./access_www_2017-05-16.log
./access_www_2017-05-19.log
./access_www_2017-05-17.log
./access_www_2017-05-14.log
找出/app/logs下面以.log结尾的并且修改时间是7天之前的文件并删除(ls -l)
find /app/logs/ -type f -name "*.log"  -mtime +7

#find /app/logs/ -type f -name "*.log"  -mtime +7|xargs ls -l
#ls -l $(find /app/logs/ -type f -name "*.log"  -mtime +7)
#find /app/logs/ -type f -name "*.log"  -mtime +7  -exec ls -l {}  \;


通过系统软件对日志进行切割。

补充find命令相关题目:

查找/oldboy 下所有以log 结尾的大于1M 的文件复制到/tmp

[root@oldboyedu43-lnb logs]# cat /etc/services  /etc/services > 1m.log
[root@oldboyedu43-lnb logs]# ls -lh 1m.log
-rw-r--r-- 1 root root 1.3M Dec 12 00:14 1m.log


find /oldboy  -type f -name "*.log"  -size +1M

-size +1M
-size +100k



find /oldboy  -type f -name "*.log"

mkdir -p /tmp/a /tmp/b /tmp/c /tmp/d

方法1 find+$()
#cp 次处是find命令的结果  /tmp/a/
cp   $(find /app/logs/ -type f -name "*.log")  /tmp/a/

方法2 find + -exec
find /app/logs/ -type f -name "*.log" -exec cp {} /tmp/b/  \;


方法3 find + |xargs
find /app/logs/ -type f -name "*.log" |xargs cp -t /tmp/c

设置服务的开启级别

装完系统后,希望让网络文件共享服务NFS(iptables),仅在3级别上开机自启动,应该怎么做?

[root@luffy_boy-001 logs]# chkconfig |grep ipt
iptables           0:off    1:off    2:on    3:on    4:on    5:on    6:off
[root@luffy_boy-001 logs]# chkconfig --level 3 iptables off
[root@luffy_boy-001 logs]# chkconfig |grep ipt
iptables           0:off    1:off    2:on    3:off    4:on    5:on    6:off
[root@luffy_boy-001 logs]# chkconfig --level 35 iptables off
[root@luffy_boy-001 logs]# chkconfig |grep ipt
iptables           0:off    1:off    2:on    3:off    4:on    5:off    6:off

备份一堆文件-打包tar

/etc/目录是linux系统默认的配置文件以及服务启动命令的目录

a、请用tar打包/etc整个目录(打包以及压缩)

b、请把a点命令的压缩包,解压到/tmp 指定目录下(最好用tar命令实现)

c、请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)

 tar - 创建查看解压 压缩包

####创建一个压缩包

#tar zcvf /tmp/etc.tar.gz /etc/


#z----压缩工具---gzip    最常用一种  压缩之后我们一般给 压缩包命名位 xxxx.tar.gz
#c----创建-------create
#v----verbose 显示压缩/解压执行过程
#f----file------指定压缩包的名字


###查看压缩包里面的内容
tar ztf /tmp/etc.tar.gz

#t---list------列表 显示

###解压----解压到当前目录
# cd /tmp/
# pwd
/tmp
# tar zxvf /tmp/etc.tar.gz

#x-----extract 解压

 

提示的是什么?:

[root@luffy_boy-001 etc]# tar zcf /etc/haha.tar.gz /etc/
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
tar: /etc: file changed as we read it

###问题:"创建压缩包"的时候会提示
tar: Removing leading `/' from member names
tar:把每个文件开头的/删除掉了。
/etc/hosts ------>  etc/hosts
tar命令提示你:我在创建压缩包的时候 把压缩包中的文件 绝对路径----->相对路径

tar: Removing leading `/' from hard link targets
打包的时候使用相对路径,就不会出现提示了
###小结:核心 为了安全----tar命令 把你使用的绝对路径----变化为-----相对路径
b.请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)。

[root@oldboyedu-39-nb /]# tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude=services   ###排除所有文件名叫services的文件
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboyedu-39-nb /]# tar tf /tmp/etc-pai.tar.gz |grep services
etc/init/readahead-disable-services.conf
[root@oldboyedu-39-nb /]# tar tf /tmp/etc.tar.gz |grep services
etc/services
etc/init/readahead-disable-services.conf


##排除---精确版本 加上位置
[root@oldboyedu-39-nb /]# tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude=etc/services
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboyedu-39-nb /]# tar tf /tmp/etc-pai.tar.gz |grep services
etc/sysconfig/services
etc/init/readahead-disable-services.conf


#把你要排除的名单写到一个文件中 /tmp/paichu.txt(了解)
#tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude-from=/tmp/paichu.txt


c.请把a点命令的压缩包,解压到/tmp指定目录下(最好只用tar命令实现)。
tar xf /tmp/etc-pai.tar.gz -C /opt


把/etc/hosts /etc/sysconfig/network /etc/sysconfig/i18n /etc/init.d/  打包压缩 /tmp/conf.tar.gz
解压到/opt目录


[root@oldboyedu-39-nb /]# tar zcf /tmp/conf.tar.gz /etc/hosts /etc/sysconfig/network /etc/sysconfig/i18n /etc/init.d/
tar: Removing leading `/' from member names
[root@oldboyedu-39-nb /]# tar tf /tmp/conf.tar.gz
etc/hosts
etc/sysconfig/network
etc/sysconfig/i18n
etc/init.d
[root@oldboyedu-39-nb /]# tar xf /tmp/conf.tar.gz -C /opt/
[root@oldboyedu-39-nb /]# ls  /opt/
etc  rh

小结:

#1.创建压缩包
tar zcf /tmp/oldboy.tar.gz   /oldboy

#2.查看压缩包中的内容
tar tf /tmp/oldboy.tar.gz

#3.解压---解压到当前目录
tar xf  /tmp/oldboy.tar.gz
tar xf  /tmp/oldboy.tar.gz  -C /opt

#4.创建压缩包的时候 排除
tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude=etc/services

tar zcf /tmp/etc-pai.tar.gz /etc/ --exclude-from=/tmp/paichu.txt

zip的使用

zip  oldboy.txt.zip  oldboy.txt
unzip

sed和awk筛选出文件中的指定内容

已知如下命令及结果:
mkdir -p /oldboy
echo "I am oldboy,myqq is 31333741">/oldboy/oldboy.txt

a.现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令.
b.如果需要从文件中过滤出“oldboy,31333741”字符串,请再给出命令.

a.现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令.
方法1-sed-sed
[root@oldboyedu01-nb oldboy]# sed 's#I am ##g' oldboy.txt |sed 's#,myqq is##g'
oldboy 31333741
方法2-sed/tr+awk [root@oldboyedu01-nb oldboy]# sed 's#,# #g' oldboy.txt |awk '{print $3,$6}' oldboy 31333741 [root@oldboyedu01-nb oldboy]# tr "," " " <oldboy.txt |awk '{print $3,$6}' oldboy 31333741 方法3-awk指定多个分隔符号 [root@oldboyedu01-nb oldboy]# cat oldboy.txt I am oldboy,myqq is 31333741 [root@oldboyedu01-nb oldboy]# awk -F "," '{print $1}' oldboy.txt I am oldboy [root@oldboyedu01-nb oldboy]# awk -F "[, ]" '{print $3,$6}' oldboy.txt oldboy 31333741 -F "[, ]" 表示以逗号或者空格作为菜刀 分隔符 b.如果需要从文件中过滤出“oldboy,31333741”字符串,请再给出命令. [root@oldboyedu01-nb oldboy]# awk -F "[, ]" '{print $3,$6}' oldboy.txt oldboy 31333741 [root@oldboyedu01-nb oldboy]# awk -F "[, ]" '{print $3","$6}' oldboy.txt oldboy,31333741 [root@oldboyedu01-nb oldboy]# awk -F "[, ]" '{print $3"$1"$6}' oldboy.txt oldboy$131333741 [root@oldboyedu01-nb oldboy]# awk -F "[, ]" '{print $3" $1 "$6}' oldboy.txt oldboy $1 31333741 小结: 1.tr命令 2.awk指定分隔符 指定多个分隔符

awk分割列的方式

统计文件信息  wc  -l

可以统计文件有多少行,有多少单词,多大等

如何查看/etc/services文件的有多少行?

[root@oldboyedu01-nb oldboy]# wc -l /etc/services
10774 /etc/services

查看程序是否运行 ps  -ef

1)查看22端口是否开启 telnet
2)sshd远程连接进程是否在运行******
ps -ef

[root@oldboyedu01-nb oldboy]# ps -ef |grep "sshd"
root       1509      1  0 17:51 ?        00:00:00 /usr/sbin/sshd
root       1669   1509  0 17:51 ?        00:00:00 sshd: root@pts/0
root       1795   1509  0 18:17 ?        00:00:00 sshd: root@pts/1
root       1813   1671  0 18:17 pts/0    00:00:00 grep sshd

[root@oldboyedu01-nb oldboy]# ps -ef |grep "/sshd"
root       1509      1  0 17:51 ?        00:00:00 /usr/sbin/sshd
root       1817   1671  0 18:19 pts/0    00:00:00 grep /sshd
[root@oldboyedu01-nb oldboy]# ps -ef |grep "/sshd"|wc -l   得到数字
2

过滤指定内容所在行的内容 egrep

过滤出/etc/services 文件包含3306或1521两数字所在的行的内容。

[root@oldboyedu01-nb oldboy]# egrep "3306|1521" /etc/services
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
ncube-lm        1521/tcp                # nCube License Manager
ncube-lm        1521/udp                # nCube License Manager
[root@oldboyedu01-nb oldboy]# #egrep === grep -E 支持高级正则(公鸡里的战斗机)

stat--Linux文件属性之时间

mtime  modified time 文件的修改时间     文件内容的变化时间
ctime  change   time 文件属性的改变时间 硬链接数量 文件大小 文件权限
atime  access   time 文件的访问时间     cat

#文件的修改时间
[root@oldboyedu01-nb ~]# ls -l oldboy.txt               
-rw-r--r--. 1 root root 17 Sep 25 16:47 oldboy.txt

#查看所有时间
[root@oldboyedu01-nb ~]# stat oldboy.txt
  File: `oldboy.txt'
  Size: 17            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 262707      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-09-25 16:47:54.628044632 +0800
Modify: 2017-09-25 16:47:53.059040702 +0800
Change: 2017-09-25 16:47:53.101042388 +0800
[root@oldboyedu01-nb ~]#


#mtime [root@oldboyedu01-nb ~]# echo hello >>oldboy.txt [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:45:10.447937840 +0800
#ctime change
time [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:45:10.447937840 +0800 [root@oldboyedu01-nb ~]# ln oldboy.txt oldboy.txt-hard [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:47:35.328930646 +0800 #atime [root@oldboyedu01-nb ~]# [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-09-25 16:47:54.628044632 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:47:35.328930646 +0800 [root@oldboyedu01-nb ~]# cat oldboy.txt 爱生活 爱李 hello [root@oldboyedu01-nb ~]# stat oldboy.txt File: `oldboy.txt' Size: 23 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 262707 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-10-17 21:50:13.969932450 +0800 Modify: 2017-10-17 21:45:10.447937840 +0800 Change: 2017-10-17 21:47:35.328930646 +0800

命令行及shell中加单引号和加双引号的区别

 单引号 所见即所得 吃啥吐啥
[root@oldboyedu01-nb oldboy]# echo 'hello lls $LANG $(hostname) `pwd`'
hello lls $LANG $(hostname) `pwd`

 双引号 里面的特殊符号会被解析

[root@oldboyedu01-nb oldboy]# echo "hello lls $LANG $(hostname) `pwd`"
hello lls en_US.UTF-8 oldboyedu01-nb /oldboy
posted @ 2020-02-07 01:39  silencio。  阅读(300)  评论(0编辑  收藏  举报