Linux命令速记

vim编辑器

vim有3种常见模式:

  1. 正常模式
  2. 插入模式
  3. 命令行模式

正常模式:可移动光标、复制粘贴、删除等。

vim filename.xxx # 没有则创建后打开,有则直接打开 打开后进入正常模式
yy # 拷贝当前行
5yy #拷贝接下来的5行
p # 粘贴
dd # 删除当前行
5dd # 删除接下来5行
:set nu # 设置行号
:set nonu # 取消行号
G # 来到末行
gg # 回到首行
u # 撤销刚刚的操作

10
shift + g # 将光标移动到第十行 

:wq # 保存并退出
:q! # 强制退出(不保存刚刚的改动)
:q # 如果打开之后没有编辑过,可以这样退出,否则只能用wq和q!

打开文件时是正常模式,按i进入插入模式(可编辑)。
插入模式回到正常模式需要按ESC键
正常模式到命令行模式按:
vim在粘贴代码的时候,会格式错乱。怎么办?

:set paste # 进入粘贴模式

然后再按i进行粘贴就可以了。需要注意的是,粘贴完了需要退出粘贴模式。

:set nopaste # 退出粘贴模式

用vim怎么查找呢?
在正常模式下按/,然后输入要查找的字符串即可。
比如如果要在一个文件中查找eg,就:

/eg

开机重启等命令

shutdown -h now # 立即关机
shutdown -h 1 # 1分钟后关机
shutdown -r now # 立即重启
halt # 直接关机
reboot # 重启系统
sync # 将内存中的数据刷到硬盘

用户切换及注销

su 用户名 # 只是切换了用户,不会改变原用户的工作目录以及其他环境变量目录
su - vth # 切换成vth用户, 并将工作目录、其他环境变量目录都切换到vth的。
#上一条, 工作目录是切换到/home/vth的 
sudo su # 授权给当前用户root权限,不切换工作目录。只需要输入当前用户的密码。
# 但是这种方式需要root用户在/etc/sudoers文件中的
# root    ALL=(ALL)       ALL 复制一行,把root替换成用户名即可。 这个文件是只读的,
# 如果想修改可以提权。
su - xm # 切换成用户小明
logout # 运行级别3下注销用户
exit # 退出当前用户
su 、sudo、su - xxx 对比:
su的话是拥有了root权限,没有改变目录和环境变量,切换时要输入密码。
su - xxx # 的话低级到高级需要输入密码,改变目录和环境变量。
sudo su # 执行时只需要输入当前用户的密码就可以了。但是要确保在/etc/sudoers里面添加了当前的东西 

用户管理

Linux的用户至少要属于一个组, 如果添加用户的时候没有指定组,那么它自己就是一个组。

useradd xm # 添加用户xm
useradd -d /home/dog xm # 添加用户xm并把家目录设置成/home/dog
useradd -g xmzu xm # 创建xm用户并将它加入到xmzu用户组
# 注意,上面那条语句,必须先存在xmzu这个组,不然不能行。
usermod -g shaolin xm # 将用户xm所属的组改成shaolin
# 注意,上面那条语句,必须先存在shaolin这个组,不然不能行。
passwd xm # root用户给xm更改密码
注意,提示符是$代表普通用户,#代表root用户
userdel xm # 删除xm用户,但是保留它创建的家目录
userdel -r xm # 删除xm用户以及它创建的家目录 # 斩草除根
id xm # 查看用户信息
用su - root 切换用户时,exit可以返回原来的用户。
从高权限用户到低权限用户时不用输入密码,反之要输入密码。
groupadd wudang # 建立wudang组
groupdel wudang # 删除wudang组,注意,wudang组中有成员的时候不能删

运行级别及密码找回

在这里插入图片描述

/etc/inittab的id:5:initdefault:这一行的数字代表了运行级别,可以从这儿改。
init 0 # 切换到运行级别0
# 忘记root密码怎么找回:
进入到单用户模式,然后修改root密码,因为进入到单用户模式root不需要密码就可以登陆。
开机引导-回车-e-第二行-e-1-回车-b
然后进入了单用户模式,用passwd root 即可修改root密码。

