Linux基础

关于作者

周李杰,最后一批90后,现居湖北武汉

孤独患者,懒癌中期,无脑幻想者。但却人畜无害,无需远离。

兴趣众多,然无一精通。正努力成为一个有趣的人。

1
2
> print("👆以上是不完整的我") //请我吃大餐将会了解更多
>

基础知识

[TOC]

Linux的基本原则

  • 由目的单一的小程序组成,组成小程序来完成复杂的任务
1
2
[root@MR ~]# cat CentOS-Base.repo | wc -l
62
  • Linux里一切皆是文件
1
2
3
4
[root@MR ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
[root@MR ~]# file /dev
/dev: directory
  • 一些配置文件都是保存成纯文本格式
1
2
[root@MR ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text

shell

  • 什么是shell呢,英语翻译shell就是一个外壳,他可以理解为用户的工作环境,在window中shell就是桌面,那在Linux中呢,我们常用的终端就是一个shell
1
2
[root@MR ~]# echo $SHELL
/bin/bash
  • 常见的shell有两种形式,一种是图形界面,即GUI,例如window就是一种GUI。还有一种就是命令行终端,即CLI,Linux系统中的bash就是CLI,接下来就会写到bash
1
2
3
4
5
6
7
8
[root@MR /]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
# 以上是本系统支持的shell

bash

bash的特性:

  • 支持命令历史、命令补全、路径补全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@MR /]# history
.........以上省略...........
693 cat /etc/shells
694 history
[root@MR /]# !693
cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
[root@MR /]# history -c
[root@MR /]# history
1 history
1
2
3
4
5
6
[root@MR /]# pa
packer parted paste
pam_console_apply partprobe pathchk
pam_tally2 partx
pam_timestamp_check passwd
[root@MR /]# passwd
1
2
3
4
[root@MR /]# cd /etc/sys
sysconfig/ sysctl.d/ system-release
sysctl.conf systemd/ system-release-cpe
[root@MR /]# cd /etc/sysconfig/
  • 支持管道、重定向
1
2
3
 | 如同任意门
[root@MR ~]# cat CentOS-Base.repo | wc -l
62
1
2
3
[root@MR ~]# echo '12344321' > 15
[root@MR ~]# cat 15
12344321
  • 支持命令行编辑
1
2
3
4
5
6
7
8
9
10
alias   快捷命令操作
[root@MR ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@MR ~]# alias passwd='cat /etc/passwd'
[root@MR ~]# passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#(如果你先重启电脑还能使用的话,请往下看)
[root@MR ~]# ls -a
[root@MR ~]# vim .bashrc
(按字母“i”进入编辑模式)
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias network='cd /etc/sysconfig/network-scripts'
alias passwd='cat /etc/passwd' #(将此行命令添加进去)
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc #(如果你想任何用户都可以使用得话,请添加之此文本文件/etc/bashrc)
fi
(狂按‘esc键’输入":wq")
1
2
3
4
快捷操作键:
ctrl+a 命令回到开始
ctrl+e 命令回到最后
ctrl+w 命令一节一节得删除
  • 支持命令行展开
1
2
3
4
5
6
7
8
9
10
11
12
#(首先你要yum install tree -y 来安装tree)
[root@MR ~]# mkdir -p a/{b/{d,e/{f,g}},c}
[root@MR ~]# tree a
a
├── b
│   ├── d
│   └── e
│   ├── f
│   └── g
└── c

6 directories, 0 files
  • 支持文件名通配
1
2
3
4
5
6
#(a*可以匹配当前目录下所有a开头的文件)
[root@MR ~]# ls a*
anaconda-ks.cfg

a:
b c
  • 支持变量
1
2
3
[root@MR ~]# a=3
[root@MR ~]# echo $a
3
  • 支持编程
1
2
3
4
[root@MR ~]# vim shijian.sh
# 将date加如进去
[root@MR ~]# bash shijian.sh
2019年 03月 23日 星期六 11:31:45 CST

bash支持的引号

“ ` ”反引号 用于命令替换 反引号里面的命令取出来是它们的值

1
2
3
4
[root@MR ~]# pwd
/root
[root@MR ~]# echo `pwd`
/root

“ ‘ ” 单引号 取本身,不完成命令替换

1
2
[root@MR ~]# echo 'pwd'
pwd

“ “ ” 双引号 实现命令替换,支持变量

1
2
3
[root@MR ~]# a=1
[root@MR ~]# echo "$a"
1

另:单引号取出来是本身

反引号和双引号取出来是他们的值

bash的快捷操作

  • ctrl+a 跳到行头
  • ctrl+e 跳到行尾
  • ctrl+u 删除光标前面的内容
  • ctrl+k 删除光标后面的内容
  • ctrl+<–
  • ctrl+L 清屏

bash的命令历史

history 查看命令历史

1
2
3
4
5
6
[root@MR ~]# history
1 ls
2 history
3 echo `$a`
4 cd /etc/sysconfig/network-scripts/
......以下省略.........

常用选项

​ -c 清除历史命令

1
2
3
[root@MR ~]# history -c
[root@MR ~]# history
1 history

​ -d 一般后接参数,删除第几条命名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@MR ~]# history
1 history
2 cd
3 pwd
4 ls
5 mv
6 history
[root@MR ~]# history -d 4
[root@MR ~]# history
1 history
2 cd
3 pwd
4 mv
5 history
6 history -d 4
7 history

​ -w 保存文件到当前用户下的/.bash_history 中

1
2
3
4
5
6
7
8
9
10
[root@MR ~]# history -w
[root@MR ~]# cat .bash_history
history
cd
pwd
mv
history
history -d 4
history
history -w

​ !n 再次执行历史命令中的第n条历史命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@MR ~]# history
1 history
2 cd
3 pwd
4 mv
5 history
6 history -d 4
7 history
8 history -w
9 cat bash_history
10 cat .bash_history
11 history
[root@MR ~]# !3
pwd
/root

​ !-n 再次执行历史命令中倒数第n条命令

1
2
3
4
5
6
7
8
[root@MR ~]# history
.......以上省略........
15 stat a
16 cd
17 ls
18 history
[root@MR ~]# !-3
cd

​ !! 执行上一条命令

1
2
3
[root@MR ~]# cd /etc/
[root@MR etc]# !!
cd /etc/

​ !stat 执行历史命令中最近一个以stat开头的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@MR ~]# history
..........以上省略..........
28 stat a
29 cd
30 ls
31 stat a
32 ls
33 cd
34 pwd
35 historiy
36 history
[root@MR ~]# !stat
stat a
文件:"a"
大小:22 块:0 IO 块:4096 目录
设备:fd00h/64768d Inode:694 硬链接:4
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2019-03-17 15:19:50.679860493 +0800
最近更改:2019-03-17 15:19:43.697860882 +0800
最近改动:2019-03-17 15:19:43.697860882 +0800
创建时间:-

​ !$ 引用前一条命令的最后一个参数

1
2
3
4
5
[root@MR ~]# cat /etc/hostname
MR.ZLJ

[root@MR ~]# vim !$
vim /etc/hostname

​ esc . 引用前一条命令的最后一个参数

1
2
3
4
[root@MR ~]# cat /etc/hostname
MR.ZLJ

[root@MR ~]# vim /etc/hostname #此处按一下esc键然后在按"."键

bash的命令、路径补全

1
2
3
4
5
6
[root@MR /]# pa
packer parted paste
pam_console_apply partprobe pathchk
pam_tally2 partx
pam_timestamp_check passwd
[root@MR /]# passwd
1
2
3
4
[root@MR /]# cd /etc/sys
sysconfig/ sysctl.d/ system-release
sysctl.conf systemd/ system-release-cpe
[root@MR /]# cd /etc/sysconfig/

bash命令别名

1
2
3
4
5
6
7
8
9
10
alias   快捷命令操作
[root@MR ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@MR ~]# alias passwd='cat /etc/passwd'
[root@MR ~]# passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#(如果你先重启电脑还能使用的话,请往下看)
[root@MR ~]# ls -a
[root@MR ~]# vim .bashrc
(按字母“i”进入编辑模式)
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias network='cd /etc/sysconfig/network-scripts'
alias passwd='cat /etc/passwd' #(将此行命令添加进去)
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc #(如果你想任何用户都可以使用得话,请添加之此文本文件/etc/bashrc)
fi
(狂按‘esc键’输入":wq")

bash中的命令替换

1
2
3
4
[root@MR ~]# echo $(pwd)
/root
[root@MR ~]# echo `pwd`
/root

另谨记单引号取出来是本身,反引号和双引号取出来是他们的值

bash命令展开

~:展开为用户的家目录

1
2
3
[root@MR ~]# cd ~
[root@MR ~]# pwd
/root

~USERNAME:展开为指定用户USERNAME的家目录

1
2
[root@MR home]# cd ~zhou
[root@MR zhou]# ls

{}:可承载一个以逗号分隔的列表,并将其展开为多个路径

1
mkdir -p a/{b/{d,f},c}

bash环境变量

PATH 命令搜索路径

which 哪里

1
2
3
[root@MR ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls

HISTSIZE 定义命令历史能存多少条,默认为1000条

1
2
3
4
5
[root@MR ~]# echo $HISTSIZE
1000
[root@MR ~]# HISTSIZE=100
[root@MR ~]# echo $HISTSIZE
100

SHELL 当前系统中使用的shell

常见的SHELL在/etc/shells中

1
2
3
4
5
6
7
[root@MR ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

命令语法

(命令){选项} 【参数】

选项:可以没有,也可以很多个

​ 短格式之间可以合并

​ 长格式之间不能合并

参数:命令的对象,可以没有,也可以有多个

命令类型

  • 内部命令:shell内置
1
2
[root@MR ~]# type pwd
pwd 是 shell 内嵌
  • 外部命令:在某一个路径下面有一个和命令名称相对应的可执行文件
1
2
3
4
[root@MR ~]# type mv
mv 是 `mv -i' 的别名
[root@MR ~]# type passwd
passwd 是 /usr/bin/passwd

ls:列出指定目录的内容

​ -l 长格式显示

1
2
3
4
[root@MR ~]# ls -l
总用量 4
drwxr-xr-x. 2 root root 43 3月 10 00:15 1111111
-rw-------. 1 root root 810 3月 6 16:33 anaconda-ks.cfg

​ -h 做单位转换

​ -a 显示所有文件(包括隐藏文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@MR ~]# ls -alh
总用量 48K
dr-xr-x---. 3 root root 4.0K 3月 23 17:50 .
drwxr-xr-x. 17 root root 4.0K 3月 23 14:47 ..
drwxr-xr-x. 2 root root 43 3月 10 00:15 1111111
-rw-------. 1 root root 810 3月 6 16:33 anaconda-ks.cfg
-rw-------. 1 root root 5.8K 3月 23 17:14 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 224 3月 7 21:59 .bashrc
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 5.4K 3月 23 16:43 .viminfo

​ -d 显示目录自身的属性

1
2
[root@MR ~]# ls -ld
dr-xr-x---. 3 root root 4096 3月 23 17:50 .

​ -t 以时间排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@MR ~]# ls -tl /
总用量 28
drwxrwxrwt. 7 root root 101 3月 26 17:25 tmp
drwxr-xr-x. 76 root root 8192 3月 26 17:04 etc
drwxr-xr-x. 23 root root 720 3月 26 17:03 run
drwxr-xr-x. 20 root root 3180 3月 26 17:03 dev
dr-xr-xr-x. 13 root root 0 3月 26 17:03 sys
drwxr-xr-x. 21 root root 4096 3月 26 17:03 var
dr-xr-xr-x. 418 root root 0 3月 26 17:03 proc
dr-xr-x---. 4 root root 4096 3月 10 00:17 root
drwxr-xr-x. 2 root root 6 3月 8 19:55 home
drwxr-xr-x. 3 root root 18 3月 8 17:59 mnt
dr-xr-xr-x. 3 root root 4096 3月 6 16:48 boot
drwxr-xr-x. 13 root root 4096 3月 6 16:30 usr
lrwxrwxrwx. 1 root root 9 3月 6 16:30 lib64 -> usr/lib64

