学完这些命令,就能玩转Linux了(一)

1 Linux系统命令概述

运行在服务器端的Linux系统(RedHat,CentOS占据绝大多数份额),通常都是通过远程连接客户端,例如之前介绍的SecureCRT,XShell等等来连接后通过命令行来完成绝大多数交互。
Linux系统的命令常用的大概有80多个,包含了日常使用的绝大多数任务,例如处理文件,进程管理等等。
Linux系统命令的格式:command [options] [arguments] ,options和arguments都是可选的,其中options包含短选项和长选项两种,短选项可以追加多个,arguments就是命令作用的对象。

2 Linux系统常用命令之目录处理

pwd:查看当前所在的目录

[guanglei@tony ~]$ pwd #这里是创建用户guanglei,并成功登录之后显示的目录 
/home/guanglei
[root@tony ~]# pwd #查看当前用户root登录所在的目录 默认是/root
/root

[root@tony ~]# 参数说明:
root 表示当前登录的用户
@ 分隔符的作用
tony 表示主机名
~ 表示 当前所在的目录,一般用户登录成功之后都是在/home/user directory

mkdir:创建目录
-p 递归创建

[root@tony ~]# mkdir /data #创建目录
[root@tony ~]# ls -ld /data #查看目录的详细信息
drwxr-xr-x. 2 root root 4096 Jan 26 23:42 /data

创建多级目录

[root@tony ~]# cd /data/ #进入根目录的data目录
[root@tony data]# mkdir -p parent/son/grandson #创建三个级别的目录
[root@tony data]# tree #查看目录和文件的关系树
.
└── parent
    └── son
        └── grandson

3 directories, 0 files

删除空目录

[root@tony data]# cd parent/son/#进入父目录的子目录
[root@tony son]# rmdir grandson/#将子目录的孙子目录(空目录)删除

路径:从指定起始点到目的地所经过位置
相对路径和绝对路径:
/表示Linux系统的根目录,从该路径开始的就是根路径,否则就是相对路径

3 Linux系统常用命令之文件处理

touch:创建空文件(文本文件)
-n 显示行号

[root@tony data]# touch tony.txt #创建名为tony.txt的文本文件
[root@tony data]# touch angela.txt tom.txt #创建多个文本文件
[root@tony data]# ll #查看文件详细信息
total 4
-rw-r--r--. 1 root root 0 Jan 26 23:48 angela.txt
drwxr-xr-x. 3 root root 4096 Jan 26 23:43 parent
-rw-r--r--. 1 root root 0 Jan 26 23:48 tom.txt
-rw-r--r--. 1 root root 0 Jan 26 23:48 tony.txt

cat:查看文件内容

[root@tony data]# cat tony.txt 
#追加内容之后再次查看
[root@tony data]# cat > tony.txt <<EOF #写入指定的内容
> this is test content
> EOF
[root@tony data]# cat tony.txt #查看写入内容
this is test content

echo:打印内容

[root@tony data]# echo "I am studying linux " >angela.txt #写入指定的内容到文件
[root@tony data]# cat angela.txt #查看写入的内容
I am studying linux 

“>” 写入数据,并且会清除原来的数据
“>>” 写入数据,不会清除原来的数据

[root@tony data]# echo "I am studying java" >angela.txt #写入指定的内容到文件
[root@tony data]# cat angela.txt #查看写入的内容
I am studying java
[root@tony data]# echo "I am studying c++" >> angela.txt #追加指定的内容到文件 
[root@tony data]# cat angela.txt #查看追加的内容
I am studying java
I am studying c++

vim:文本编辑器
i 编辑模式,此时可以修改文本内容
ESC(退出编辑并回到命令模式) :wq 退出并保存内容

使用VIM编辑器编辑文件内容和cat查看编辑后的内容

[root@tony data]# vim tony.txt #此时进入的是命令模式
[root@tony data]# cat tony.txt 
this is test content
content changed

find:文件查找
-name 名称
-type 类型
创建/data/parent/son/grandson目录和名为file.txt的文件

root@tony /]# cd /data/
[root@tony data]# mkdir -p parent/son/grandson #递归创建三级目录
[root@tony grandson]# touch file.txt #创建文本文件
[root@tony grandson]# cat >file.txt <<EOF #创建测试数据
> this is test content
> EOF