帮助指令

man ls # 查看ls的用法
help cd # 获得shell内置命令cd的帮助信息

文件目录类

pwd # 显示当前目录的绝对路径
ls # 列出非隐藏的文件夹、文件
ls -a # 列出所有的文件夹和文件
ls -l # 列出非隐藏的文件夹、文件并显示详细信息
ll -a # 这个最常用,最全, 但是需要alias支持。alias命令即可列出当前的alias配置。
ll # 这个相当于ls -l
cd xxx # 切换到指定目录,xxx可以是一个绝对路径也可以是一个相对路径
cd ~ 或者 cd 空格 # 回到自己的家目录
cd .. # 回到上级目录
mkdir xxx # 创建文件夹。xxx为绝对路径或者相对路径,这个要保证路径存在
mkdir -p xxx# 创建文件夹,xxx为绝对路径或相对路径,无需保证路径存在(如果不存在就创建)
mkdir xxx yyy zzz 就可以创建3个目录,以此类推。。
rmdir xxx # 删除空目录,xxx为绝对路径或相对路径。
rmdir xxx yyy zzz # 也可以一下删除3个目录,以此类推。。
# 也可以用通配符, rmdir test* 即可删除所有的以test开头的空目录。
rm -rf xxx # 删除非空目录,xxx为绝对路径或相对路径。
rm 命令也可以跟非常多个参数,写很多规则。
rm -rf xxx* yyy* zzz* 这样也是可以的。
touch a.txt # 创建一个空文件a.txt
touch a.txt b.txt # 创建两个文件,a.txt和b.txt
# 以此类推 , touch可以一次创建n个空文件。 
# touch的话,如果要创建的文件已经存在,则不会覆盖。
cp xxx yyy # 将文件xxx复制到yyy下,xxx,yyy可以是相对路径或绝对路径
cp -r xxx yyy #将目录xxx复制到yyy下,  xxx,yyy可以是相对路径或绝对路径
rm -f s.txt # 强制删除s.txt  s.txt也可以由绝对路径给出
#  打字太累了,所有的文件或者目录都可以以绝对路径和相对路径给出,不写了。
rm -rf xxx # 删除xxx目录
rm -rf ./a.zip ./xxx # 删除当前目录下的a.zip 和 目录./xxx
mv xxx/yyy aaa/bbb # 如果xxx与aaa相同,那么这是重命名 不同就是移动文件
总之,mv的机制就是:先剪切,然后粘贴到目标目录aaa/bbb , 如果这跟原来的目录不同,这就是个移动操作,否则就是重命名操作
实例:
mv a.txt b.txt # 重命名
mv a.txt /root # 将a.txt移动到/root目录


cat a.txt # 以只读方式查看a.txt
cat -n a.txt # 给所有的行加上行号
cat -b a.txt # 只给有文本的行加上行号
cat -n a.txt | more # 一般这么用是分页浏览, | 就是将cat的运行结果交给more去处理 
| 是管道符的意思。
more file # 分页查看file
more时, q是退出,搜索是/关键字, 空格是看下一屏, b是看上一屏, 回车是看下一行, 搜索关键字之后, n是看下一个关键字所在的位置.  
less file # 跟more功能差不多,比more强大一些 ,是more的升级版. less 跟python中的生成器比较像,不会把文件一下都读到内存中,所以对待大文件时更友好。
> # 输出重定向
>> # 追加
# 注意,下面的是ll,不是||
ll > a.txt # 如果a.txt不存在,则先创建a.txt,再将ll的输出写到a.txt中;如果a.txt存在,
则先清空a.txt 再将ll的输出写到a.txt中
ll >> b.txt # 如果b.txt不存在,则先创建b.txt,再将ll的输出写到b.txt中;如果b.txt存在
则将ll的输出追加至b.txt的末尾
cat file1 > file2 # 用file1的内容覆盖file2
echo 'caonima' > file1 # 用'caonima' 覆盖file1
echo # 输出内容到控制台
echo $PATH # 输出环境变量
head file # 查看file的前10行
head -n 3 file# 查看file的前3行
head -3 file # 查看file的前3行, 这种最方便
tail file # 查看file的后10行
tail -n 3 file # 查看file的后3行
tail -3 file # 查看file的后3行
tail -f file # 实时追踪文档的所有更新,改动并保存后可以看出来

