我的Linux常用命令(持续更新)

Posted by Steve on July 11, 2018

最近在通过《鸟哥的Linux私房菜》系统得学习linux。可是工作中还是要用Linux的,有些命令啥的就是现学现用,这个笔记就是记录这个的。

常规

命令 简介 备注
pwd 显示当前路径  
mv 重命名或移动 -f 强制移动,若有重名文件直接覆盖
cp 复制(文件名支持通配符) -r 递归将子文件全部复制
mkdir 创建文件夹 -p 递归创建所有需要的目录
/sbin/ifconfig 获取ip地址  
df -h 以磁盘分区为单位查看磁盘使用量  
du -sh ./ 获取当前目录的大小  
du -h ./ 获取当前目录的下所有文件夹的大小(含子文件夹)  
rz/sz 利用ssh协议在Xshell上传输文件  
netstat -a:将目前系统上所有的链接、监听、Socket数据都列出来
-t:列出tcp网络数据包的数据
-u:列出udp网络数据包的数据
-n:不列出进程的服务名称,以端口号来显示
-l:列出目前正在网络监听listen的服务
-p:列出该网络服务的进程 PID
列出目前系统上已在监听的网络连接及其PID:netstat –tlnp
netstat -tunlp | grep 8005
查询linux系统的版本 查看电脑和操作系统的信息:uname -a
查询内核版本:cat /proc/version
查询发行版本:cat /etc/issue
查询发行版本:lsb_release -a(适用于所有的linux,包括Redhat、SuSE、Debian等发行版,但是在debian下要安装lsb)
 
ps -ef|grep java 查找“java”相关的进程信息  
ps -ef |grep nginx |awk ‘{print $2}’|xargs kill -9 杀死nginx相关的所有进程  
grep -r xixi /home 显示/home目录下的文件(包含子目录)包含xixi的行(去掉-r则不查子目录)  
jar -xvf game.war 解压game.war包到当前目录  
which python 查找python的安装路径  
alias vi 通过alias来查找别名对应的命令  
echo > catalina.out 清空日志文件  
find /export -size +1000k 查找指定目录下(默认递归),大小大于1000k的文件  
find /export/ -name ‘log’ 指定目录下(默认递归),查找名为log的文件,此时支持通配符  
find的两个参数一起用来清理日志 for i in “find /export/Domains -name ‘*.log’ -size +10000k”; do echo > $i; done 忘了是不是这么写的了,是双引号包裹的吗?懵逼了
rm 慎用,删除文件  
rm -rf /var/log/ 完全删除该文件夹  
chmod -R 777 将文件夹以及子文件夹的权限都设置为777,R不能小写。 chmod -R 777 download  
date 获取系统当前时间  
date -s “2018-2-6 14:25:07” 设置系统时间,注:admin可能没有权限  
history 可以打印出之前所输入过的命令,然后用!123就可以指定第123号命令  
truncate 将文件变为指定大小,可用于创建测试用的垃圾文件,或用于清理日志 find ./ -name ‘*.out’ | xargs truncate -s 0
yum -y install centos下安装软件 yum -y install git
ln -s /export/logs/xixixi/ logs 在当前目录创建一个软链接logs关联指定路径  
\Enter 将超长的命令转为多行,注意“\”和回车之间没有空格等  

账户,修改密码相关

命令 简介 备注
id 查看当前登录用户的的信息  
passwd admin 修改admin用户的密码,如果当前用户是root用户的话,直接输入passwd即可  
echo “123” | passwd ––stdin root 非常方便快捷的修改密码的方式。 缺点是别人可能用history来获取密码,同时密码中不能包含单引号和双引号。并且某些发行版不提供––stdin这个参数。
w 查看当前用户  
who 命令查看主机上的用户  
whoami 查看当前登录的用户  
lastlog 登录日志  
su 用户切换 su rootmima 切换root身份
su -rootmima 切换root身份及shell环境
su admin 切换admin用户

压缩包

命令 简介 备注
tar -czvf test.tar.gz a 压缩 a.c文件为test.tar.gz  
tar -xzvf test.tar.gz 解压缩  
zip -r mydata.zip mydata 把当前目录下面的mydata目录压缩为mydata.zip  
unzip 解压zip文件。unzip xx.zip  