​ -r 逆序显示

~]# ls -lar
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@MR ~]# ls -lar
总用量 48
-rw-------. 1 root root 5528 3月 23 16:43 .viminfo
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
-rw-r--r--. 1 root root 224 3月 7 21:59 .bashrc
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-------. 1 root root 5844 3月 23 17:14 .bash_history
-rw-------. 1 root root 810 3月 6 16:33 anaconda-ks.cfg
drwxr-xr-x. 2 root root 43 3月 10 00:15 1111111
drwxr-xr-x. 17 root root 4096 3月 23 14:47 ..
dr-xr-x---. 3 root root 4096 3月 23 17:50 .

cd:切换目录

pwd:打印当前所在目录

1
2
3
4
5
[root@MR home]# pwd
/home
[root@MR home]# cd /etc
[root@MR etc]# pwd
/etc

mkdir:创建目录

-p:创建目录时若父目录不存在则自动创建

-v:显示创建目录的过程

1
2
3
4
5
6
[root@MR ~]# mkdir -vp a/{b/{d,e},c}
mkdir: 已创建目录 "a"
mkdir: 已创建目录 "a/b"
mkdir: 已创建目录 "a/b/d"
mkdir: 已创建目录 "a/b/e"
mkdir: 已创建目录 "a/c"