ln -s 原文件或目录 软链接名 # 相当于搞一个windows的快捷方式
ln -s 创建的是一个软链接,也叫符号链接。
它的文件内容和原文件是不一样的,而且它和原文件也不是同一个文件。
可以用ls -i file_name 来查看一个文件的inode编号。
文件或目录的inode编号是一个用于标识的唯一数字,
这个数字由内核分配给文件系统中的每一个对象。
ln -s /root link 将本目录下的link链接到/root
用cd link就跟cd /root 一样的效果,但是这时pwd一下会发现还在link下。
rm -rf link # 删除软链接.

# 硬链接
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。
也就是说,硬链接的inode号跟源文件是一样的,所以文件大小、内容之类的都是一样的。
ln file/path link_name # 创建硬链接

软链接和硬链接的区别:
只能对处于同一存储媒体的文件创建硬链接。
要想在不同存储媒体的文件之间创建链接,只能使用符号链接。
history # 查看执行过的历史命令

附录 ln实例:

lrwxrwxrwx 1 root root  5 3月  11 15:03 link -> /root
[root@vth play]# cd link
[root@vth link]# ll
总用量 108
drwxr-xr-x  3 root root  4096 3月  10 22:23 aaa
-rw-------. 1 root root  1286 9月   6 2018 anaconda-ks.cfg
-rw-r--r--  1 root root     0 3月  10 22:00 a.txt
drwxr-xr-x  2 root root  4096 3月  10 22:00 bbb
-rw-r--r--. 1 root root 41954 9月   6 2018 install.log
-rw-r--r--. 1 root root  9154 9月   6 2018 install.log.syslog
drwxr-xr-x. 3 root root  4096 9月   6 2018 PycharmProjects
drwxr-xr-x. 2 root root  4096 9月   5 2018 公共的
drwxr-xr-x. 2 root root  4096 9月   5 2018 模板
drwxr-xr-x. 2 root root  4096 9月   5 2018 视频
drwxr-xr-x. 2 root root  4096 9月   5 2018 图片
drwxr-xr-x. 2 root root  4096 9月   5 2018 文档
drwxr-xr-x. 2 root root  4096 3月   7 10:55 下载
drwxr-xr-x. 2 root root  4096 9月   5 2018 音乐
drwxr-xr-x. 4 root root  4096 3月   5 08:39 桌面
[root@vth link]# pwd
/home/xm/play/link

时间日期类

date # 显示当前时间
date '+%Y' # 显示当前年份
date '+%m' # 显示当前月份
date '+%d' # 显示当前日期(每个月第几天)
date '+%H%M%S' # 显示当前的时分秒
结论:加号不能少,还要写成一个字符串的形式
date -s '2018-10-10 11:22:22' # 将时间改成字符串时间
cal # 显示当前月的日历
cal 2020 # 显示2020年的日历

实例:

[root@vth link]# date '+%Y/%m/%d'
2019/03/11

搜索查找类

