ZZ # 保存并退出
:q! # 强制不保存退出
:wq! # 强制保存退出
:q # 退出
:w # 保存
:wq # 保存退出
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 # 不显示压缩过程
pwd
归属者 | 组权限 | 其他人 |
---|---|---|
rwx | rwx | rwx |
421 | 421 | 421 |
7 | 7 | 7 |
根据权限的对应数字修改(用root用户修改)
例如:
chmod 777 text.txt # 所有人都用户读写执行权限
chmod +x text.txt #增加可执行权限
cat [file] # 查看短文本文件(推荐)
more [file] # 查看长文本文件(推荐)
head [file] # 查看文件开头
tail [file] # 查看文件结尾
扩展:
head -n 100 [file] # 查看文件开始100行
tail -n 100 [file] # 查看文件结尾100行
tail -f [file] # 持续输出文件结尾(常用于观察日志输出)
文件:
scp a.txt [email protected]:/home/a.txt
或
scp a.txt [email protected]:/home/
文件夹:
scp -r abc [email protected]:/home/abc
chgrp -R five book # 将book的组改为five
chown -R five.five his # 把文件夹his及其下的所有文件和子目录的属主改成five,属组改成five
echo ''> [file]
或者
cat /dev/null > [file]
用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”
find / -name 'a.txt' # 在根目录下查找名字为a.txt的文件
find . -size +100M # 在当前目录查找文件大小超过100M的文件
:noh # 命令模式下执行
grep -n "hello,world!" *
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
ln 命令用于创建链接文件,格式为“ln [选项] 目标文件 链接名”
栗子:
ln -s link_file.txt link.txt
参数 | 作用 |
---|---|
-s | 创建“符号链接”(如果不带-s 参数,则默认创建硬链接) |
-f | 强制创建文件或目录的链接 |
-i | 覆盖前先询问 |
-v | 显示创建链接的过程 |
➢ 可以将它理解为一个“指向原始文件 inode 的指针”,系统不为它分配独立的 inode 和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 inode 连接数就会增加 1;而且只有当该文件的 inode 连接数为 0 时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件 inode 的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。
➢ 仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件
也将失效,从这一点上来说与 Windows 系统中的“快捷方式”具有一样的性质。
rm -rf redis-3.0.7 # 末尾不能加斜杠“/”
ll -rt # 按时间排序
ll -Sh # 按大小排序
ls -a # 查看隐藏文件
ll 实际上是 ls -l 的别名
命令 | 作用 |
---|---|
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) |
tr [原始字符] [目标字符] 替换文本字符,可配合管道符使用
例如:cat a.txt | tr today yesterday > b.txt (将文件中的today替换为yesterday,并输出到b.txt中)
cut 命令用于按“列”提取文本字符,格式为“cut [参数] 文本”
-d 参数设置间隔符号
-f 参数设置要看的列
例如:cut -d: -f1 /etc/passwd
用于查看文件的类型,格式为“file 文件名”
运算符 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
$ ls -l | grep "^-" | wc -l
$ ls -lR| grep "^-" | wc -l
$ ls -lR | grep "^d" | wc -l
su [用户名]
su - #切换到root,- 可省略,需要密码
cat /etc/passwd | cut -f1 -d:
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
echo "123456" | passwd --stdin mark # 更新用户mark的密码为123456
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 # 重启网络
netstat -lntup
ping -I eth0 10.10.10.1
ping -I 10.10.10.2 10.10.10.1
yum clean all
yum makecache
yum -y update
yum install vim -y
yum list [包名]
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
rpm -qa | grep java #查看
rpm -qa | grep java | xargs rpm -e --nodeps #删除
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
jps
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 # 从宿主机复制到容器
# 下载软件包
https://www.python.org/downloads/source/
# 上传服务器并解压
tar -zxf Python-3.10.12.tgz
# 安装编译环境
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
# 进入解压Python目录并安装
./configure
make && make install
# 检查版本
python3 --version
# 设置python3为默认版本
rm -rf /usr/bin/python
ln -s /usr/local/bin/python3 /usr/bin/python
vim /usr/bin/yum
将
#!/usr/bin/python
更改为
#!/usr/bin/python2
或者升级yum到高版本
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 # 查询端口是否打开
firewall-cmd --zone=public --list-ports # 查看所有打开的端口
hostnamectl set-hostname [newName]
或者直接修改文件:
vim /etc/hostname
df -h
vim /etc/hosts
free -m # 以兆的形式展示
free -h # 更人性化的展示
du常用的选项:
-h:以友好的方式显示
-a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
-s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
-c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
--apparent-size:显示目录或文件自身的大小
-l :统计硬链接占用磁盘空间的大小
-L:统计符号链接所指向的文件占用的磁盘空间大小
常用组合:
du -hs /etc # 查看目录/etc的总大小,不显示子目录详情
sync; echo 3 > /proc/sys/vm/drop_caches
ps -ef | grep [服务名]
uname -a
& #例如:sh test.sh &
使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一旦把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:
nohup command & # 例如:nohup sh test.sh &
使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行
netstat -lnp | grep [pid]或[port]
netstat -lnp | grep 32705 # pid
netstat -lnp | grep 80 # port
ps [pid]
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。
pidof [参数] [服务名称]
例如:pidof sshd
用于终止某个指定名称的服务所对应的全部进程
killall [参数] [服务名称]
例如:killall sshd
history 用于显示历史执行过的命令
history -c 清空历史命令
!命令编号 可以重新执行命令,避免手写 (命令编号来自history命令的执行结果)
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/*
# 方式一
pstree -p {pid}
# 方式二:PPid表示父进程id
cat /proc/{pid}/status
command > /dev/null 2>&1
systemctl set-default multi-user.target # 命令行模式
systemctl set-default graphical.target # 图形界面模式
/dev/null "黑洞",往这个文件写任何东西都会消失
/dev/zero 不会占用系统存储空间,但却可以提供无穷无尽的数据
格式:dd [参数]
if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要复制的“块”的个数
例如:
dd if=/dev/zero of=560_file count=5 bs=10M
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分界符 | 从标准输入中读入,直到遇到分界符停止 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 2>&1 或 命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
➢ 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
➢ 单引号(‘’):转义其中所有的变量为单纯的字符串。
➢ 双引号(“”):保留其中的变量属性,不进行转义处理。
➢ 反引号(``):把其中的命令执行后返回结果