在当前目录下找file.txt的文本文件

[root@tony data]# find . -name "file.txt" -type f #在当前目录下找file.txt的文本文件
./parent/son/grandson/file.txt

删除一个目录下的所有文件,但是保留一个文件

[root@tony data]# echo "this is test content" >tony.txt #创建文本测试数据
[root@tony data]# echo "this is test content" >tom.txt #创建文本测试数据
[root@tony data]# find /data/ -type f ! -name "tony.txt"|xargs rm -rf

cp:文件或者目录的复制
-r 递归复制
-p 保持属性
-a 复制目录

[root@tony data]# ll #查看文件信息
total 8
-rw-r--r--. 1 root root 18 Feb 2 12:28 angela.txt
-rw-r--r--. 1 root root 44 Feb 2 12:08 tony.txt
[root@tony data]# cp angela.txt /tmp/
[root@tony /]# cp -a /data /tmp #将data目录的文件复制到/tmp目录中
[root@tony /]# ll /tmp  #查看复制后的结果
total 12
-rw-r--r--. 1 root root 18 Feb 2 12:30 angela.txt
drwxr-xr-x. 2 root root 4096 Feb  2 12:28 data
-rw-r--r--. 1 root root 44 Feb 2 12:29 tony.txt
-rw-------. 1 root root 0 Jan 31 20:29 yum.log
[root@tony /]# 

使用全路径实现文件的强制复制

[root@tony data]# ll
total 4
-rw-r--r--. 1 root root 59 Feb 3 17:01 tony.txt
[root@tony data]# /bin/cp /data/tony.txt /tmp #使用全路径实现文件的强制复制
[root@tony tmp]# ll
total 8
drwxr-xr-x. 2 root root 4096 Feb  3 09:59 data
-rw-r--r--. 1 root root 59 Feb 3 17:21 tony.txt

mv:文件或目录的移动(剪切)
-b 若需覆盖文件,则覆盖前先行备份。
-f force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i 若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u 若目标文件已经存在,且 source 比较新,才会更新(update)

创建三个文本文件
[root@tony data]# touch tony.txt tom.txt angela.txt
[root@tony data]# ll
total 0
-rw-r--r--. 1 root root 0 Jan 27 00:17 angela.txt
-rw-r--r--. 1 root root 0 Jan 27 00:17 tom.txt
-rw-r--r--. 1 root root 0 Jan 27 00:17 tony.txt
[root@tony data]# mv -f /data/ /tmp
[root@tony data]# cd /tmp/
[root@tony tmp]# ll
total 8
drwxr-xr-x.  2 root root 4096 Jan 27 00:19 data

rm:删除指定路径目录或者文件
-r 删除目录
-f 强制删除
生产环境最好不要使用该命令,如果真的要删除文件,最好使用cp命令备份
或者使用mv移到一个临时目录。例如Windows系统的回收站

[root@tony tmp]# ll
total 12
drwxr-xr-x.  3 root root 4096 Jan 26 23:57 data
drwxr-xr-x. 73 root root 4096 Jan 21 04:23 etc
drwxr-xr-x.  3 root root 4096 Jan 26 23:43 parent
-rw-------.  1 root root    0 Jan 20 15:47 yum.log
[root@tony tmp]# rm -rf data/
[root@tony tmp]# ll
total 8
drwxr-xr-x. 73 root root 4096 Jan 21 04:23 etc
drwxr-xr-x.  3 root root 4096 Jan 26 23:43 parent
-rw-------.  1 root root    0 Jan 20 15:47 yum.log

seq:创建序列
-s 指定序列的分隔符

创建1-10之间的序列并写入到tom.txt

[root@tony data]# seq 1 10 >tom.txt
[root@tony data]# cat tom.txt 
1
2
3
4
5
6
7
8
9
10

head:查看文本文件头部的内容
-n 数字 也可以写成 - 数字,作用是查看文本开头指定函数的内容 默认是开头10行

"tony.txt" 12L, 93C written
[root@tony data]# clear
[root@tony data]# cat tony.txt 
this is test content
java
javase
spring
mybatis
restful
maven
git
oracle
mysql
redis
mongodb
[root@tony data]# head -5 tony.txt 查看指定文本文件行数的内容
this is test content
java
javase
spring
mybatis