find 搜索范围 选项 文件名或目录
find /root -name a.txt # 查找/root目录下的a.txt
find /opt -user xm # 查找/opt目录下用户名是xm的文件。(即归属于xm的文件)
find / -size +20M # 查找整个linux系统大于20M的文件 # 小于用-  等于用空格
find / -size +10k #  注意k是小写,查找大于10k的文件
find / -name *.txt # 查找系统中所有后缀名是.txt的文件
find / -iname abc.txt # 忽略abc.txt的大小写差异查找
updatedb # 创建locate数据库,以快速定位文件路径
locate hello.txt # 给出所有的包含hello.txt的绝对路径
# 必须要先用updatedb建立locate数据库之后才能用locate命令
| # 管道符,将前一个命令的处理结果输出传递给后面的命令进行处理
grep # 过滤查找 -n带上行号  -i 忽略大小写
cat hello.txt | grep -n yes # 查找hello.txt中包含yes字段的行。
grep -rn "test" * # 查找当前目录下所有文件中包含"test"的行。r代表递归

示例:

# 查找文件
[root@vth link]# find /root -name a.txt
/root/桌面/bbb/aaa/aaa/a.txt
/root/桌面/bbb/aaa/a.txt
/root/桌面/bbb/a.txt
/root/aaa/bbb/a.txt
/root/a.txt
/root/bbb/a.txt

查找目录
[root@vth link]# find /root -name aaa
/root/桌面/bbb/aaa
/root/桌面/bbb/aaa/aaa
/root/aaa

压缩和解压类

gzip file  # 将file压缩成file.gz 压缩后不保留file
gunzip file.gz # 将file.gz解压缩成file  不保留file.gz
zip 选项 file.zip 目录或文件
zip b.zip a.txt # 将a.txt压缩成b.zip  保留原来的a.txt
zip -r c.zip /root # 将/root压缩到c.zip
unzip b.zip # 将b.zip解压到当前目录。
unzip -d /root b.zip # 将b.zip解压缩到/root目录下。
tar 选项 xxx.tar.gz 打包的内容 # 压缩时用-zcvf 解压时用-zxvf
tar -zcvf a.tar.gz a1.txt a2.txt # 把a1.txt和a2.txt打包成a.tar.gz
# 注意,压缩类的文件名、目录都可以写多个。
tar -zxvf a.tar.gz # 解压a.tar.gz
tar -zxvf a.tar.gz -C /opt # 解压到/opt下 注意,/opt必须存在,否则报错

组管理和权限管理

在linux中每个用户都必须属于一个组,不能独立于组外。在linux中每个文件都有所有者、所在组、其他组。
一般来说,文件的所有者就是创建了这个文件的用户。
所在组一般来说就是创建了这个文件的用户所在的组。
其他组就是除了文件的所有者和所在组的用户外的其他用户。

ls -ahl # 查看文件所有者
chown username filename # 将filename文件的所有者改成username。
chgrp groupname filename # 将filename文件的所在组改成groupname。

文件、目录权限

-rw-r--r-- 1 root root   4 3月  10 22:27 a.py

0-9位(10个数)说明:
第0位确定文件的类型 -:普通文件 d:目录 l:软连接 c:字符设备 b:硬盘
1-3位代表文件所有者的权限 rwx 读写执行 -代表没有此权限
4-6位代表文件所在组的权限 同上
7-9位代表文件其他组的权限 同上

注意,有写权限只代表能修改文件,并不代表能删除文件。
想拥有删除文件的权限要对该文件的目录具有写权限。

【重难点】rwx于文件
r:可以读取,查看
w:可以修改文件
x:可以被执行

【重难点】rwx于目录
r:可以读取,ls查看内容
w:可以修改:目录内创建、删除、重命名目录
x:可以进入该目录

权限也可以用数字表示。r=4,w=2,x=1

chmod # 修改权限
u:所有者
g:所在组
o:其他人
a:所有人
chmod u=rwx,g=rx,o=rx a.py # 将a.py的所有者、所在组、其他组权限改为rwxr-xr-x
chmod g+w,o-x a.py # 将目前的a.py的所在组权限加上写权限,去掉其他组的执行权限
chmod 777 a.py # 给a.py加上所有的权限

chown # 修改文件所有者
chown xm a.py # 将a.py的所有者改成xm
chown xm:xm a.py # 将a.py的所有者改成xm用户,将所在组改为xm组
chown -R xm bbb # 将bbb目录以及目录下所有的东西递归的改所有者为xm