touch:创建空文件(更新文件时间)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
再次创建文件就是更新时间戳
[root@MR ~]# ls -l
总用量 4
-rw-r--r--. 1 root root 0 3月 23 18:05 1
drwxr-xr-x. 2 root root 43 3月 10 00:15 1111111
drwxr-xr-x. 4 root root 22 3月 23 17:58 a
-rw-------. 1 root root 810 3月 6 16:33 anaconda-ks.cfg
[root@MR ~]# touch 1
[root@MR ~]# ls -l
总用量 4
-rw-r--r--. 1 root root 0 3月 23 18:06 1
drwxr-xr-x. 2 root root 43 3月 10 00:15 1111111
drwxr-xr-x. 4 root root 22 3月 23 17:58 a
-rw-------. 1 root root 810 3月 6 16:33 anaconda-ks.cfg

stat:显示文件或文件系统的状态

1
2
3
4
5
6
7
8
9
10
[root@MR ~]# stat 1
文件:"1"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:68184559 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2019-03-23 18:06:15.458598473 +0800
最近更改:2019-03-23 18:06:15.458598473 +0800
最近改动:2019-03-23 18:06:15.458598473 +0800
创建时间:-

rm:删除文件

-r:递归删除,删除目录时必须使用此选项

-f:强制删除,不询问

