运行在服务器端的Linux系统(RedHat,CentOS占据绝大多数份额),通常都是通过远程连接客户端,例如之前介绍的SecureCRT,XShell等等来连接后通过命令行来完成绝大多数交互。
Linux系统的命令常用的大概有80多个,包含了日常使用的绝大多数任务,例如处理文件,进程管理等等。
Linux系统命令的格式:command [options] [arguments] ,options和arguments都是可选的,其中options包含短选项和长选项两种,短选项可以追加多个,arguments就是命令作用的对象。
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系统的根目录,从该路径开始的就是根路径,否则就是相对路径
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 #让修改的配置文件生效
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"`
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
服务器端的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: 退出