chgrp # 修改文件所在组
 chgrp root a.py # 将a.py的用户组改为root
 chgrp -R xm bbb # 将目录bbb下的所有东西递归的把用户组改为xm

任务调度crontab

啥叫任务调度???其实就是定时执行某程序或者某命令。
那么要设置一个任务调度,有两种办法:

  • 设置任务调度文件 /etc/crontab
  • 设置个人任务调度 crontab -e
    然后可以输入任务到调度文件,如:
*/1 * * * * ls -l /root > /root/aaa/cron.txt # 每分钟都执行一次 ls.....

保存并退出即可。
5个*的含义:

第一个* 一小时当中的第几分钟 0-59
第二个* 一天当中的第几个小时 0-23
第三个* 一个月当中的第几天 1-31
第四个* 一年当中的第几个月 1-12
第五个* 一周当中的星期几 0-7 0和7都代表了周日
* 代表任何时间。第一个*就代表了每分钟都执行一次的意思。
,代表不连续的时间。 0,8,12,16 * * * *代表了每小时的第0,8,12,16分钟执行
- 代表连续时间范围。 0-6 * * * * 代表了每小时的第0到6分钟执行
*/n 代表每隔n执行一次。 */10 * * * *代表每隔十分钟执行一次
crontab -l # 列出当前有哪些任务调度
crontab -r # 终止任务调度
service crond restart # 重启任务调度

磁盘管理

分区的方式有两种

  • mbr分区
  • gpt分区

mbr分区:

  • 最多支持四个主分区
  • 系统只能安装在主分区
  • 扩展分区要占一个分区
  • MBR最大只支持2TB,但拥有最好的兼容性。

gpt分区:

  • 支持无限多个主分区
  • 最大支持18EB容量

linux的分区是要挂载到某个目录的。
linux的硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。

对于IDE硬盘来说,驱动器标识符为“hdx~”,其中hd表示分区所在设备的类型,这里是指IDE硬盘。"x"为盘号(a为基本盘),~代表分区。 前4个分区是主分区或扩展分区,从5开始就是逻辑分区。对于SCSI硬盘则标识为"sdx~",其他的都一样。

lsblk -f # 查看分区和挂载情况
df -h # 查看磁盘使用情况
df -lh # 查看本地文件系统的磁盘使用情况
du -ach --max-depth=1 /root # 查看root目录下的磁盘占用情况
wc -l file # 统计file有多少行
ls -l /root/aaa | wc -l # 统计这个命令列出来多少行
ls -l /root | grep '^-' | wc -l # 统计root目录下的所有文件个数(一级非递归)
ls -lR /root | grep '^-' | wc -l # 统计root目录下的所有文件个数(递归)
tree # 以树状显示目录结构

网络配置

ifconfig # 查看网络配置
ping www.baidu.com # 对百度进行ping

进程管理

服务一般来说可以认为是后台进程。

ps -aux | more # 显示系统执行的进程,相当于查看windows的任务管理器进程
# 有USER PID CPU 内存占用等信息
ps -aux | grep sshd # 看看有没有sshd服务
ps -ef | more # 查看进程的父进程
kill 进程号 # 根据进程号杀死进程 不能杀死自己
kill -9 进程号 # 疯起来连自己都杀
killall 进程名称 # 根据进程名称杀死进程
pstree -pu # 显示进程的pid,所属用户组成的进程树
# 服务就是守护进程
service iptables status # 查看防火墙状态
service iptables start # 开启防火墙
service iptables stop # 关闭防火墙

lsof -i:3306 # 查看哪个进程在用3306
lsof -p pid # 查看进程打开的文件

Linux开机流程:
开机-BIOS-/boot-init进程1-运行级别-运行级别对应的服务