tail:查看文件尾部的内容
-行数: 查看指定文件的末尾n行,默认是末尾10行
-f 跟踪文件尾部的实时变化,常用来查看程序运行的日志

[root@tony data]# tail -2 tony.txt 
redis
mongodb

使用head和tail获取序列的区间值

[root@tony data]# seq 1 20 >test.txt 写入20个序列值
[root@tony data]# head -10 test.txt |tail -6 获取5到10行
5
6
7
8
9
10

使用sed实现获取指定区间行号的内容(这里取得是区间的序列) 擅长取行,替换

[root@tony data]# sed -n '5,10p' test.txt 
5
6
7
8
9
10

使用awk实现获取指定区间行号的内容
NR表示行号

[root@tony data]# awk '{if(NR<11&&NR>4) printf $1 "\n"}' test.txt 
5
6
7
8
9
10

Linux命令的别名机制
通过使用alias命令可以查看一些命令的默认选项,为了保护系统的安全,同时也让复杂的命令变得简单
例如cp命令默认加上了-i选项,在复制的时候会询问是否覆盖原文件,如果想屏蔽别名,可以使用路径的绝对路径,见上面的cp命令的使用案例

[root@tony tmp]# 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@tony tmp]# unalias cp #取消别名后(使用命令,重启后又会失效)
[root@tony tmp]# cp /data/tony.txt /tmp/tony.txt #复制文件不会再询问是否替换

增加别名,并查看结果

[root@tony tmp]# alias cp='cp -i' #增加别名
[root@tony tmp]# 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@tony tmp]# 

通过别名达到禁用rm命令

[root@tony tmp]# alias rm='echo "rm can not used please use mv"' 
[root@tony tmp]# rm
rm can not used please use mv

之前使用的方式修改别名重启后不会生效,
而root用户可以通过修改bashrc文件来达到永久生效的目的

[root@tony tmp]# vi /root/.bashrc

想要让所有用户生效,可以修改/etc/profile文件,将别名写入配置文件即可

[root@tony tmp]# vim /etc/profile #编辑全局属性配置文件
[root@tony tmp]# source /etc/profile #让修改的配置文件生效

4 Linux命令三剑客 grep sed awk

grep:实现指定内容的数据过滤
-v 过滤掉指定内容的行
-i 不区分大小写
-E 过滤多个字符串
-o 输出多个精确匹配的字符,而不是整行

[root@tony data]# cat angela.txt #创建测试数据
this is test content
java
c++
python
ruby
[root@tony data]# grep -v "java" angela.txt  #过滤java字符串
this is test content
c++
python
ruby

sed 过滤内容 sed -n ‘/包含的内容/’ 文件
-n 取消sed的默认输出
-i 改变文件内容
p print打印内容
d delete删除

[root@tony data]# sed -n '/java/p' angela.txt #查看angela.txt文件中的包含java字符串的文本内容
java

删除指定的文件内容后并查看

[root@tony data]# sed -i '/java/d' angela.txt #删除java字符串
[root@tony data]# cat angela.txt #查看删除后的结果
this is test content
c++
python
ruby

在不改变文件的基础上删除指定的字符串并将结果输出

[root@tony data]# sed '/java/d' tony.txt 
this is test content
c++
php
ruby
python

使用sed 实现文件内容替换
sed -i s###g #表示分隔符,也可以使用其他特殊字符,需要注意的是分隔符必须不存在于替换的文件中, -i表示改变原文件的内容。
s 查找并替换,用一个字符串替换另外一个字符串
g(global) 与s联合使用是,对文件所有内容全局匹配替换

[root@tony data]# cat test.txt 
tony tony
[root@tony data]# sed -i 's#tony#angela#g' test.txt 将test.txt中的tony全局替换成angela
[root@tony data]# cat test.txt 
angela angela

awk:一门语言,可以实现过滤内容(取列),打印,删除 擅长取列

awk ‘{print $1 }’ 文件 打印指定文件的第一列内容 列之间使用空格分隔
NF 表示最后一列
NR 表示行号
-F “:” 指定分割的内容,这里使用冒号作为例子

[root@tony data]# cat tony.txt 
tony boy
angela girl
[root@tony data]# awk '{print $1}' tony.txt 
tony
angela
[root@tony data]# awk '{print $2}' tony.txt
boy
girl

