Linux命令笔记,基于Centos7,持续更新中...

更新于2019年8月28日

切换用户

su [用户名]
su -	#切换到root,- 可省略,需要密码

退出文件

ZZ		# 保存并退出
:q!		# 强制不保存退出
:wq! 	# 强制保存退出
:q		# 退出
:w		# 保存
:wq		# 保存退出

linux操作系统模式切换

systemctl set-default multi-user.target		# 命令行模式
systemctl set-default graphical.target		# 图形界面模式

Centos 7静态IP设置,网络自启动

1) vim /etc/sysconfig/network-scripts/ifcfg-eth0  	#文件名可能不一样,差不多就是ifcfg-*的样子
2) 修改如下内容:
BOOTPROTO="static" 		# dhcp改为static   
ONBOOT="yes" 			# 开机启用本配置  
IPADDR=192.168.1.199 	# 静态IP  
GATEWAY=192.168.1.1 	# 默认网关  
NETMASK=255.255.255.0	# 子网掩码
DNS1=8.8.8.8			# DNS
3) service network restart	# 重启网络

修改用户,使其属于root组

usermod -g root [用户名]

压缩解压文件

tar -zxvf dist.tar.gz 		# 显示解压过程
tar -zxf dist.tar.gz 		# 不显示解压过程
tar -zcvf dist.tar.gz dist 	# 显示压缩过程
tar -zcf dist.tar.gz dist 	# 不显示压缩过程

文件相关操作

  • 移动文件:mv 文件名 移动目的地文件名( mv abc.txt /home/abc.txt )
  • 重命名文件:mv 文件名 修改后的文件名( mv a.txt b.txt )
  • 删除文件用:rm 文件名( rm a.txt )
  • 删除文件夹用:rmdir 文件夹名 ( rmdir abc )
  • 删除非空文件夹:rm -rf 非空文件夹名( rm -rf abc )
  • 创建文件:
    vim 文件名 -保存后就创建文件了( vim abc.txt )
    touch 文件名 -在当前目录创建空白文件( touch abc.txt )

查看当前目录

pwd

修改文件读写执行权限

归属者 组权限 其他人
rwx rwx rwx
421 421 421
7 7 7

根据权限的对应数字修改(用root用户修改)

例如:

chmod 777 text.txt 	# 所有人都用户读写执行权限
chmod +x text.txt	#增加可执行权限

卸载centos自带的openjdk

 1) #查看是否安装openjdk 
 rpm -qa | grep jdk
 #显示如下:
 java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
 java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
 2) #卸载:
 yum -y remove java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
 yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

删除java

rpm -qa | grep java 						#查看
rpm -qa | grep java | xargs rpm -e --nodeps	#删除

操作服务

systemctl enable foo.service 		#自动启动
systemctl restart foo.service 		#重启
systemctl start foo.service 		#开启
systemctl stop foo.service 			#停止
systemctl disable foo.service 		#禁用
systemctl status foo.service 		#状态
systemctl reload foo.service 		#重新加载配置(不重启服务)
systemctl is-enabled foo.service 	#查看服务是否开机启动

例如:

关闭、禁用防火墙:
systemctl enable firewalld.service #自动启动
systemctl restart firewalld.service #重启
systemctl start firewalld.service #开启
systemctl stop firewalld.service #停止
systemctl disable firewalld.service #禁用
systemctl status firewalld.service #状态
systemctl restart firewalld.service #重启

端口操作

firewall-cmd --zone=public --add-port=80/tcp --permanent 	# 开启端口
firewall-cmd --remove-port=9998/tcp --permanent				# 关闭端口
firewall-cmd --query-port=80/tcp							# 查询端口是否打开

查看文件几种方式

cat [file]	# 查看短文本文件(推荐)
more [file]	# 查看长文本文件(推荐)
head [file]	# 查看文件开头
tail [file]	# 查看文件结尾

扩展:

head -n 100 [file]	# 查看文件开始100行
tail -n 100 [file]	# 查看文件结尾100行
tail -f [file]		# 持续输出文件结尾(常用于观察日志输出)

配置jdk

vim /etc/profile

在文件尾部追加:

JAVA_HOME=/usr/java/jdk1.8.0_25
JRE_HOME=/usr/java/jdk1.8.0_25/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

使文件立即生效:

source /etc/profile

修改linux主机名

hostnamectl set-hostname [newName]
或者直接修改文件:
vim /etc/hostname

超级复制( 网络复制 格式:scp 源文件 目标文件位置 )

文件:
scp a.txt [email protected]:/home/a.txt
或
scp a.txt [email protected]:/home/

文件夹:
scp -r abc [email protected]:/home/abc

-R 递归式地改变指定目录及其下的所有子目录和文件的属组。

