linux 的规则:
1. linux 命令行组成结构:如下
[root@neo ~]# [用户名@主机名 当前工作路径]# ~ 用户的家目录
2. linux系统命令操作语法的格式(命令的样子):
命令 空格 -[参数选项(条件)] [文件或路径(你要处理的内容)]
如: rm -f /tmp/test/txt
提示:
1. 一般情况下命令中的 [] 表示 可选,既命令的参数及文件是可选的;
2. 参数选项 ===> 一个命令的不同的功能(不同的条件)
3. linux目录结构:
windows目录: C:windows # 反斜线 linux目录:/etc/hosts # / 根目录 (一切从根开始);并且 路径的分割符号 / 斜线
3.1 创建目录:
# 创建一个目录 /data 创建目录 ===> make directory ===> mk dir ===> mkdir ls /data # 查看 /data 目录下的内容 ls -l /data # 查看 /data 目录下的详细信息 ll /data # 查看 /data 目录下的详细信息
3.2 # 创建文件:
# 在 /data 目录下创建一个文件 test.txt touch /data/test.txt # touch 命令 创建文件;touch 其实是用于更新文件的时间戳(如果文件不存在则创建,存在则更新文件时间)
3.3 # 为 test.txt 增加内容 "i am studying linux":
# 方法一:vi # 相当于 "记事本" ;vim # 相当于 "notepad++" (多用vim)
vi /data/test.txt # 编辑文件内容 cat /data/test.txt # 查看文件内容
# 方法二: echo 命令
echo 内容 # echo 命令会将它后面的内容 显示到屏幕上 echo 内容 >>/路径/文件 # > 就相当于一个漏斗(重定向符号),>> 作用是追加(追加重定向符号;把内容放在文件的最后一行),把 echo 后的内容放到一个地方,如:echo hello world >>/data/helloworld.txt
# 方法三:向一个文件中放入多行内容
cat >>/路径/文件<<EOF # >>表示追加; << 就固定写法,后面是结束标识符;EOF:end of file 内容1 内容2 ... EOF # EOF 要和第一行的 EOF完全一致;不能有空格 # 如: cat >>/data/test.txt<<EOF hello world EOF
漏斗家族:漏斗 即 重定向符号
> 和 >>
> 或 1> :标准输出(正确的内容)重定向:会清除文件原有内容,把 > (或 1>)前面的内容输入到后边的文件中 >> 或 1>> : 追加输出重定向:把前面的东西输入到后边的文件中,还会清除文件原有内容,只是追加到文件的最后一行 # 1 表示 标准输出:执行正确的内容才会通过漏斗; 1> 相当于 > , 1>> 相当于 >> # 除了能写 1 外,还可以写 2; 2> 表示 标准错误重定向 ,2>> 表示 错误追加重定向,(只有错误的信息能通过)如下: eco hello 2>>/data/helloworld.txt # 错误信息放入 /data/helloworld.txt 中 eco hello >>/data/helloworld.txt 2>>/data/helloworld.txt # 正确信息 和 错误信息 都放入 /data/helloworld.txt 中 # 上面的命令可简写为:
eco hello >>/data/helloworld.txt 2>&1 # 2>&1 的作用: 把错误的信息放入到对的信息中,结果就是对的、错的信息都在一起
< 和 <<
< :输入重定向 (很少使用) # 示例: [root@neo ~]# echo 1 2 3 4 5 >/data/num.txt # 创建环境 [root@neo ~]# cat /data/num.txt 1 2 3 4 5 [root@neo ~]# xargs -n2 </data/num.txt # xargs 用于分列, -n 表示分为几列 1 2 3 4 5 << :追加输入重定向 # 示例: cat >>/data/test.txt<<EOF hello world EOF
linux下的复制粘贴:
复制文件:把 /data/helloworld.txt 复制到 /tmp 目录下
# cp # 复制的命令 cp /data/helloworld.txt /tmp/ # 复制文件 # 注意:操作前要备份,操作后检查 # 备份: cp /data/helloworld.txt /data/helloworld.txt.bak # 备份文件
复制文件夹: 把 /data 目录复制到 /tmp 下
# linux 下好多命令无法直接处理目录(文件夹) cp -r /data/ /tmp/ # cp -r 表示复制这个目录(文件夹)及这个目录下的所有文件和文件夹; -r 表示递归 cp -a /data/ /opt/ # cp -a 也表示复制文件夹 # cp 命令的参数: -r --- 递归复制;复制目录及目录里面的内容 -p --- 复制的时候保持属性不变 -a --- 相当于 -pdr , 表示复制所有
linux下的移动:
mv # 移动的命令;移动文件或文件夹 # 把 /data 目录移动到 /root 目录下: mv /data/ /root/
linux下的删除:
删除文件:
# 进入 /root 目录下的 data目录,删除 helloworld.txt 文件 # 注意:删除前要先备份 rm helloworld.txt # 这种方式的删除会有询问是否删除 rm -f helloworld.txt # -f 直接删除
删除目录:
rm -r /tmp/data/ # rm -r 删除目录,这种方式的删除会有询问 rm -rf /tmp/data/ # rm -rf 直接删除目录 ; 注意:这种删除方式要慎用 # rm 参数: -r --- 递归删除 -f --- 强制删除
删除的安全方式:
find 命令:
find 路径 -type f -name "文件名" # 查找文件; -type f 表示 文件类型, -name "文件名" 表示要查找的文件名(文件名必须完全匹配才能找到;也可用正则匹配),如下: find /root/ -type f -name "helloworld.txt" find 命令参数: -type # 找什么类型的 f --- file 文件 d --- directory 目录
管道 ---》|
管道的概念: 把前面命令的结果 通过“管道”传递给后面的命令
find ...|xargs # find | xargs 是固定搭配,如下: [root@neo ~]# find /root/data/ -type f -name "*.txt"|xargs ls -l -rw-r--r--. 1 root root 12 Mar 8 15:09 /root/data/helloworld.txt -rw-r--r--. 1 root root 10 Mar 8 14:52 /root/data/num.txt -rw-r--r--. 1 root root 33 Mar 8 00:28 /root/data/test.txt # find /root/data/ -type f -name "*.txt"|xargs ls -l # 命令解释:find 找到的结果 通过管道 传递给 xargs 后面的命令,即把 find结果放到 ls -l 后面 # 通过find 能够更精确地找到要删除的文件,降低误删
grep & head/tail & awk & sed 命令:
# 要求:已知文件 test.txt内容如下: test neo zheng # 要求输出 test.txt 文件内容时,不包含 zhe 字符串 # 创建测试文件: mkdir /data cat >/data/test.txt<<EOF test neo zheng EOF
方法一:
# grep "内容" 文件名 :过滤 --- 在文件中找到你想要的内容(找到一行内容) [root@neo ~]# grep "zhe" /data/test.txt zheng # grep -v : 用于排除 (排除内容所在的那一行) [root@neo ~]# grep -v "zhe" /data/test.txt test neo
方法二:
# head 命令: 取一个文件的前几行可用 head 命令 head 文件 # 默认取出文件的前10行,如下: [root@neo ~]# head /data/test.txt test neo zheng # 取出前2行命令:head -n2 test.txt 或者 head -2 test.txt [root@neo ~]# head -n2 /data/test.txt test neo [root@neo ~]# head -2 /data/test.txt test neo # tail 命令:取出文件的最后多少行(用法和heah一样) tail 文件名 # 默认显示文件的最后10行 [root@neo ~]# tail /data/test.txt test neo zheng # 取出文件的最后2行: [root@neo ~]# tail -2 /data/test.txt neo zheng
方法三:
# awk 命令:awk '/内容/' 文件 # 单引号斜线中 是过滤的内容,如下: [root@neo ~]# awk '/zhe/' /data/test.txt zheng # awk 排除: awk '!/内容/' 文件 # awk 中 ! 表示取反 [root@neo ~]# awk '!/zhe/' /data/test.txt test neo
方法四:
# sed 命令:sed '/内容/d' 文件 # 去掉文件中的内容,如下: [root@neo ~]# sed '/zhe/d' /data/test.txt test neo
mkdir -p 命令:
要求:使用一条命令完成创建目录 /neozheng/test,即创建 /neozheng目录及 /neozheng/test
# mkdir 命令默认一次只能创建一层目录 # mkdir -p 命令可以一次创建多层目录 [root@neo ~]# mkdir /neozheng/test mkdir: cannot create directory `/neozheng/test': No such file or directory [root@neo ~]# mkdir -p /neozheng/test [root@neo ~]# ls /neozheng/ test
linux 别名:
要求: 已知 /tmp 下已经存在 helloworld.txt 文件,要求执行命令把 /mnt/helloworld.txt 拷贝到 /tmp 下覆盖掉 /tmp/helloworld.txt,而让系统不提示是否覆盖(root权限下)
1. 创建环境
touch /tmp/helloworld.txt /mnt/helloworld.txt # touch 可一次创建多个文件 [root@neo ~]# cp /mnt/helloworld.txt /tmp/ cp: overwrite `/tmp/helloworld.txt'? ^C [root@neo ~]#
方法一:撬棍(反斜线 )
# 在 cp 前加上 :cp [root@neo ~]# cp /mnt/helloworld.txt /tmp/ [root@neo ~]#
方法二:使用命令的绝对路径(全路径)
# 找一个命令的位置(如:cp 命令): which cp [root@neo ~]# which cp alias cp='cp -i' /bin/cp [root@neo ~]# /bin/cp /mnt/helloworld.txt /tmp/ [root@neo ~]# # 为什么我们执行 cp 命令的时候就相当于 cp -i # -i 是提示的作用 # 为什么我们执行 rm 命令的时候就相当于 rm -i ### 是因为 linux 的别名 # linux 别名的作用: 1. 防止运行危险命令 2. 简化命令
如何设置一个别名 ?
1. 查看系统中的别名:alias 命令
[root@neo ~]# alias alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' # 查看某些命令的别名: [root@neo ~]# alias cp mv rm alias cp='cp -i' alias mv='mv -i' alias rm='rm -i'
2. 模仿
# 执行rm命令的时候提示 do not use rm # 利用: alias rm='echo do not use rm' # 1. = 左右两边不能有空格;2. = 右边是 单引号;3. 单引号中必须是一个命令 # 注:这是一种临时性的别名更改,如重新连接后就会变成以前的别名(不再是你设置的别名) [root@neo ~]# rm /tmp/helloworld.txt do not use rm /tmp/helloworld.txt [root@neo ~]# rm -f /tmp/helloworld.txt do not use rm -f /tmp/helloworld.txt [root@neo ~]# rm -rf /tmp/helloworld.txt do not use rm -rf /tmp/helloworld.txt [root@neo ~]# # 这种情况下,如果真的想删,还是可以用上面的两种方式(撬棍和命令的绝对路径),因为这两种方法是临时取消别名的方法;如下: [root@neo ~]# m /tmp/helloworld.txt [root@neo ~]# ls -l /tmp/ total 0 [root@neo ~]# cp /mnt/helloworld.txt /tmp/ [root@neo ~]# ls -l /tmp/ total 0 -rw-r--r--. 1 root root 0 Mar 10 00:02 helloworld.txt [root@neo ~]# /bin/rm /tmp/helloworld.txt [root@neo ~]# ls -l /tmp/ total 0
3. 永久生效的别名:写入到 /etc/profile 文件
# 3.1 把 alias rm='echo do not use rm' 这条命令保存到 /etc/profile 文件中 # 3.2 让 /etc/profile 文件生效: source /etc/profile [root@neo ~]# tail -1 /etc/profile alias rm='echo do not use rm' [root@neo ~]# source /etc/profile [root@neo ~]# alias rm alias rm='echo do not use rm' [root@neo ~]# rm -f /mnt/helloworld.txt do not use rm -f /mnt/helloworld.txt # 补充: vim 快捷键 # 移到光标到文件的最后一行(命令行状态): G # 把光标移动到文件的第一行(命令行状态): gg # 在光标所在位置的下一行插入一个空行,并进入编辑状态: o (小写的o)
4. 填坑:上面的第3种方法有个坑: rm cp 和 mv 这三个命令修改别名时,需要修改 /root/.bashrc 这个文件,把对应的命令别名前加上注释 # ;要不然重启连接 xshell 后别名又恢复成了原先的
[root@neo ~]# vim /root/.bashrc # .bashrc # User specific aliases and functions # alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi [root@neo ~]# rm /mnt/helloworld.txt do not use rm /mnt/helloworld.txt # 这样重新连接后也是 cm mv 和 cp 这三个命令的别名也仍然是你自己修改的别名;这样当你真的想删除文件时,在 rm 前加上 撬棍 --- m
要求: 只查看 ett.txt 文件(共100行)内第20到第30行的内容
1. 准备环境
# seq 数字 # 生成 数字 ,如下: [root@neo /]# seq 10.1 1 2 3 4 5 6 7 8 9 10 [root@neo /]# seq 100 >/neozheng/ett.txt # 创建环境 [root@neo /]# tail /neozheng/ett.txt 91 92 93 94 95 96 97 98 99 100
方法一:sed 命令
# sed 命令是默认输出:sed命令会把文件的内容 默认都显示出来 sed '20p' /neozheng/ett.txt # '20p' --- 20 表示第20行,p 表示在终端显示;这条命令会把第20行在屏幕显示出来,由于 sed 命令会默认把文件内容都显示出来,所以第20行会显示2遍,如下: 1 ... 20 20 ... 100 # sed -n 表示取消默认显示,如下: [root@neo ~]# sed -n '20p' /neozheng/ett.txt 20 # 显示第20行到第30行: sed -n '20,30p' 文件 [root@neo ~]# sed -n '20,30p' /neozheng/ett.txt 20 21 22 23 24 25 26 27 28 29 30
方法二: head + tail
# 先利用 head 命令取出前10行,通过“管道”再利用 tail 取出后11行,如下: [root@neo ~]# head -30 /neozheng/ett.txt | tail -11 20 21 22 23 24 25 26 27 28 29 30
方法三: awk 命令
# awk 'NR==20' : 在 awk 命令中, NR表示 行号,== 表示 等于,20表示行号,如下: [root@neo ~]# awk 'NR==20' /neozheng/ett.txt 20 # 第20行到第30行 [root@neo ~]# awk 'NR==20,NR==30' /neozheng/ett.txt 20 21 22 23 24 25 26 27 28 29 30 # grep 命令补充: grep -A数字 '内容' 文件 # 在文件中找到该内容所有行的内容,并再显示出 该内容所在行的下面多少行的内容(-A 后面的数字) [root@neo ~]# grep -A3 '20' /neozheng/ett.txt 20 21 22 23
要求:把 /neozheng 目录及其子目录下所有以扩展名 .sh 结尾的文件中, 文件包含 neozheng 的字符串全部替换为 NEOZHENG
1. 创建测试环境:
mkdir -p /neozheng/test cd /neozheng echo "neozheng">test/del.sh echo "neozheng">test.sh echo "neozheng">t.sh touch neo.txt touch alex.txt
方法一:find ... |xargs sed -i 命令
# find 命令: find 后面什么都不加的时候 表示 显示当前目录下所有的信息,如下: [root@neo neozheng]# find . ./ett.txt ./test.sh ./t.sh ./neo.txt ./alex.txt ./test ./test/del.sh
2. 找出你要的文件
[root@neo neozheng]# find /neozheng/ -type f -name "*.sh" /neozheng/test.sh /neozheng/t.sh /neozheng/test/del.sh [root@neo neozheng]#
3. 把一个文件的内容从 neozheng 替换为 NEOZHENG
# sed 命令的替换: sed 's#找的内容#替换为什么#g' /路径/文件 # 要用 单引号 [root@neo neozheng]# cat /neozheng/t.sh neozheng [root@neo neozheng]# sed 's#neozheng#NEOZHENG#g' /neozheng/t.sh NEOZHENG [root@neo neozheng]# cat /neozheng/t.sh neozheng [root@neo neozheng]# # 由上可知, sed 命令只是让修改的内容在屏幕显示,并没有真正修改文件的内容 # linux 下大部分命令都没有办法直接改文件的内容(除了vi 和 vim ) # sed 命令修改文件的内容: sed -i 命令 [root@neo ~]# sed -i 's#neozheng#NEOZHENG#g' /neozheng/t.sh [root@neo ~]# cat /neozheng/t.sh NEOZHENG [root@neo ~]#
4. 把 find 命令找到的所有文件交给sed命令处理 (重点*)
[root@neo ~]# find /neozheng/ -type f -name "*.sh" /neozheng/test.sh /neozheng/t.sh /neozheng/test/del.sh [root@neo ~]# find /neozheng/ -type f -name "*.sh"|xargs sed 's#neozheng#NEOZHENG#g' NEOZHENG NEOZHENG NEOZHENG [root@neo ~]# find /neozheng/ -type f -name "*.sh"|xargs sed 's#neozheng#NEOZHENG#g' -i [root@neo ~]# find /neozheng/ -type f -name "*.sh"|xargs cat NEOZHENG NEOZHENG NEOZHENG [root@neo ~]# # 补充命令: man # linux 中查询帮助: man 命令
运维常用工具:
word优化: "文件" ---> "选项" ---> "校对" ---> 1. "在Word中更正拼写和语法时" 这个选项下面的都 取消掉 2. 点击 "自动更正选项(A)..." ---> 2.1 "自动更新"---取消 "键入时自动替换";并取消 "更正前两个字母连续大写","句首字母大写","表格单元格的首字母大写","英文日期第一个字母大写"和"更正意外使用大写锁定键产生的大小写错误" 2.2 "键入时自动套用格式" --- 取消 "直引号替换为弯引号" 和 "连字符替换为长划线" 2.3 "自动套用格式" --- 取消 "直引号替换为弯引号" 和 "连字符替换为长划线" "文件" ---> "选项" ---> "保存" ---> 设置 "保存自动恢复信息时间间隔" 和 "自动恢复文件位置" notepad++ 设置: "设置" ---> "首先项" ---> 选上"多选显示" ---> 1. "常用" ---> 选上"多选显示" 2. "文件关联" ---> Notepad --> .txt 和 .log 3. "备份" ---> "备份" 选择 "简单备份",并选上 "使用自定义备份目录" picpick 设置: "程序选项" ---> 1. "常规" ---> 修改 "语言" 2. "截取" ---> 选上 "总是复制截图到剪贴板" 3. "文件名" 选 "日期" 4. "自动保存" ---> 选上 "自动保存图像" 亿图 设置: 1. 安装 破解版 2. "选项" ---> "常规" ---> 2.1 修改 "自动保存间隔" 和 "撤消次数" 2.2 取消 "在程序启动时自动检验更新" 3. "选项" ---> "Quick Access T..." ---> "视图" ---> "显示库窗口" --- Add