[root@tony data]# cat tony.txt 
tony:boy
angela:girl
[root@tony data]# awk -F ":" '{print$2}' tony.txt 
boy
girl
[root@tony data]# awk -F ":" '{print $1}' /etc/passwd

使用awk实现获取指定区间行号的内容(这里取得是区间的序列)
NR表示行号
\n表示换行

[root@tony data]# awk '{if(NR<41&&NR>29) printf $1 "\n"}' angela.txt 
30
31
32
33
34
35
36
37
38
39
40

使用find和sed实现指定路径的文件内容替换

创建三个级别的目录,并且创建三个文本文件,内容保持一致

[root@tony data]# mkdir -p parent/son/grandson
[root@tony data]# cd parent/
[root@tony parent]# echo "this is linux operator system" >test.txt
[root@tony parent]# cd son/
[root@tony son]# echo "this is linux operator system" >test.txt
[root@tony son]# cd grandson/
[root@tony grandson]# echo "this is linux operator system" >test.txt

查看结构的目录树

[root@tony data]# tree
.
└── parent
    ├── son
    │   ├── grandson
    │   │   └── test.txt
    │   └── test.txt
    └── test.txt

3 directories, 3 files

实现查找和文本内容替换

[root@tony data]# find . -name "test.txt" -type f |xargs sed -i 's#linux#unix#g'
[root@tony data]# ll
total 4
drwxr-xr-x. 3 root root 4096 Jan 27 21:48 parent
[root@tony data]# cd parent/
[root@tony parent]# ll
total 8
drwxr-xr-x. 3 root root 4096 Jan 27 21:48 son
-rw-r--r--. 1 root root   29 Jan 27 21:48 test.txt
[root@tony parent]# cat test.txt 
this is unix operator system
[root@tony parent]# 

另外一种并行的实现

[root@tony data]# sed -i 's#linux#unix#g' `find /data/ -type f -name "test.txt"`

5 Linux系统软件安装和卸载

Linux系统的软件安装可以使用yum和rpm命令来实现软件的安装和卸载
yum :Linux系统的安装包管理器(在线安装)
yum update 系统升级,更新所有软件到最新版本,线上一般不要做。

[root@tony data]# yum install -y tree #不需要提示直接安装tree命令

意味着下载tree包,然后调用rpm命令安装tree包,如果需要依赖包,帮你提前下载和安装依赖的包
yum remove packageName 删除指定的软件包

rpm -ivh
例如 rpm -ivh 安装包.rpm(需要提前下载好安装包)
问题:依赖问题不好解决

[root@tony data]# rpm -qa tree #查看安装好的tree安装包信息
tree-1.5.3-3.el6.x86_64

源代码:
./configure
make&&make install

6 Linux系统命令帮助查看

服务器端的Linux的绝大多数操作都是通过命令行来实现的,而这些命令都可以通过man command或者command –help来查看命令的帮助文档,bash的内置命令可以使用help command来查看,可以使用type查看命令类型。

[root@tony data]# help cd 
[root@tony data]# type cd #使用type查看命令的类型
cd is a shell builtin #cd是bash的内置命令

man命令使用说明:
分章节:
1:用户命令(/bin, /usr/bin, /usr/local/bin)
2:系统调用
3:库用户
4:特殊文件(设备文件)
5:文件格式(配置文件的语法)
6:游戏
7:杂项(Miscellaneous)
8: 管理命令(/sbin, /usr/sbin, /usr/local/sbin)

<>:必选
[]:可选
…:可以出现多次
|:多选一
{}:分组

MAN:
NAME:命令名称及功能简要说明
SYNOPSIS:用法说明,包括可用的选项
DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS:说明每一个选项的意义
FILES:此命令相关的配置文件
BUGS:
EXAMPLES:使用示例
SEE ALSO:另外参照

翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k

查找:
/KEYWORD: 向后
n: 下一个
N:前一个

?KEYWORD:向前
n: 下一个
N:前一个

q: 退出

欢迎扫描下方的二维码,关注艺无止境的公众号,分享技术干货。
学完这些命令,就能玩转Linux了(一)_第1张图片

你可能感兴趣的:(学完这些命令,就能玩转Linux了(一))