1
2
3
4
5
6
7
8
9
[root@MR ~]# ls -l
总用量 4
-rw-r--r--. 1 root root 0 3月 23 18:06 1
drwxr-xr-x. 2 root root 43 3月 10 00:15 1111111
drwxr-xr-x. 4 root root 22 3月 23 17:58 a
-rw-------. 1 root root 810 3月 6 16:33 anaconda-ks.cfg
[root@MR ~]# rm -rf a
[root@MR ~]# ls
1 1111111 anaconda-ks.cfg

cp:复制文件

一个文件到一个文件,多个文件到一个目录

-a:归档复制,常用于备份

-r:递归拷贝,拷贝目录时必须使用此选项

-p:拷贝时保留原权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@MR ~]# ls
1 2 3 A anaconda-ks.cfg b
[root@MR ~]# cp 1 2 3 A
[root@MR ~]# cd A
[root@MR A]# ls
1 2 3

[root@MR ~]# ls -l
总用量 4
drwxr-xr-x. 2 root root 6 3月 23 18:12 A
-rw-------. 1 root root 810 3月 6 16:33 anaconda-ks.cfg
[root@MR ~]# cp -arp A b
[root@MR ~]# ls -l
总用量 4
drwxr-xr-x. 2 root root 6 3月 23 18:12 A
-rw-------. 1 root root 810 3月 6 16:33 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 3月 23 18:12 b

mv:移动文件(重命名)

1
2
3
4
5
6
7
8
[root@MR ~]# ls
1 2 3 A anaconda-ks.cfg b
[root@MR ~]# mv A B
[root@MR ~]# ls
1 2 3 anaconda-ks.cfg b B
[root@MR ~]# mv b B
[root@MR ~]# ls B
1 2 3 b

cat:顺序查看文本内容

拼接文件内容并输出至标准输出(屏幕)

-n:显示行号

1
2
3
4
5
6
7
8
9
[root@MR ~]# cat -n anaconda-ks.cfg
1 #version=RHEL7
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4
5 # Use CDROM installation media
6 cdrom
7 # Run the Setup Agent on first boot
............以下省略.............

tac:逆序查看文件内容

连接文件并倒序打印内容至标准输出

1
2
3
4
5
6
7
8
9
[root@MR ~]# tac anaconda-ks.cfg

%end

@core
%packages

clearpart --none --initlabel
# Partition clearing information

more:全屏查看文本文件内容

只能从前往后看,百分比查看,看完自动退出

1
2
3
4
5
6
7
8
9
10
[root@MR ~]# more anaconda-ks.cfg
#version=RHEL7
# System authorization information
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot

--More--(34%)

less:全屏查看文本文件内容

可从前往后看亦可从后往前看,看完不会自动退出

(往上是b,往下是空格,退出是q)

head:从前往后查看一定行数

默认下显示前十行,我们也可以输入-n 【输入一个数字】来查看你想要看到的前多少行

1
2
3
4
5
6
7
[root@MR ~]# head CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
......................以下省略7条........................
[root@MR ~]# head -n 1 CentOS-Base.repo
# CentOS-Base.repo

tail:从后往前查看一定行数

默认下只显示后十行,我们也可以输入-n 【输入一个数字】来查看你想要看到的后多少行

1
2
3
4
5
6
7
[root@MR ~]# tail CentOS-Base.repo
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
......................以下省略7条........................
[root@MR ~]# tail -n 1 CentOS-Base.repo
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6

-f:实时查看文件的更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@MR ~]# cat 1
123
456
789
[root@MR ~]# tail -f 1
123
456
789
#此时我们另开一个终端
[root@MR ~]# vim 1
#把789改为444
此时另外一个终端就会变
[root@MR ~]# tail -f 1
123
456
444

