[Linux系统] (1)常用操作(CentOS 7.x)
一、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)的更多相关文章
- Linux 系统巡检常用命令
Linux系统巡检常用命令 # uname -a # 查看内核/操作系统# cat /etc/centos-release # 查看centos操作系统版本# cat /proc/cpuinfo ...
- Linux学习之五-Linux系统终端常用的快捷键
Linux系统终端常用的快捷键 (使用快捷键能大大提高效率,部分用在远程登录的工具如Xshell下) 剪切板操作(终端不支持,因为终端是纯命令行) Ctrl+insert 复制 Shift+i ...
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- linux系统的常用命令
linux系统中常用的命令如下(以后经常补充): cd .. 返回上一级 cd use 进入use目录
- linux系统监控常用工具
linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h 显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 u ...
- Linux的date常用操作
Linux的date常用操作 ## 在指定的日期上减1天 $ date -d "2012-04-10 -1 day " +%Y-%m-%d 2012-04-09 ## 在指定的日期 ...
- Linux运维-常用操作-培训用例
一.服务器环境 Centos 7.9 二.常用连接工具(免费) 1.Finalshell 2.MobaXterm 3.Putty + WinSCP 三.Linux 系统目录结构 /bin :是 Bi ...
- linux系统学习(常用命令)
今天调休,闲来无事,研究一下linux系统. Linux常用命令: 一:文件管理 ctrl+alt:在虚拟机与windows之间切换ctrl+g:进入linux输入模式 pwd:查看当前目录 ls:列 ...
- Linux系统中常用操作命令
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all)mkdi ...
随机推荐
- 【Spring 源码】ApplicationContext源码
ApplicationConetxt体系
- python-bioInfo-codes-2
1. _tkinter.TclError: no display name and no $DISPLAY environment variable 解决方案: import matplotlibma ...
- 下载安装npm和cnpm
下载安装npm http://nodejs.cn/download/ 下载安装cnpm 完成npm的安装后,再安装cnpm https://npm.taobao.org/ 切换源为 taobao 源 ...
- GitHub从小白到熟悉<一>
注册开始
- Zabbix 配置Python邮件告警
1.首先你应该注册一个163邮箱,用于发信,再注册时开启SMTP/POP3功能,使用加密密码认证. 2.在Zabbix主机上新建send.py文件,将以下代码复制编辑,设置发件用户.密码. [root ...
- 导出excel-文件流
后台代码(控制器或者dao层) public void Excel(){ //第一步:(1)以虚拟表的形式获取导出数据 DataTable dt_0 = this.service.Excel(); / ...
- Mysql学习(二)之通过homebrew安装mysql后,为什么在系统偏好设置里没有mysql
原因 用brew install packagename是用来安装命令行工具的,一般不可能影响到图形界面. mysql官方文档是通过dmg文件安装的: The MySQL Installation P ...
- Spring的AOP,Struts2的拦截器(Interceptor),以及springMVC的(interceptor)
参考外链:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/ 1.首先,spring的AOP作用范围很广,可以使用Aspec ...
- Axure(一)
axure1.原型工具 2.软件开发 1.可行性分析2.需求分析 产品经理(和甲方对接需求,) 乙方 -- 甲方 ps(专业性强,精美) 设计师 html(可变 ...
- vue项目-axios封装、easy-mock使用
vue全家桶概括下来就是 项目构建工具(vue-cli) 路由(vue-router) 状态管理(vuex) http请求工具 vue有自己的http请求工具插件vue-resource,但是vue2 ...