Linux(2):基础命令

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
原文地址:https://www.cnblogs.com/neozheng/p/10493519.html