一、Linux系统配置

1.修改主机名 [/etc/hostname]

vi /etc/hostname

在其中将旧名字修改为新主机名,保存,重启生效。

2.本地DNS映射 [/etc/hosts]

vi /etc/hosts

添加ip-name对:

192.168.1.121 centos-clone1

保存即可。

3.查看命令信息 [type][file]

type ifconfig

得到信息:

ifconfig is /usr/sbin/ifconfig

说明ifconfig位于/usr/sbin目录下。

继续查看该命令的类型:

file /usr/sbin/ifconfig

得到以下内容:

/usr/sbin/ifconfig: ELF -bit LSB shared object, x86-, version  (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6., BuildID[sha1]=22d5b3be8d3ce3c71cad5b982581ede262397b56, stripped

注意ELF,表示这是一个二进制文件的编码格式,说明是一个可执行的二进制文件。

我们再看看yum的类型:

file /usr/bin/yum
/usr/bin/yum: Python script, ASCII text executable

说明yum是一个python脚本。

再看看cd的类型:

type cd
cd is a shell builtin

cd是一个shell的内建程序。

4.环境变量PATH

打印环境变量:

echo $PATH

在PATH环境变量中,我们需要将软件的可执行程序目录(一般是bin)添加进去。例如:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

这是系统默认添加在PATH环境变量中的目录,假设我们安装了JDK,则需要将JDK下的bin目录也添加进去,这样我们就可以直接使用java、javac等命令。

5.补全mini系统中的帮助工具man

在Mini版的系统中,可能确实man工具或man不完整,通过yum安装完整版的man:

yum install man man-pages -y

6.命令的学习帮助 [help][man]

命令分为内部命令和外部命令

内部命令就是shell的内建命令,例如cd、type等。内部命令通过help来学习:

help cd

外部命令就是我们安装的命令,例如ifconfig等。外部命令通过man来学习:

man ifconfig

二、Linux基本操作

1.查看磁盘信息 [df]

[root@centos-clone1 etc]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs % /dev
tmpfs % /dev/shm
tmpfs % /run
tmpfs % /sys/fs/cgroup
/dev/mapper/centos-root % /
/dev/sda1 % /boot
tmpfs % /run/user/

转换为人类可读:

[root@centos-clone1 etc]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs .9G .9G % /dev
tmpfs .9G .9G % /dev/shm
tmpfs .9G 12M .9G % /run
tmpfs .9G .9G % /sys/fs/cgroup
/dev/mapper/centos-root 18G .5G 17G % /
/dev/sda1 497M 165M 333M % /boot
tmpfs 378M 378M % /run/user/

在这里我们可以看到,磁盘使用了LVM,根目录存在于卷组centos(VG)上得逻辑卷root(LV)上,大小为18G。

但是根下面的boot目录是独立存放在sda1物理卷上的。

2.文件系统目录

/bin  #一般存放系统命令
/sbin #一般存放系统命令
/boot #引导文件
/dev #I/O设备抽象成文件
/etc #配置
/home #非root用户家目录
/root #root用户家目录
/lib #库文件
/lib64 #库文件
/mnt #挂载点
/usr #软件的受管控安装目录
/var #软件的生成文件
/opt #非受系统管控软件,约定俗成的安装位置

3.统计各个文件夹大小 [df]

du -s ./   #统计当前目录大小
du -s ./* #统计子目录各自大小

-s 表示sum即求和。如果使用./则是统计该目录的总大小,如果使用./*则是对该目录下所有子文件夹各自进行统计。

du -sh

使用 -h 表示human,以人类可读的方式显示大小:

[root@centos-clone1 usr]# du -sh ./
.1G ./
[root@centos-clone1 usr]# du -sh ./*
58M ./bin
0 ./etc
0 ./games
36K ./include
656M ./lib
116M ./lib64
12M ./libexec
8.0K ./local
43M ./sbin
231M ./share
0 ./src
0 ./tmp

注:使用该命令可以检查哪个文件夹占用空间最大,找到磁盘耗尽的祸源。

4.文件权限

[root@centos-clone1 boot]# ls -l
total
-rw-r--r-- root root Sep : config-3.10.-1062.1..el7.x86_64
-rw-r--r--. root root Nov config-3.10.-.el7.x86_64
drwxr-xr-x root root Oct : efi
drwxr-xr-x. root root Oct : grub
drwx------. root root Oct : grub2
-rw-r--r--. root root Oct : initramfs--rescue-62ae9a150bf641ba955e242814e7d88a.img
-rw------- root root Oct : initramfs-3.10.-1062.1..el7.x86_64.img

使用ls -l查看详细文件列表后,我们可以看到一下内容(从前往后):

文件类型:第一位表示文件类型,d表示文件夹,-表示文件,l表示软连接,b表示字节流设备文件,c表示字符流设备文件等等。

文件权限:后面的9位每3位为一组,分别表示该用户、用户组、其他用户对该文件的读、写、执行权限。

Selinux和ACL标志:在权限的后面有一个"."或者"+",这两个符号用来表示有没有Selinux和ACL上下文,与安全有关。

硬链接数:权限部分后面的数字,表示该文件有多少个硬链接。如果是目录,则表示目录中包含的所有文件的硬链接总和。

文件所属:中间的root root表示文件所属用户,以及用户组。

文件大小:如果是文件,则直接显示文件大小,如果是文件夹,则需要通过du来统计大小。

修改时间:文件最后修改时间。

文件名称:文件或文件夹名称。

5.创建目录 [mkdir]

普通创建:

mkdir ./abc

递归创建:

mkdir -p ./a/b/c

横向创建:

mkdir {x,y,z}dir
[root@centos-clone1 ~]# ls
abc anaconda-ks.cfg xdir ydir zdir

6.删除 [rm]

删除单文件和空文件夹:

rm -f filename

-f 指force即强制删除,无需用户确认。

删除多层文件夹:

rm -rf dir

-r 指递归的删除。

不要删除根目录:

rm -rf /

这样回导致所有根目录下的文件及文件夹被删除,导致系统崩溃,删除后只剩下最初的引导程序grub。

7.拷贝 [cp]

拷贝一个文件:

cp filename /dstdir/newname

拷贝一个文件夹:

cp -r dirname newdirname

8.硬链接和软连接 [ln]

硬链接:

ln filename othername

filename指被硬链接的文件,othername表示创建的硬链接的名字。

文件被硬链接时,所有的名字都指向同一个文件,类似于java中的引用。

当删除一个硬链接时,如果还存在该文件的其他硬链接,该文件本身不会被删除,但是硬链接数量减一。

软链接:

ln -s filename othername

-s 表示软链接 soft link。

软链接实际上就类似于windows中的快捷方式。

windows下当我们删除原文件时,快捷方式是不被删除的,但是运行该快捷方式会表示找不到原文件。在Linux下同理,我们删除原文件后,该软链接会显红提示原文件找不到。

当我们删除软链接时,仅仅删除的是快捷方式,是不影响原文件的。

9.元数据 [stat]

查看一个文件的元数据(属性):

[root@centos-clone1 ~]# stat anaconda-ks.cfg 
File: anaconda-ks.cfg
Size: Blocks: IO Block: regular file
Device: fd00h/64768d Inode: Links:
Access: (/-rw-------) Uid: ( / root) Gid: ( / root)
Access: -- ::21.958249864 +
Modify: -- ::21.959249872 +
Change: -- ::21.959249872 +
Birth: -

注意看其中有3个时间,Access、Modify和Change。

Access:表示最近一次访问该文件的时间。

Modify:表示最近一次修改该文件内容的时间。

Change:表示文件元数据最近一次变化的时间。(纯粹的访问该文件不会引起该时间变化,Access时间变化不影响。但是编辑文件则会导致该时间变化,估计是因为Modify时间变化了。)

10.管道 [|]

利用管道可以衔接2个命令,将第一命令的输出做为第二个命令的输入。

head - filename | tail -

先用head读取file中的前4行,再将这4行交给tail,获取最后一行。相当于获取了file中的第4行。

echo "/" | ls -l   # 错误

上面这个命令不能得到根目录的文件列表。因为路径"/"对于ls -l来说是参数,而不是输入。可以改为如下:

echo "/" | xargs ls -l

这个命令相当于把"/"这个输出交给xargs命令,而xargs命令会将得到的输入"/"作为ls -l的参数,并运行ls命令。

11.过滤 [grep]

从文件中过滤出含有word的行:

grep word filename

用-v过滤出不含word的行(反选):

grep -v word filename

三、VI编辑器

1.打开文件

打开文件,光标定位到第5行:

vi + filename

打开文件,光标定位到最后一行:

vi + filename

或者打开文件后shift + G,光标也是切换到最后一行。

2.保存&退出

保存退出:

:wq
shift ZZ
:x

不保存退出:

:q!

3.vi三种模式

编辑模式:刚打开文件时的模式,即所有的键盘操作都是快捷键,例如i插入,d删除等。

插入模式:按i、a、o等可以进入插入模式,即键盘从编辑模式恢复正常内容输入功能。

末行模式:按ESC再按":",可以进入末行模式,此时可以保存退出,或者使用"/"查找,"set nu"(不是set num)显示行号等。

编辑模式--->插入模式:

- i :在当前光标的前面转为输入模式,也就是输入的内容插入在光标的前面。

- a:在当前光标的后面转为输入模式,在输入内容时,光标自动会先往后面移动一格,然后再插入在光标之前,可以减少肢体运动,特别是想在一行的最后插入内容。

- I:在当前行的行首转换为输入模式。

- A:当前行的行末转换为输入模式。

- o:在当前行的下面新建一行,并转入输入模式。

- O:在当前行的上面新建一行,并转入输入模式。

插入模式--->编辑模式:

ESC

编辑模式--->末行模式:

按 :

末行模式--->编辑模式:

ESC

4.编辑模式下的基本操作

编辑模式下的光标移动:
在编辑模式下,我们无需使用方向键来移动光标,可以使用以下几个键来进行字符级光标移动:

- h:左移
- l:右移
- j:下移
- k:上移

单词间的跳跃:

- w : 移动至下一个单词词首,即逐单词跳跃
- e : 移动至当前单词或下一个单词的词尾
- b :移动至上一个单词的词首

行内的光标移动:

数字0: 移动到当前行行首
^: 移动到行首的非空白字符
$: 移动到绝对行尾

行间光标移动(几个哥哥):

shift + G: 大写G,光标移动到最后一行的行首
gg: 两个小写g,光标移动到最前面一行的行首
数字+gg: 光标移动到数字行的行首,例如12gg,移动到第12行行首

翻页:

ctrl + f : 向后翻页
ctrl + b: 向前翻页

删除&替换单个字符:

- x: 删除光标处的字符
- 3x: 删除光标开始3个字符
- r: 替换光标处的字符

删除行、单词:

- d: 删除命令
- dd: 删除一行
- 2dd: 删除两行
- dw: 删除一个单词
- 2dw: 删除两个单词

复制&粘贴&剪切:

- y : 复制命令
- yy : 复制一行
- 2yy : 复制两行
- yw : 复制一个单词
- 2yw : 复制两个单词 - p : 粘贴在下方
- P : 粘贴在上方

如果是删除配合粘贴,则就是windows中的剪切。在执行dd的时候,删除的内容会放入缓存区,此时可以用p来粘贴。

撤销&重做:

- u : 撤销上次的操作
ctrl+r : 撤销上次的撤销
- . : 重复上次的操作

查找内容:

两种方式:

末行模式:
:/word
编辑模式:
/word
- n : 下一个目标
- N : 上一个目标

5.末行模式下的基本操作

显示行号:

:set nu

取消显示行号:

:set nonu

末行模式查找单词word,光标会定位到第一个word所在行的行首:

:/word

另一种方式则是在编辑模式下,直接使用"/word"来查找,这种方式光标会停在第一个word单词的w上。

范围操作:

删除指定范围的行(1,$-1):

:,$-1d

意思是从第1行删除到倒数第2行,$表示最后一行,$-1则是倒数第二行,d表示删除命令。

删除全部行:

:,$d

1,$表示全文,也可以使用%代替1,$

:%d

用"."代表当前行:

:,.y  #意思是复制从第一行到当前行。
:.,.+3d  #从当前行开始删除,一共删除4行

替换内容:

:,$s/word1/word2/

从第一行到最后一行(即全部行),使用s命令将word1全部替换为word2。之间的"/"是分隔符,如果word1和word2中出现了"/",则不能再使用"/"作为分隔符,我们可以使用其他特殊字符,例如"#"。

:,$s#word1#word/#

注意:以上命令在替换时,如果一行中有2个word1时,只会替换第一个word1。如果想要全部替换,则在最后加上g,表示global。

:,$s#word1#word/#g

四、正则

通配符:

ls -l | grep a*
ls -l | grep a??

"*"和"?"都为通配符,"*"代表0-n个任意字符,"?"表示1个任意字符。

正则里的匹配操作符:

\ : 转义字符
. : 匹配任意单个字符,类似通配符中的?
[125ak] : 匹配方括号中任意一个字符
[^] : 匹配不是1、2的任意一个字符
[a-k] : 匹配属于a-k范围任意一个字符
^ : 行首
$ : 行尾
\< : 单词开头,例如\<abc,以abc开头的单词
\> : 单词结尾,xyz\>,以xyz结尾的单词

正则中的重复操作符:

? : 匹配0到1次
* : 匹配0到n次
+ : 匹配1到多次
{n} : 匹配n次
{n,} : 匹配n到多次
{n,m} : 匹配n到m次

选择:

grep "\(oo\)\(xx\).*\2\1" filename

将oo和xx分组,".*"表示匹配任意个任意字符,然后最后oo、xx换位置,匹配到"ooxx128376xxoo"。

五、切割

cut命令:

# 以空格分隔,显示第一列
cut -d' ' -f1 content.txt
# 以空格分隔,显示第二列,发现没有第二列的行又出现了。
cut -d' ' -f2 content.txt
# -s 处理脏数据,即不含分隔符的行,只作为第一列。
cut -s -d' ' -f2 content.txt
# 显示第1和第3列
cut -s -d' ' -f1, content.txt
# 显示1-3列
cut -s -d' ' -f1- content.txt

六、排序

sort命令:

# 以空格为分隔符,按第2列排序,字典序
sort -t' ' -k2 sort.txt
# -n表示数字序
sort -t' ' -k2 -n sort.txt
# -r表示倒序
sort -t' ' -k2 -n -r sort.txt

七、统计

wc命令(word count):

# 统计行数
wc -l sort.txt
# 统计byte数
wc -c sort.txt
# 统计char数
wc -m sort.txt
# 统计单词数
wc -w sort.txt
# 统计最长行的长度
wc -L sort.txt

组合使用:

# 统计一个/etc文件夹有多少文件和目录
ls -l /etc | wc -l
# 只获取文件的行数(只获取数字)
cat sort.txt | wc -l

八、行编辑器 [sed]

# 在第一行后面添加hello world。注意,这里hello前面是反斜杠。
sed "1a\hello world" sort.txt

在以上命令中,添加后的内容实际是没有真正写到文件中的,如果要写到文件中去,则需要使用 -i 。

# 在第一行后面添加hello world,并真正写入文档。
sed -i "1a\hello world" sort.txt
# 删除第2行
sed "2d" sort.txt
# 删除所有有hello的行,注意这里的过滤条件两边是正斜杠。
sed "/hello/d" sort.txt
# 删除含数字的行
sed "/[0-9]/d" sort.txt
# 只打印带数字的行
sed -n "/[0-9]/p" sort.txt
#其中-n表示静默模式,即不再默认显示模式空间中的内容,如果不含-n,则会显示文本全部内容
# p表示print打印
# 相当于代替了grep "[0-9]" sort.txt
# 在最后一行后面插入内容。$表示最后一行,注意这里只能使用单引号。否则$后面的内容会被认为是命令
sed -i '$a\hello world' sort.txt

将inittab中的"id:3:initdefault:"替换为"id:5:initdefault:" (即将开机命令行模式修改为开机图形界面):

sed -i "s/id:[0-6]:initdefault:/id:5:initdefault:/" inittab

也可以加上分组来实现 (id:为第一组,:initdefault:为第二组):

sed -i "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/" inittab

九、文本分析工具 [awk]

awk也是按行来处理的,会将操作分别作用于每一行。

# -F设置分隔符,print表示打印,$1表示第一列。注意{}外面只能用单引号。
awk -F':' '{print $1}' passwd
# 打印第一列和第七列,用逗号隔开
awk -F':' '{print $1,$7}' passwd

在第一行前面和最后面打印标签:

awk -F':' 'BEGIN{print "name\tnumber"} {print $1"\t"$7} END{print "this is end"}'

BEGIN、END是有名函数表示在第一行之前以及最后一行之后执行一次。print打印的字符串要用双引号,\t是制表符。

打印passwd文件中的行数,每行的列数,行的内容:

# 打印行数,每行列数,行的所有内容
[root@centos-clone1 etc]# awk -F':' '{print NR"\t"NF"\t"$0}' passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync

其中NR(number row)表示行号,NF(number field)表示列数,$0表示该行的多有内容。

综合示例:

Tom            --      car
John -- bike
vivi -- car
Tom -- car
John -- bike

使用awk统计1月份每个人发的工资,其中Tom的工资分为12月和1月,我们只需要1月的。John有2份1月的工资,需要加起来。

awk '{split($3,date,"-");if(date[2]==''){name[$1]+=$5}} END{for(i in name){print i"\t"name[i]}}' test.txt

解释:

1.awk 默认分隔符为空格或制表符等空白符,所以这里不用指定-F。

2.使用split将$3 (2013-01-13)也就是日期分隔,使用"-"作为分隔符,将分隔后的数组放入date。

3.date[0]表示分隔前的整个时间 (2013-01-13),date[2]表示月份 (01),当date[2]为01月时,定义一个name hashmap,key为$1即文本的第一列人名,并对工资进行累加。

4.所有累加做完以后,在END中循环name hashmap,打印其中的名字和工资。

示例2:

上述文本中第2列的0表示Manager,1表示worker。我们需要在最后的报表结果中的内一行中将人的角色也打印出来。

awk '{split($3,date,"-");if(date[2]==''){name[$1]+=$5};if($2=="0"){role[$1]="Manager"}else{role[$1]="Worker"}} END{for(i in name){print i"\t"role[i]"\t"name[i]}}' test.txt

1.同name数据结构一样,我们再添加一个叫role的hashmap,用来保存每个人的角色。

2.在最后打印的时候,通过key名称来访问他的角色,并一起打印。

[Linux系统] (1)常用操作(CentOS 7.x)的更多相关文章

  1. Linux 系统巡检常用命令

    Linux系统巡检常用命令   # uname -a # 查看内核/操作系统# cat /etc/centos-release # 查看centos操作系统版本# cat /proc/cpuinfo ...

  2. Linux学习之五-Linux系统终端常用的快捷键

    Linux系统终端常用的快捷键 (使用快捷键能大大提高效率,部分用在远程登录的工具如Xshell下) 剪切板操作(终端不支持,因为终端是纯命令行) Ctrl+insert     复制 Shift+i ...

  3. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  4. linux系统的常用命令

    linux系统中常用的命令如下(以后经常补充): cd ..   返回上一级 cd use  进入use目录

  5. linux系统监控常用工具

    linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h  显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 u ...

  6. Linux的date常用操作

    Linux的date常用操作 ## 在指定的日期上减1天 $ date -d "2012-04-10 -1 day " +%Y-%m-%d 2012-04-09 ## 在指定的日期 ...

  7. Linux运维-常用操作-培训用例

    一.服务器环境 Centos 7.9 二.常用连接工具(免费) 1.Finalshell 2.MobaXterm 3.Putty + WinSCP 三.Linux  系统目录结构 /bin :是 Bi ...

  8. linux系统学习(常用命令)

    今天调休,闲来无事,研究一下linux系统. Linux常用命令: 一:文件管理 ctrl+alt:在虚拟机与windows之间切换ctrl+g:进入linux输入模式 pwd:查看当前目录 ls:列 ...

  9. Linux系统中常用操作命令

    常用指令 ls        显示文件或目录     -l          列出文件详细信息l(list)     -a         列出当前目录下所有文件及目录,包括隐藏的a(all)mkdi ...

随机推荐

  1. C#连接oracle数据库报错:OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用

    原因大概是OracleOraDb11g_home1TNSListener服务没启动的原因 步骤一.停止并重新启动OracleOraDb11g_home1TNSListener服务,试一下是否可行. 如 ...

  2. SpringBoot 使用Mybatis操作mysql示例

    1.准备数据库 创建数据库 create databases baodanjia; 创建帐号 create user 'baodanjia'@'%' identified by '123456' gr ...

  3. 为什么 ConcurrentHashMap 的读操作不需要加锁?

    现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了.最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默.所以忍不住分享一下给大家 ConcurrentH ...

  4. powerdesigner去掉网格线

    powerdesigner去掉网格线 去掉网格线

  5. sklearn-GDBT

    GDBT 可以解决分类和回归问题 回归问题 def __init__(self, loss='ls', learning_rate=0.1, n_estimators=100, subsample=1 ...

  6. 移动端、pc端通用点击复制

    点击复制 function copyArticle(event){ const range = document.createRange(); range.selectNode(document.ge ...

  7. leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1-> ...

  8. 1.bash总体介绍

    1.总体介绍1.1 什么是Bash?Bash(Borune-Again SHell)是一个用于Linux操作系统的shell,即命令解释器Bash与sh兼容,并从ksh和csh引进了一些有用的功能,在 ...

  9. 全面解析java编码问题

    1.web.xml文件里配置 <filter> <filter-name>CharacterEncodingFilter</filter-name> <fil ...

  10. golang 多线程查找文件内容

    package main import ( "fmt" "io/ioutil" "os" "path/filepath" ...