wc:用于统计文本文件的行数、字数、字节数

用于统计指定文本的行数、字数、字节数

-l 只显示行数

-w 只显示单词数

-c 只显示字节数

1
2
3
4
5
6
7
8
9
10
#例如我现在来统计刚才这个1文本
[root@MR ~]# wc -l 1
1 1
#1这个文本只有一行
[root@MR ~]# wc -w 1
4 1
#1这个文本只有4个单词
[root@MR ~]# wc -c 1
9 1
#1这个文本只有9个字节

du:查看文件或目录占用的磁盘空间大小

-s:显示总的占用空间大小

-h:单位转换,以更友好的方式显示大小

一般两者组合使用 du -sh

1
2
[root@MR ~]# du -sh anaconda-ks.cfg
4.0K anaconda-ks.cfg

df:报告文件系统磁盘空间使用情况

-h:单位转换,以更友好的方式显示大小

1
2
3
4
5
6
7
8
9
[root@MR ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 18G 937M 17G 6% /
devtmpfs 908M 0 908M 0% /dev
tmpfs 914M 0 914M 0% /dev/shm
tmpfs 914M 8.6M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /mnt/cdrom
/dev/sda1 497M 96M 401M 20% /boot

hostname:查看或临时修改主机名,重开终端有效,重启失效

1
2
3
4
5
6
[root@MR ~]# hostname 123
[root@MR ~]# bash
[root@123 ~]# reboot
#重启之后
[root@MR ~]# hostname
MR.ZLJ

hostnamectl:查看或永久修改主机名,重开终端有效,重启依然有效

可在/etc/hostname中配置

1
[root@MR ~]# vim /etc/hostname

clear:清屏

输入到屏幕后,屏幕会被清空

1
[root@MR ~]# clear

whoami:显示当前登录用户

1
2
[root@MR ~]# whoami
root

w:显示当前在线用户并显示其正在运行的命令

1
2
3
4
[root@MR ~]# w
20:57:35 up 4 min, 1 user, load average: 0.02, 0.10, 0.05
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 20:53 7.00s 0.02s 0.01s w

who:查看当前在线用户

1
2
[root@MR ~]# who
root pts/0 2019-03-23 20:53 (192.168.83.1)

which:显示指定命令的绝对路径

1
2
[root@MR ~]# which pwd
/usr/bin/pwd

cal:显示日历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@zhoulijie ~]# cal
March 2019
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
# 在cal 后面更上年份,就显示那一年
[root@zhoulijie ~]# cal 2018
2018

January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1 2 3
7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10
14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17
21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24
28 29 30 31 25 26 27 28 25 26 27 28 29 30 31
....................以下省略.................................

ldd:查看指定程序有哪些依赖库文件

1
2
3
4
[root@MR ~]# ldd /usr/bin/pwd
linux-vdso.so.1 => (0x00007fff58dfe000)
libc.so.6 => /lib64/libc.so.6 (0x00007f093cc15000)
/lib64/ld-linux-x86-64.so.2 (0x00007f093cfdc000)

date:显示示或设置日期与时间

-s:以字符串方式设置时间

1
2
3
4
[root@MR ~]# date
2019年 03月 23日 星期六 20:59:54 CST
[root@MR ~]# date -s "2019-03-23 21:00:00"
2019年 03月 23日 星期六 21:00:00 CST

格式化输出时间:

+%Y:年 %m:月 %d:日 %H:时 %M:分 %S:秒

1
2
3
4
5
6
7
8
9
[root@MR ~]# mkdir $(date '+%Y-%m-%d'-测试)
[root@MR ~]# ls
index.html.1 111_file anaconda-ks.cfg
2019-03-23-测试
[root@MR ~]# mkdir `date '+%Y-%m-%d-%H:%M:%S'-测试`
[root@MR ~]# ls
2019-03-23-测试
111_file 2019-03-09-测试 index.html.1
2019-03-23-11:56:35-测试 anaconda-ks.cfg

获取帮助

内部命令:help 【命令】

外部命令:【命令】–help

man手册:man【命令】

通配符

*:匹配任意长度的任意字符

1
2
3
4
5
[root@zhoulijie opt]# ls
123456789 185dcdvdv 1cshcd acvbfv bgfdbdsgv
[root@zhoulijie opt]# rm -rf 1*
[root@zhoulijie opt]# ls
acvbfv bgfdbdsgv

?:是匹配任意单个字符

1
2
3
4
[root@zhoulijie opt]# ls
acvbfv al bgfdbdsgv
[root@zhoulijie opt]# ls a?
al