chkconfig # 给服务的各个运行级别设置自启动/关闭
chkconfig --list | grep sshd # 找到sshd服务
chkconfig iptables --list # 找到iptables服务
chkconfig --level 5 iptables on # 运行级别5下自启动防火墙
chkconfig --level 5 iptables off # 运行级别5下关闭自启动防火墙
chkconfig iptables off # 在所有运行级别下关闭防火墙

top # 实时监控CPU使用率,各进程的CPU、内存占用情况等。
top执行完了按下u 输入用户名,就能看特定用户名的进程
top执行完了按下k 输入进程ID,就能杀掉进程
netstat -an # 显示所有的网络服务

lscpu # 查看cpu信息
free -m # 以m的形式显示内存信息
free -g # 以g的形式显示内存信息

RPM和YUM

RPM就是REDHAT软件包管理工具。跟windows的SETUP一个样。

rpm -qa # 查看已安装的rpm列表
rpm -q firefox # 查询firefox是否已被安装
rpm -ql firefox # 查询firefox的文件安装到哪里去了
rpm -qf /etc/passwd # 查询某个文件属于哪个rpm包
rpm -e firefox # 卸载firefox

yum能从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装
所有依赖的软件包,使用yum的前提是可以联网。

yum list | grep firefox # 查询yum服务器上是不是有firefox
yum install firefox # 下载并安装firefox

拾遗

sort命令,用于排序

如果不指定参数,是按照字符串进行排序的。
如果想对数字进行排序,则要用sort -n,如果要求去重,则需要加上-u, 如果要求从大到小排序,则需要用-r

sort -run test.txt # 文本文件中的数字从大到小排列,去重
sort -run test.txt | head -3 # 找出排前三大的数字

跨linux传输文件:

格式:

# 本地传到远程
scp local_file remote_username@remote_ip:remote_file
# 远程复制到本地
scp root@www.runoob.com:/home/root/others/music /home/space/music/

分割大文件:

split -6 test.txt # 每6行分割成一个文件 命名为xaa...xab.....
split -b 1 test.txt # 每个文件占一个字节,按照字节进行split

文件定位命令:

whereis

Linux whereis命令用于查找文件。
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令

whereis bash

locate

Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。
一般情况我们只需要输入 locate your_file_name 即可查找指定文件。
注意,这个是去保存文档和目录名称的数据库内查找的,并不算是查找真正的硬盘。所以查找的速度特别的快,但是这只是去找数据库,数据库可能不会实时更新。
一般文件数据库在/var/lib/slocate/slocate.db中。
这样会导致不爽,咋办?我们可以手动更新数据库。

updatedb

正常的查找是这样的:

locate test.txt

所有以test.txt为结尾的文件都会被找到。

locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。
locate的速度比find快。

find

find本文之前已经给出了。

expr命令

统计字符串长度:

expr length "this is a test"

字符串切片:(注意和python进行区分,这里的index并不是下标,而且不想python一样是个半开半闭区间)

expr substr "this is a test" 3 5

获取第一个字符出现的位置:

expr index "sarasara"  a

运算:

expr 14 % 9
expr 30 \* 3 #(使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)

uniq命令

uniq看名字就知道是去重用的。
它可以去掉连续的重复行(言外之意就是不连续的重复行并不能去除)

uniq testfile

还可以统计一下重复行的重复次数

uniq -c testfile

那不连续就不能用了吗?不是的。

当然是要先排下序了。

sort  testfile1 | uniq

等等,那为什么不用sort -u呢?好问题。因为sort -u并不能统计重复行的行数。

sort testfile1 | uniq -c

wc

在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。

wc testfile

想指定行数,就用wc -l,其实就是line的意思,如果统计字数呢?太聪明了,是-w, word的意思。

netstat

查看所有端口(进一步可以使用grep)

netstat -anp

nohup

部署服务当然要用nohup啦。

nohup command > myout.file 2>&1 &

其中nohup的意思是不挂断的运行,注意并没有后台运行的功能。就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行。但是它不会在后台运行。所以说我们要加上&使他在后台运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值