chgrp -R five book		# 将book的组改为five
chown -R five.five his  # 把文件夹his及其下的所有文件和子目录的属主改成five,属组改成five

查看linux硬盘使用情况

df -h

查看java相关进程(前提正确安装了jdk)

jps

清空文件内容

echo ''> [file]
或者
cat /dev/null > [file]

修改hosts:

vim /etc/hosts

查看网络状态

netstat -lntup

查看内存使用情况

free -m		# 以兆的形式展示
free -h		# 更人性化的展示

释放网页、目录项和索引缓存

sync; echo 3 > /proc/sys/vm/drop_caches

find命令

用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”

find / -name  'a.txt'		# 在根目录下查找名字为a.txt的文件
find . -size +100M			# 在当前目录查找文件大小超过100M的文件

去掉搜索后的高亮文本

:noh	# 命令模式下执行

grep查找含有某字符串的所有文件

grep -n "hello,world!" *
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写

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

du常用的选项:
  -h:以友好的方式显示
  -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
  -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
  -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
  --apparent-size:显示目录或文件自身的大小
  -l :统计硬链接占用磁盘空间的大小
  -L:统计符号链接所指向的文件占用的磁盘空间大小
常用组合:

du -hs /etc	# 查看目录/etc的总大小,不显示子目录详情

列出所有用户

cat /etc/passwd | cut -f1 -d:

安装vim

yum install vim -y

yum查看是否安装了指定工具包

yum list [包名]

创建软连接

ln 命令用于创建链接文件,格式为“ln [选项] 目标文件 链接名”

栗子:
ln -s link_file.txt link.txt
  • ln 命令中可用的参数以及作用
参数 作用
-s 创建“符号链接”(如果不带-s 参数,则默认创建硬链接)
-f 强制创建文件或目录的链接
-i 覆盖前先询问
-v 显示创建链接的过程

➢ 可以将它理解为一个“指向原始文件 inode 的指针”,系统不为它分配独立的 inode 和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 inode 连接数就会增加 1;而且只有当该文件的 inode 连接数为 0 时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件 inode 的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。
➢ 仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件
也将失效,从这一点上来说与 Windows 系统中的“快捷方式”具有一样的性质。

删除软连接

rm -rf redis-3.0.7 		# 末尾不能加斜杠“/”

查找服务目录

ps  -ef | grep [服务名]

进入docker容器内部

docker exec -it [容器名称或ID] /bin/bash

宿主机与容器复制操作,在宿主机上执行命令

格式:
docker cp [容器名或ID]:[文件] [文件]					# 从容器复制到宿主机
docker cp [文件] [容器名或ID]:[文件]					# 从宿主机复制到容器
栗子:
docker cp mysql:/etc/mysql/conf.d/mysql.cnf /root	# 从容器复制到宿主机
docker cp /root/mysql.cnf mysql:/etc/mysql/conf.d	# 从宿主机复制到容器

ll、ls命令:

ll -rt		# 按时间排序
ll -Sh		# 按大小排序
ls -a		# 查看隐藏文件

ll 实际上是 ls -l 的别名

查看linux内核版本

uname -a

后台运行

& 	#例如:sh test.sh &

使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一旦把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:

nohup command & 	# 例如:nohup sh test.sh &

使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行

根据pid查询端口占用情况(根据端口查询进程pid)

netstat -lnp | grep [pid][port]
netstat -lnp | grep 32705	# pid
netstat -lnp | grep 80		# port

查看进程详情

ps [pid]

Vim中常用的命令

  • 命令模式下:
命令 作用
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的 5 行
yy 复制光标所在整行
5yy 复制从光标处开始的 5 行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作,无限往回撤销操作
Ctrl+r 恢复上一步被撤销的操作,无限往回恢复撤销操作
U 撤销、恢复撤销操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
gg 跳到文档开头 (或者 输入 :0 、:1)
G 跳到文档末尾(或者输入 :$
^ 移动光标,到本行的第一个非空字符
0 移动光标到行首,不管是否是非空字符
$ 右移光标,到本行的末尾
x 删除光标后的一个字符
X 删除光标前的一个字符
nx 删除光标所指向的后 n 个字符
D 删除从当前光标到行尾的所有字符
rc 用 c 替换光标所指向的当前字符
nrc 用 c 替换光标所指向的后 n 个字符(n个字符都会被替换为c)
. (小数点)重复最后一条修改正文的命令
i 当前字符前插入字符
I 在行首插入文字
a 在当前字符后添加文本
A 在行末添加文本
o 在当前行后插入空行
O 在当前行前插入空行
  • 末行模式中:
命令 作用
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个 one 替换成 two
:s/one/two/g 将当前光标所在行的所有 one 替换成 two
:%s/one//gn 统计字符串one个数
:%s/one/two/g 将全文中的所有 one 替换成 two
:g/str1/s//str2/g 用字符串 str2 替换正文中所有出现的字符串 str1(没上面那个好记…)
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串
:$ 跳到最后一行(效果同 G)

组相关命令:

usermod -G groupname username (这种会把用户从其他组中去掉,只属于该组)
如:usermod -G git git (git只属于git组)

usermod -a -G groupname username (把用户添加到这个组,之前所属组不影响)
如:usermod -a -G www git (git属于之前git组,也属于www组)

例:把 user1加入users组
gpasswd –a user1 users 

例:把 user1退出users组
gpasswd –d user1 users 

date命令

date "+%Y-%m-%d %H:%M:%S Day %j"		# 按指定格式查看时间
date -s 时间字符串:
date -s 2012-08-02						# 例如只修改系统的日期,不修改时间(时分秒)
date -s 10:08:00						# 只修改时间不修改日期
date -s "2012-05-18 04:53:00"			# 同时修改日期和时间

更改时区

rm -rf /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

更改时区后,一般需要重启应用才能生效,如重启mysql。

查看指定服务的pid

pidof [参数] [服务名称]	
例如:pidof sshd

killall 命令

用于终止某个指定名称的服务所对应的全部进程
killall [参数] [服务名称]
例如:killall sshd

history 命令

history 用于显示历史执行过的命令
history -c 清空历史命令
!命令编号 可以重新执行命令,避免手写 (命令编号来自history命令的执行结果)

tr命令

tr [原始字符] [目标字符] 替换文本字符,可配合管道符使用
例如:cat a.txt | tr today yesterday > b.txt (将文件中的today替换为yesterday,并输出到b.txt中)

cut 命令

cut 命令用于按“列”提取文本字符,格式为“cut [参数] 文本”
-d 参数设置间隔符号
-f 参数设置要看的列
例如:cut -d: -f1 /etc/passwd

神奇的文件

/dev/null		"黑洞",往这个文件写任何东西都会消失
/dev/zero		不会占用系统存储空间,但却可以提供无穷无尽的数据

dd命令

格式:dd [参数]
if	输入的文件名称
of	输出的文件名称
bs	设置每个“块”的大小
count	设置要复制的“块”的个数
例如:
dd if=/dev/zero of=560_file count=5 bs=10M

file 命令

用于查看文件的类型,格式为“file 文件名”

输入输出重定向

  • 输入重定向用到的符号及作用:
符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇到分界符停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2
  • 输出重定向中用到的符号及其作用:
符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

4 个最常用的转义字符

➢ 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
➢ 单引号(’’):转义其中所有的变量为单纯的字符串。
➢ 双引号(""):保留其中的变量属性,不进行转义处理。
➢ 反引号(``):把其中的命令执行后返回结果

文件测试所用的参数

运算符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

使用管道符和passwd命令的–stdin参数可快速更新密码

echo "123456" | passwd --stdin mark	 	# 更新用户mark的密码为123456

定时任务

  • 一次性定时任务
at 时间 			# 设置定时任务
at -l			# 展示已设置的定时任务
atrm [任务编号] 	# 删除已设置的定时任务

例如:
[itoak@localhost ~]$ at 23:30
at > systemctl restart httpd
at > 此处请同时按下 Ctrl + D 组合键来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2017
[itoak@localhost ~]$ at -l
3 Mon Apr 27 23:30:00 2017 a root

一条命令设置任务:
[itoak@localhost ~]$ echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2017
[itoak@localhost ~]$ at -l
3 Mon Apr 27 23:30:00 2017 a root
4 Mon Apr 27 23:30:00 2017 a root

删除一个任务:
[itoak@localhost ~]$ atrm 3
[itoak@localhost ~]$ at -l
4 Mon Apr 27 23:30:00 2017 a root
  • 周期性定时任务
crontab -e		# 创建、编辑计划任务
crontab - l		# 查看当前计划任务
crontab -r		# 删除某条计划任务

Tips:
1) crontab 命令中加上-u 参数来编辑他人的计划任务
2) 参数格式:"分、时、日、月、星期 命令",如果有些字段没设置,需用星号(*)占位
3) 用逗号(,)来分别表示多个时间段,例如“8,9,12”表示 8 月、9 月和 12 月
4) 用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的 12~15 日)
5) 用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2 分钟执行一次任务)
6) 在 crond 服务的计划任务参数中,所有相关的文件、脚本都需要使用绝对路径(命令不需要)
7) 计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突

栗子:
# 每周一、三、五的凌晨 3 点 25 分,都需要使用 tar 命令把某个网站的数据目录进行打包处理,使其作为一个备份文件
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot

# 每周一至周五的凌晨 1 点钟自动清空/tmp 目录内的所有文件
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

学而时习之

原创文章 67 获赞 31 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u012534326/article/details/99961083