裁切字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
myvar="boobar";
${myvar:3}   #输出bar
${myvar:3:2}    #输出ba
${myvar: -4}    #输出obar 注:中间的空格是必须的
${variable#word}    #从字符串开头使用非贪婪模式匹配
phone="666-657-2657"
${phone#*-}    #输出657-2657
${variable##word}    #从字符串开头使用贪婪模式匹配
${phone##*-}    #输出2657
${variable%word}    #从字符串结尾使用非贪婪模式匹配
${phone%-*}    #输出666-657
${variable%%word}    #从字符串结尾使用贪婪模式匹配
${phone%%-*}    #输出666

Nginx

命令 简介 备注
/export/servers/nginx/sbin/nginx -s reload 重启  
/export/servers/nginx/sbin/nginx 启动  
/export/servers/nginx/sbin/nginx -s stop 关闭  

less

命令 简介 备注
less 按页查看文件内容,同时具有向上或向下的查询功能  
less xix.sh 进入less程序。/字符串,为向下查找。?字符串,为向上查找。  
ll | less 针对文件夹内文件很多的情况,这样就可以显示全了  

SCP

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令。本地←→远程双向拷贝。前一个路径为源文件,后一个路径为目标文件

命令 简介 备注
scp -P 2181 /etc/hosts root@10.182.74.205:/etc/ 将本机的host文件通过2181端口以root权限复制到指定机器的/etc/目录下  
scp -P 2181 root@10.182.74.205:/etc/hosts /root 将远程服务器的host文件通过2181端口复制本机/root目录下  
scp -r -P 2181 root@10.182.74.205:/root /root 将远程服务器/root下的所有文件及文件夹通过2181端口复制到本机/root目录下  

lrzsz

lrzsz官网
lrzsz是一个unix通信套件提供的X,Y,和ZModem文件传输协议。
在centos中安装yum install lrzsz
如果服务器不能连接外网的话,就通过该地址下载后通过yum install lrzsz-0.12.20-27.1.el6.x86_64.rpm来进行安装。

命令 简介 备注
sz /home/admin/log1.log 将log文件从服务器下载到本机  
rz 页面弹出文件选择的页面,可以上传文件  

vim

按道理,vim应该抽空做专题的,不过先暂时做个记录吧。拒绝重复造轮子,需要学习vim的朋友,直接去鸟站第九章、vim 程式編輯器看完,就从入门到精通了。当然也可以去vim的官网上找到一些有用的资料。我这里只是记录下我的笔记。

vim有12种编辑模式,其中6种是basic modes。Normal mode、Visual mode、Select mode、Insert mode、Cmdline mode、Ex mode

Normal mode

光标移动,复制粘贴,批量删除等

命令 功能
h,j,k,l 移动光标⬅️,⬇️,⬆️,➡️
数字 hjkl方向键 向指定方向移动一定步数
Ctrl f 向下翻页
Ctrl b 向上翻页
数字 space 向右步进指定数字的步数
0 或 Home 移动到该行最前
$ 或 End 移动到该行最后
G 移动到这个文件的最后一行
数字 G 移动到这个文件的第“数字”行
x 等同于delete
X 等同于backspace
dd 删除光标所在行
d1G 删除光标所在行至第一行的所有数据
dG 删除从光标所在行到最后一行的所有数据
yy 复制光标所在行
数字 yy 复制光标所在的及向下的“数字”行
p 或 P 粘贴
u 撤销(等同于Microsoft Office中的Ctrl z)
Ctrl r 恢复撤销(等同于Microsoft Office中的Ctrl y)

Cmdline mode

搜索替换

命令 功能
/word 向下查找“word”字符串
?word 向上查找“word”字符串
n 继续执行上一次的查找
N 反向执行上一次的查找
10,15s/word1/word2/g 在10至15行中查找“word1”并将其替换为“word2”
1,$s/word1/word2/gc 全局查找“word1”并将其替换为“word2”
1,$s/word1/word2/g 全局查找“word1”并将其替换为“word2”,但是每一次替换前都需要确认。

环境更改

命令 功能
set nu 显示行号
set nonu 取消显示行号
syntax on 语法高亮开
syntax off 语法高亮关

文件保存等

命令 功能
w 保存
w! 强制保存
q 退出
q! 强制退出
wq 保存并推出
wfile2 将文件另存为“file2”
rfile 将文件”file”中的内容追加到目前光标所在位置的后面
! ls /home 暂时离开当前编辑页并执行一个linux命令

多文件编辑

命令 功能
files 列出目前vim打开的所有文件
n 编辑下一个文件
N 编辑上一个文件

多窗口编辑

命令 功能
sp 当前文件多窗口显示
sp /etc/hosts 在新窗口中打开新文件
ctrl w j或k 光标焦点在上下窗口中移动,注意ctrl和w放开后再按方向键
ctrl w q 结束当前窗口

Visual mode、Select mode

命令 功能
v 字符选择
V 行选择
Ctrl v 块选择
y 将被选择部分复制
d 将被选择部分删除

job control

命令 功能
ls -lh & &用以将当前命令放到后台执行,注意stdout和stderr的重定向
Ctrl z 将程序暂停
Ctrl c 将程序强行停止
jobs -l 查看后台的工作状态
fg %1 将后台中的第一个任务拿到前台来执行
bg %2 将后台暂停的第2个任务变为后台执行

查看系统资源占用相关命令

鸣谢1 鸣谢2

命令 简介 备注
free 总体内存占用的查看 1.默认按kb显示,free -m来用mb表示
2.Mem行,total=used+free,其中buffers和cached虽然计算在used内, 但其实为可用内存。
3.下一行是刨除buffers和cache的结果,是真实的可用内存。
Swap:内存交换区的使用情况。
ps auxw | head -1;ps auxw|sort -rn -k4|head -5 查看内存占用前五的进程  
ps auxw|head -1;ps auxw|sort -rn -k3|head -5 查看CPU占用前五的进程  
top 查看系统整体的负载情况  
ps -ef | grep xixi | grep -v ‘grep’ | awk ‘{print $2}’ 输出xixi相关的进程的PID 可以配合for循环加kill -9就清理调相关的进程

查看CPU信息

1
2
3
4
5
6
7
8
9
10
11
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

CentOS7的默认防火墙firewall

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看firewall服务状态
$ systemctl status firewalld
# 查看firewall的状态
$ firewall-cmd --state
# 启动firewalld.service服务
$ service firewalld start
Redirecting to /bin/systemctl start mysqld.service
# 重启firewalld.service服务
$ service firewalld restart
Redirecting to /bin/systemctl restart mysqld.service
# 关闭firewalld.service服务
$ service firewalld stop
Redirecting to /bin/systemctl stop mysqld.service
# 查看防火墙规则
$ firewall-cmd --list-all
# 查询端口是否开放
$ firewall-cmd --query-port=8080/tcp
# 开放80端口
$ firewall-cmd --permanent --add-port=80/tcp
# 移除端口
$ firewall-cmd --permanent --remove-port=8080/tcp
# 重启防火墙(修改配置后要重启防火墙)
$ firewall-cmd --reload

ubuntu18.04磁盘初始化及挂载

参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
root@ubuntu:~# fdisk -l
Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xb913566a

Device     Boot Start      End  Sectors Size Id Type
/dev/vda1  *     2048 83884031 83881984  40G 83 Linux


Disk /dev/vdb: 500 GiB, 536870912000 bytes, 1048576000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
root@ubuntu:~# fdisk /dev/vdb

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xe0b399a9.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-1048575999, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-1048575999, default 1048575999): 

Created a new partition 1 of type 'Linux' and of size 500 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@ubuntu:~# q

Command 'q' not found, but can be installed with:

snap install q                       # version 1.6.3-1, or
apt  install python-q-text-as-data 
apt  install python3-q-text-as-data

See 'snap info q' for additional versions.

root@ubuntu:~# fdisk -l
Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xb913566a

Device     Boot Start      End  Sectors Size Id Type
/dev/vda1  *     2048 83884031 83881984  40G 83 Linux


Disk /dev/vdb: 500 GiB, 536870912000 bytes, 1048576000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe0b399a9

Device     Boot Start        End    Sectors  Size Id Type
/dev/vdb1        2048 1048575999 1048573952  500G 83 Linux
root@ubuntu:~# df -lh
Filesystem      Size  Used Avail Use% Mounted on
udev             32G     0   32G   0% /dev
tmpfs           6.3G  8.8M  6.3G   1% /run
/dev/vda1        40G  4.5G   33G  13% /
tmpfs            32G   16K   32G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            32G     0   32G   0% /sys/fs/cgroup
tmpfs           6.3G     0  6.3G   0% /run/user/0
root@ubuntu:/mnt# mkfs.ext4 /dev/vdb1
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 131071744 4k blocks and 32768000 inodes
Filesystem UUID: 21054d6d-ab15-4766-83e5-f85479f5124c
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done     

root@ubuntu:/mnt# 
root@ubuntu:/mnt# mount /dev/vdb1 /mnt/vdb1
root@ubuntu:/mnt# df -lh
Filesystem      Size  Used Avail Use% Mounted on
udev             32G     0   32G   0% /dev
tmpfs           6.3G  8.8M  6.3G   1% /run
/dev/vda1        40G  4.5G   33G  13% /
tmpfs            32G   16K   32G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            32G     0   32G   0% /sys/fs/cgroup
tmpfs           6.3G     0  6.3G   0% /run/user/0
/dev/vdb1       492G   73M  467G   1% /mnt/vdb1
root@bianyuanyun:/mnt# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/vda1 during installation
UUID=af9f46d3-4314-44ae-b2bf-baba80ae6dfd /               ext4    errors=remount-ro 0       1
/dev/vdb1 /mnt ext4 defaults 0 1

批量解压文件到压缩包文件名的文件夹中

1
2
3
4
for i in `ls /data/app/mobile/lib`
do
unzip $i -d /data/app/mobile/lib/${i%-*}
done

参考截取字符串

更新记录

  • 2020年9月:增加firewall
  • 2020年11月:整理vim
  • 2021年1月:批量解压
  • 2022年1月:查看CPU信息、ubuntu18.04磁盘初始化及挂载