[]:是匹配指定范围内的单个字符

1
2
3
4
5
6
7
8
[root@zhoulijie wen]# ls
1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m
[root@zhoulijie wen]# ls [1-9]
1 2 3 4 5 6 7 8 9
[root@zhoulijie wen]# ls [1,a]
1 a
[root@zhoulijie wen]# ls [a-h]
a b c d e f g h

[^]:是匹配指定范围之外的任意单个字符

1
2
3
4
[root@zhoulijie wen]# ls [^a-m]
1 2 3 4 5 6 7 8 9
[root@zhoulijie wen]# ls [^1-9]
a b c d e f g h i j k l m

常见的归档与压缩文档格式

  • .gz
  • .bz2
  • .xz
  • .zip
  • .z

归档工具–tar

常见的选项:

  • -c:创建归档文件
  • -f file.tar:指定要操作的归档文件
  • -x:还原归档文件
  • -v:显示归档过程
  • -p:归档时保留权限信息。只有管理员才有此权限用此选项
  • -C:指定还原归档或解压时的目录
  • -tf:不展开归档,直接查看归档了哪些文件

常用的组合项:

  • -zcf abc.tar.gz:归档并调用gzip进行压缩
1
2
3
4
5
[root@MR ~]# ls
1 2 3 anaconda-ks.cfg B
[root@MR ~]# tar -zcf abc.tar.gz 1 2 3
[root@MR ~]# ls
1 2 3 abc.tar.gz anaconda-ks.cfg B
  • -jcf abc.tar.bz2:归档并调用bzip2进行压缩
1
2
3
[root@MR ~]# tar -jcf abc.tar.bz2 1 2 3
[root@MR ~]# ls
1 2 3 abc.tar.bz2 abc.tar.gz anaconda-ks.cfg B
  • -Jcf abc.tar.xz:归档并调用xz进行压缩
1
2
3
[root@MR ~]# tar -Jcf abc.tar.xz 1 2 3
[root@MR ~]# ls
1 2 3 abc.tar.bz2 abc.tar.gz abc.tar.xz anaconda-ks.cfg B
  • -xf abc.tar.gz:解压
  • -C 是指定解压后的文件放哪里
1
2
3
4
[root@MR ~]# mkdir q
[root@MR ~]# tar -xf abc.tar.bz2 -C q
[root@MR ~]# ls q
1 2 3

文本排序命令sort

  • -n 以数值大小进行排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@MR ~]# vim 123
12
3
10
4
7
1
[root@MR ~]# sort -n 123
1
3
4
7
10
12
  • -u:去重,排序后相同的行只显示一次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@zhoulijie tmp]# cat 1
1
3
5
7
9
1
7
9
3
[root@zhoulijie tmp]# sort -u 1
1
3
5
7
9

文本去重命令uniq

此命令要结合前面的一个命令sort -n 排序后才能使用

​ -c:显示文件中行重复的次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@zhoulijie tmp]# cat 1
1
3
5
7
9
1
7
9
3
[root@zhoulijie tmp]# sort -n 1 | uniq -c
2 1
2 3
1 5
2 7
2 9

​ -d:只显示重复的行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@zhoulijie tmp]# cat 1
1
3
5
7
9
1
7
9
3
[root@zhoulijie tmp]# sort -n 1 | uniq -d
1
3
7
9

​ -u:只显示未重复的行

1
2
3
4
5
6
7
8
9
10
11
12
[root@zhoulijie tmp]# cat 1
1
3
5
7
9
1
7
9
3
[root@zhoulijie tmp]# sort -n 1 | uniq -u
5

cut 提取

-d:指定字段为分隔符,默认是空格

-f:指定要显示的字段,可以是“,”,也可以是“—”

​ -f 1,5 显示一和五行

​ -f1-5 显示一到五行

1
2
3
4
5
6
7
8
9
10
11
12
[root@MR ~]# cut -d: -f 1,5 /etc/passwd
root:root
bin:bin
daemon:daemon
adm:adm
lp:lp
sync:sync
shutdown:shutdown
halt:halt
mail:mail
operator:operator
.........以下省略。。。。。。。。。。

awk 高级提取

-F:指定字段为分隔符,默认是空格

NR== :后接数字,代表第几行

$ :后接数字,代表第几列,多列之间用“,”隔开

在ifconfig中查找IP地址

1
2
[root@MR ~]# ifconfig | awk -F' ' 'NR==2 {print $2}'
172.17.206.240
1
2
[root@MR ~]#  ip a | awk 'NR==9 { print $2 }'| awk -F/ '{print $1}'
192.168.83.130

sed 高级替换

