Linux命令笔记

一、目录文件相关

退出文件
ZZ # 保存并退出
:q! # 强制不保存退出
:wq! # 强制保存退出
:q # 退出
:w # 保存
:wq # 保存退出
修改用户,使其属于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 #增加可执行权限
查看文件几种方式
cat [file] # 查看短文本文件(推荐)
more [file] # 查看长文本文件(推荐)
head [file] # 查看文件开头
tail [file] # 查看文件结尾

扩展:

head -n 100 [file] # 查看文件开始100行
tail -n 100 [file] # 查看文件结尾100行
tail -f [file] # 持续输出文件结尾(常用于观察日志输出)
超级复制( 网络复制 格式: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
清空文件内容
echo ''> [file]
或者
cat /dev/null > [file]
find命令

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

find / -name  'a.txt' # 在根目录下查找名字为a.txt的文件
find . -size +100M # 在当前目录查找文件大小超过100M的文件
去掉搜索后的高亮文本
:noh # 命令模式下执行
grep查找含有某字符串的所有文件
grep -n "hello,world!" *
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
创建软连接

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 # 末尾不能加斜杠“/”
ll、ls命令
ll -rt # 按时间排序
ll -Sh # 按大小排序
ls -a # 查看隐藏文件

ll 实际上是 ls -l 的别名

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)
tr命令
tr [原始字符] [目标字符] 替换文本字符,可配合管道符使用
例如:cat a.txt | tr today yesterday > b.txt (将文件中的today替换为yesterday,并输出到b.txt中)
cut 命令
cut 命令用于按“列”提取文本字符,格式为“cut [参数] 文本”
-d 参数设置间隔符号
-f 参数设置要看的列
例如:cut -d: -f1 /etc/passwd
file 命令

用于查看文件的类型,格式为“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
使用管道符和passwd命令的–stdin参数可快速更新密码
echo "123456" | passwd --stdin mark # 更新用户mark的密码为123456

三、网络相关

静态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 # 重启网络
查看网络状态
netstat -lntup
指定网卡进行ping操作
ping -I eth0 10.10.10.1
ping -I 10.10.10.2 10.10.10.1

四、软件相关

yum源更新
yum clean all
yum makecache
yum -y update
安装vim
yum install vim -y
yum查看是否安装了指定工具包
yum list [包名]
卸载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 #删除
配置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
查看java相关进程(前提正确安装了jdk)
jps
进入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 # 从宿主机复制到容器
安装Python
# 下载软件包
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
yum不支持python3
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 # 查看所有打开的端口
修改linux主机名
hostnamectl set-hostname [newName]
或者直接修改文件:
vim /etc/hostname
查看linux硬盘使用情况
df -h
修改hosts
vim /etc/hosts
查看内存使用情况
free -m # 以兆的形式展示
free -h # 更人性化的展示
du查看某个文件或目录占用磁盘空间的大小

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

du -hs /etc # 查看目录/etc的总大小,不显示子目录详情
释放网页、目录项和索引缓存
sync; echo 3 > /proc/sys/vm/drop_caches
查找服务
ps  -ef | grep [服务名]
查看linux内核版本
uname -a
后台运行
& #例如:sh test.sh &

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

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

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

根据pid、端口查询进程
netstat -lnp | grep [pid][port]
netstat -lnp | grep 32705 # pid
netstat -lnp | grep 80 # port
查看进程详情
ps [pid]
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命令的执行结果)
定时任务
  • 一次性定时任务
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 月和 124) 用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“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

九、其他

linux操作系统模式切换
systemctl set-default multi-user.target # 命令行模式
systemctl set-default graphical.target # 图形界面模式
神奇的文件
/dev/null "黑洞",往这个文件写任何东西都会消失
/dev/zero 不会占用系统存储空间,但却可以提供无穷无尽的数据
dd命令
格式:dd [参数]
if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要复制的“块”的个数
例如:
dd if=/dev/zero of=560_file count=5 bs=10M
输入输出重定向
  • 输入重定向用到的符号及作用:
符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇到分界符停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2
  • 输出重定向中用到的符号及其作用:
符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
4 个常用符号含义

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

你可能感兴趣的:(Linux,Centos7,Linux,centos7,Linux命令)