替换格式为:sed -i ‘s/需要替换的字符/替换的字符/y’ 后接文件

1
2
3
4
5
6
7
8
9
10
11
12
[root@MR ~]# cat abc
hello nihao
hello 123
hello 456
hello nihao

[root@MR ~]# sed -i 's/nihao/hi/g' abc
[root@MR ~]# cat abc
hello hi
hello 123
hello 456
hello hi

文件命名规范

  • 长度不能超过255字符
  • 不能使用/当文件名
  • 严格区分大小写

文本过滤grep

grep命令广泛用于在文本中执行关键词搜索,并且显示匹配结果

1
2
3
4
[root@zhoulijie tmp]# grep /bin/bash  /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhang:x:998:997::/home/zhang:/bin/bash
zhou:x:1000:1000::/home/zhou:/bin/bash

此命令广泛用于与管道符相结合使用

1
2
[root@zhoulijie tmp]# cat anaconda-ks.cfg | grep password
# Root password

文件查找命令find

用于按照指定条件来查找文件

  • -name 匹配名称
1
2
3
4
5
6
7
[root@zhoulijie tmp]# find / -name fstab
/etc/fstab
[root@zhoulijie tmp]# find / -name sda
/dev/sda
/sys/devices/pci0000:00/0000:00:10.0/host7/target7:0:0/7:0:0:0/block/sda
/sys/block/sda
/sys/class/block/sda
  • -user 匹配所有者
1
2
3
4
5
6
7
8
9
10
[root@zhoulijie tmp]# find / -user zhou
find: ‘/proc/3238/task/3238/fd/6’: 没有那个文件或目录
find: ‘/proc/3238/task/3238/fdinfo/6’: 没有那个文件或目录
find: ‘/proc/3238/fd/6’: 没有那个文件或目录
find: ‘/proc/3238/fdinfo/6’: 没有那个文件或目录
/var/spool/mail/zhou
/home/zhou
/home/zhou/.bash_logout
/home/zhou/.bash_profile
/home/zhou/.bashrc
  • xargs 通过管道符将查找到的内容给xargs处理,后接命令
1
2
3
4
[root@zhoulijie tmp]# ls a
[root@zhoulijie tmp]# find / -name fstab | xargs cp -t a
[root@zhoulijie tmp]# ls a
fstab

文件的层级系统

FHS:文件层级系统

  • /:根分区
  • /boot:开机所需文件——内核、开机菜单以及所需要配置文件等
  • /dev:以文件形式存放任何设备与接口
  • /etc:配置文件
  • /home:普通用户的家目录
  • /root:系统管理员的家目录
  • /bin:存放单用户模式下还可以操作的命令
  • /lib:开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数
  • /sbin:开机过程中需要的命令
  • /media:挂载点目录,通常用来挂载移动硬盘
  • /mnt:挂载点目录,通常用来挂载额外的临时文件系统
  • /opt:放置第三方的软件
  • /sys:伪文件系统,跟硬盘设备文键相关的属性映射文件,不能单独分区
  • /srv:一些网络服务的数据文件目录
  • /tmp:任何人均可以使用的“共享”临时目录
  • /proc:虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
  • /usr:全局共享只读文件。提供操作系统核心功能,可以单独分区
  • /usr/local:用户自行安装的软件
  • /usr/sbin:Linux系统开机时不会使用到的软件/命令/脚本
  • /usr/share:帮助与说明文档,也可放置共享文件
  • /var:主要存放经常变化的文件,如日志
  • /lost+found:当文件系统发生错误时,将一些丢失的文件片段存放在这里

/etc、/bin、/sbin、/lib等目录内时系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上

/usr/bin、/usr/sbin、/usr/lib提供操作系统核心功能,/usr可以单独分区

/usr/local/bin、/usr/local/sbin、/usr/local/lib、/usr/local/etc、/usr/local/man等等在/usr/local目录下的内容都是第三方软件,建议单独分区

重定向

【覆盖输出】:>

1
2
3
4
5
6
[root@zhoulijie tmp]# ls
[root@zhoulijie tmp]# echo "1234" > 123
[root@zhoulijie tmp]# ls
123
[root@zhoulijie tmp]# cat 123
1234

【追加输出】:>>

1
2
3
4
5
6
[root@zhoulijie tmp]# cat 123
1234
[root@zhoulijie tmp]# echo "5678" >> 123
[root@zhoulijie tmp]# cat 123
1234
5678

【错误覆盖输出】:2>

1
2
3
4
5
6
7
[root@zhoulijie tmp]# ls
123
[root@zhoulijie tmp]# ls abc
ls: 无法访问abc: 没有那个文件或目录
[root@zhoulijie tmp]# ls abc 2> 123
[root@zhoulijie tmp]# cat 123
ls: 无法访问abc: 没有那个文件或目录

【标准覆盖输出和错误覆盖输出到同一文件里面】:&>

1
2
3
4
5
6
[root@zhoulijie tmp]# ls
123
[root@zhoulijie tmp]# ls -l 123 abc &> qqq
[root@zhoulijie tmp]# cat qqq
ls: 无法访问abc: 没有那个文件或目录
-rw-r--r--. 1 root root 10 3月 25 18:38 123

【输入重定向】:<

此输入重定向适用于mysql语句中恢复sql

1
[root@zhoulijie tmp]# mysql < 1.sql

管道符

命令A |命令B

意思就是前一个命令的结果交给后一个命令去处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@zhoulijie tmp]# cat anaconda-ks.cfg | grep password
# Root password
[root@zhoulijie tmp]# touch a | ls -l | tee a
总用量 12
-rw-r--r--. 1 root root 10 3月 25 18:38 123
-rw-r--r--. 1 root root 0 3月 25 18:59 a
-rw-------. 1 root root 810 3月 25 18:55 anaconda-ks.cfg
-rw-r--r--. 1 root root 95 3月 25 18:39 qqq
[root@zhoulijie tmp]# cat a
总用量 12
-rw-r--r--. 1 root root 10 3月 25 18:38 123
-rw-r--r--. 1 root root 0 3月 25 18:59 a
-rw-------. 1 root root 810 3月 25 18:55 anaconda-ks.cfg
-rw-r--r--. 1 root root 95 3月 25 18:39 qqq

linux下的编辑器

linux中常见的文本编辑器有:

  • emacs
  • pico
  • nano
  • joe
  • jed
  • vi/vim

vi/vim编辑器

vi/vim编辑器是linux和unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi/vim是效率很高的文本编辑器。尽管在linux上也有很多图形界面的编辑器可用,但vi/vim在系统和服务器管理中的功能是那些图形编辑器所无法比拟的

vi/vim编辑器可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的.

vim是vi的增强版,比vi更容易使用。vi的命令几乎都可以在vim上使用。

特点

  • vi/vim是一种纯文本编辑器,它不像word可以排版,可以调整字体大小,可以改变字体等等
  • vi/vim只是一个文本编辑工具,只能对文本的内容进行操作,比如新增内容、修改内容、删除内容等等
  • 全屏幕显示

vi/vim的三种编辑模式

  • 末行模式
  • 命令模式
  • 输入模式

三者的作用:

  • 末行模式:用于查找文本、保存修改等等
  • 命令模式:用户执行,比如复制、粘贴行等等
  • 输入模式:用于输入文本、修改文本等等

vi/vim三者之间的切换方式

  • 命令模式到输入模式

按”i”跳转到当前光标所在行的行首

按”a”调转到当前光标所在行的行位

按”o”在当前光标所在行的下方再新建一行并跳转到那一行

  • 输入模式到命令模式

按”Esc”键

  • 命令模式到末行模式

按ctrl“+”:”键

  • 末行模式到命令模式

狂按”Esc”键

关闭文件方式

在末行文件下关闭文件:

  • q 退出
  • w 保存
  • wq 保存并退出
  • q! 强制退出

在命令模式下关闭文件

  • zz

常用操作

  • K :向上移动
  • J :向下移动
  • H:向左移动
  • L:向右移动
  • 10 gg 跳转到10行(输入数字几,再按gg就代表跳多少行
  • dd :删除当前光标所在行一整行
  • 1,3d :表示删除第一行到第三行
  • 复制命令:yy
  • 粘贴命令:p
  • 替换:r

r#:将当前光标的字符替换成为#,这里的#可以是任意字符

  • 撤销:u

ctrl+r:还原最近一次撤销操作

  • 重复前一次编辑操作:.
  • 文本查找:/字符 或者 ?字符

/ 字符:从上往下查找这个字符并高亮显示

?字符:从下往上查找这个字符并高亮显示

  • 查找并替换:s///g

此命令只能在末行模式下使用

1
2
3
4
5
6
7
8
9
1234
5678
1234
5678
1234
5678
~
~
:1,4 s/1234/abcd/g
1
2
3
4
5
6
7
8
9
abcd
5678
abcd
5678
1234
5678
~
~
:1,4 s/1234/abcd/g 3,1 全部
  • 末行模式下显示或取消显示行号

set nu 显示行号

set nonu 取消显示行号

打赏
  • © 2019-2020 Li Jie
  • Powered by Hexo Theme Ayer
    • PV:
    • UV:

喜欢就打赏吧~

支付宝
微信