1. 命令帮助及补齐
1>命令帮助
1)--help
命令 --help #命令+参数--help 查看命令帮助
#示例: hostname --help
2)man
man man
#man一共9卷 不同卷中可能有相同的函数名
1 可执行程序或shell命令
2 系统调用(内核提供的函数)
3 库调用(程序库中的函数)
4 特殊文件(通常位于 /dev)
5 文件格式和规范,如 /etc/passwd
6 游戏
7 杂项(包括宏包和规范,如 man(7),groff(7))
8 系统管理命令(通常只针对root用户)
9 内核例程(非标准)
2>补齐
单击Tab #如果键入的单词只有一个相对应的命令,shell会自动给出相应的命令
双击Tab #如果键入的单词后有多个相对应的命令,shell会自动给出所有命令
2. 光标移动
ctrl+a #将光标移动到命令的最前
ctrl+e #将光标移动到最后面
ctrl+u #将该行已输入的代码清空
3. ssh
ssh连接远端服务器(实现的效果和SecurCRT或XShell类似):
ssh -p 2222 用户名@IP #不指定 -p参数 默认端口号为 22
例:ssh pl@10.219.10.39
4. 关机和重启
1)关机
shutdown -h now # 立刻关机
shutdown -h 5 #5分钟后关机
poweroff #立刻关机
2)重启
shutdown -r now #立刻重启
shutdown -r 5 #5分钟后重启
reboot # 立刻重启
5.磁盘
du #显示磁盘大小
df #查看磁盘使用情况
6. 压缩、解压
1)格式简介
linux自带压缩的格式: gzip 、bZip2
#ubuntu 压缩解压命令:
#gzip和gunzip只能进行单个文件压缩。
#gzip file #压缩文件file
#gunzip file #解压缩文件file
2)打包
tar命令用来打包。 #不指定j或z参数代表仅打包文件
tar cvf '指定的生成压缩包名' file1 dir2 #打包文件
3)压缩解压参数
j #bZip2压缩格式
z #gzip压缩格式
c #create创建
f #file创建压缩文件
v #显示压缩过程,去掉就直接显示压缩结果
x #解压
4)压缩命令
#指定的名字可以随便起,但一般以.gz命名。
tar zcvf '指定的生成压缩包名' file1 dir2 #将文件file1和文件夹dir2一起打包以gzip格式压缩,
tar jcvf '指定的生成压缩包名' file1 dir2 #将文件file1和文件夹dir2一起打包以bZip2格式压缩.
5)解压命令
-C #指定解压目录目录
tar zxvf '指定的压缩包名'
tar jxvf '指定的压缩包名'
tar jxvf a.gz -C test #解压到test文件夹下
6)其他压缩工具
①rar
1.安装
sudo apt-get install rar #ubuntu
yum install rar #centos
2.参数及命令
参数:
a :压缩参数 必填项
-r :递归
x :解压参数
压缩:
rar a -r '指定压缩名' dir1 file2 #将文件夹dir1和文件file2打包压缩
解压:
unrar x '指定压缩名'
unrar x '指定压缩名' test #解压到test文件夹下
②zip(新版linux自带)
1.参数
-r :递归
2.命令
压缩:
zip -r x.zip dir1 a.c #将文件夹dir1和文件a.c一起压缩为x.zip
解压:
unzip x.zip #解压文件x.zip
-d #指定解压目录
unzip x.zip -d test #将x.zip文件解压到test文件夹下
③zst
扩展名.zst表示存档由zstd压缩。
1.安装
sudo apt install zstd
2.解压:
可以按照如下命令进行解压:
tar -I zstd -xvf xxxx.tar.zst
7. 目录和文件相关命令
1)常用查找
ls #显示当前文件夹下所有文件及文件夹
ll 等同于 ls -l #显示当前文件夹下所有文件及文件夹 以及相应权限
ls -a #显示当前文件夹下所有文件,包含隐藏文件
ls -l 文件或文件夹名 #显示指定文件或文件夹名下文件的详细信息
ls -dl 文件夹名 #显示指定文件夹的详细信息
ls -R 文件夹名 #递归显示指定文件夹内的信息 必须是大写R。 R代表递归 recursion
ls -Rl 文件夹名 #递归显示指定文件夹内的详细信息
pwd #显示当前目录
2)目录增删改及移动
①切换目录
cd 文件夹名
cd . #代表当前目录
cd .. #回退到上级目录
cd - #回退到上次打开的目录
cd ~ #跳转到当前用户的家目录
②创建目录
mkdir aaa #在当前目录下创建一个名为aaa的目录
mkdir usr/aaa #在指定目录下创建一个名为aaa的目录,前提usr必须已经存在
mkdir -p aaa/bbb/ccc #创建多及目录
③删除目录
#使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。为了防止这种情况的发生,可以使用“i”选项来逐个确认要删除的文件。如果用户输入“y”,文件将被删除
#rm不仅可以删除目录,也可以删除其他文件或压缩包
参数:
-f #忽略不存在的文件,强制删除,不给出提示。
-r #指示rm将参数中列出的全部目录和子目录均递归地删除。
-i #进行交互式删除。
命令:
rmdir 文件夹 #删除空目录 非空会报错
rmdir -r 文件夹 #递归删除目录无论该文件夹是否为空,
rm -rf aaa #递归删除当前目录下的aaa目录(不询问)
rm -ri temp #递归删除当前目录下的aaa目录(询问)
④修改目录名
mv old new #将目录名old改为new
⑤移动目录
cp -r 目录名称 目录拷贝的目标位置 #-r代表递归
cp -a 目录名称 目录拷贝的目标位置 #-a代表所有文件
cp 文件名a 文件名b #以文件a创建文件b,b中数据同a
3)文件增删改
#linux系统文件类型:7+1
- #普通文件
d #目录文件
c #字符设备文件
b #块设备文件
l #链接文件,类似于windows下的快捷方式
p #表示该文件为命令管道文件。与shell编程有关的文件。
s #表示该文件为sock文件。与shell编程有关的文件,套接字。
未知文件类型。
#权限解读
#r表是读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute)
#三个一组,例如:rwx(Owner)r-x(Group)r-x(Other)
#硬链接解读详见下二
①创建文件
touch 文件名 #创建文件
touch 'x y' #文件名带特殊字符的创建方法1
touch x\ y #文件名带特殊字符的创建方法2 ,转义字符
cp 文件名a 文件名b #以文件a创建文件b,b中数据同a
②文件权限设置
1)权限相关参数
chmod #设置文件权限
u:user
g:group
o:others
a:all
+ :追加权限
- :去掉相应权限,其他保留
= :附上权限,并去掉其他权限
2)文字设定法:
chmod u+x a.c #给文件a.c加上用户的执行权限
chmod go+wx a.c #给文件a.c加上组别和其他的写和执行权限
chmod u+r,g+rwx,o+x a.c #给文件a.c加上相应权限
-、=的用法和上面的+一致,不做赘述。
3)数字设定法
r :4
w : 2
x : 1
chmod 471 a.c #相当于命令:chmod u+r,g+rwx,o+x a.c
chmod 777 a.c 等同于 chmod a=rwx a.c
相关用户组设置参照下4.
③查看文件内容
cat 文件名 #显示文件中内容输出到到终端
cat 不加文件名 #读标准输入,遇到\n后输出到终端,输入ctrl+d结束cat命令
more 文件名 #分屏显示文件内容(显示百分比),空格翻页 回车 往下显示一行 q 退出
less 文件名 #分屏显示文件内容(不显示百分比),空格翻页 q 退出
head 文件名 #默认显示前10行内容
head -15 文件名 #指定显示前15行内容
tail -15 文件名 #指定显示后15行内容
④查看文件属性
wc 文件名 #显示byte数、列数、字数
wc -c #显示字节数 同 wc -bytes 同 wc -chars
wc -l #显示列数 同 wc -lines
wc -w #显示字数 同 wc -words
od 文件名 #查看当前文件二进制格式显示结果 也可在od后指定不同进制显示 详情自行百度
du -h . #查看当前文件夹大小,以 M 或 K 显示
⑤移动文件
cp -r 目录及文件名称 目标位置 #-r代表递归
cp -a 目录 目标位置 #-a代表所有文件
cp 文件名a 文件名b #以文件a创建文件b,b中数据同a
4)tree
1.安装
需安装(ubuntu安装命令)sudo apt-get install tree
2.命令
tree #按树结构显示当前文件夹下目录和文件
8.用户及用户组
1)增
sudo adduser wangwu #添加用户wangwu
sudo addgroup g8 #添加用户组g8
2)删
sudo deluser wangwu #删除wangwu
sudo delgroup g8 #删除用户组g8
3)改,指修改文件权限
sudo chown wangwu a.c #将a.c文件的所有者变为wangwu用户
sudo chgrp g8 a.c #将文件a.c的组修改为g8
sudo chown nobody:nogroup a.c #ubuntu才能这么用。nobody:nogroup是系统自带的用户和组 将a.c所有者和组改为未知。
4)切换用户
su test #切换到test用户,但是路径还是/root目录
su - test : #切换到test用户,路径变成了/home/test
su : #切换到root用户,但是路径还是原来的路径
su - : #切换到root用户,并且路径是/root
su不足:如果某个用户需要使用root权限、则必须要把root密码告诉此用户。
退出返回之前的用户:exit
9. find
#以文件名作为搜索对象,查出的是一个结果集,并可以对相应的结果集进行操作
man find #查看命令帮助
1)参数
-maxdepth 1 #指定目录搜索层级
-name #指定搜索名
-type #指定搜索类型
-size #按文件大小搜索 不指定大小默认为b(block),1b=512bytes 单位区分大小写
-exec #将搜索结果执行某段命令
-ok #交互式将搜索结果执行某段命令
-xargs #管道命令参数,当结果集数量过大时,可以分片映射。
-print #指定find的结果打印出来以空格间隔(默认打印可以不写)。-print0将结果集改为由null间隔
#时间命令不常用 知道即可
-amin -atime #最后一次访问(仅仅是访问,没有改动)
-mmin -mtime #最后一次修改文件的时间
-cmin -ctime #最后一次对文件属性改变的时间,包括权限,大小,属性等等
2)用法示例
find ./ -name '*.c' #查找当前文件夹下所有名字为.c的文件。会嵌套出内层文件夹的相应文件
find ./ -maxdepth 1 -name '*.c' #查找当前文件夹下所有名字为.c的文件,不嵌套出内层文件夹的文件
find ./ -type 'l' #查找当前文件夹下文件类型为软连接的文件,会嵌套出内层文件夹的文件
find ./ -maxdepth 1 -type 'l' #查找当前文件夹下文件类型为软连接的文件,不嵌套出内层文件夹的文件
find ./ -size +1k -size -2M #找出当前文件夹下文件大于1K小于2M的文件。
find 结果集默认是以空格分开,修改为以null分开,需添加参数-print0
find ./ -maxdepth 1 -type f -print0 | xargs -print0 ls -l
find ./ -maxdepth 1 -type f -exec ls -l {} \; 等同于 find ./ -maxdepth 1 -type f | xargs ls -l
#find用管道命令,必须加参数xargs。exec是将结果集整体处理。使用xargs的效率更高,因为它是分块处理(如100万行结果集,会先执行一万再执行下一万)。
#查找出文件类型为f的文件,并给每个文件执行ls -l 命令。{}指代find ./ -maxdepth 1 -type f的结果集,\;中\为转义字符 ;为语法。
#示例:
#[root@bogon Desktop]# find ./ -maxdepth 1 -type 'f'
#./a.c
#./b.cpp
#[root@bogon Desktop]# find ./ -maxdepth 1 -type f -exec ls -l {} \;
#-r--rwx--x. 2 root root 7 Dec 31 02:14 ./a.c
#-rw-r--r--. 1 root root 7 Dec 31 02:14 ./b.cpp
find ./ -maxdepth 1 -type f -exec rm -r {} \; #删除当前文件夹下f类型的文件(不询问)
find ./ -maxdepth 1 -type f -ok rm -r {} \; #删除当前文件夹下f类型的文件(询问,n不执行,y执行)
#示例:
#[root@bogon Desktop]# find ./ -maxdepth 1 -type f -ok rm -r {} \;
#< rm ... ./a.c > ? n
#< rm ... ./b.cpp > ? n
10. grep
#以文件内容作为搜索对象,常配合管道 | 进行应用
grep 参数 查找条件 文件名
1)参数:
-c #只输出匹配行的计数。
-I #不区分大 小写(只适用于单字符。
-l #查询多文件时只输出包含匹配字符的文件名。
-n #显示匹配行及 行号。
-s #不显示不存在或无匹配文本的错误信息。
-v #显示不包含匹配文本的所有行。
2)common
grep -r '搜索内容' ./ -n #在当前文件夹下递归搜索包含指定内容的文件,并给出行号
grep 'test' d* #显示所有以d开头的文件中包含 test的行。
grep 'test' aa bb cc #显示在aa,bb,cc文件中匹配test的行。
grep '[a-z]\{5\}' aa #显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep -v test *test* #反向查找,通过"-v"参数可以打印出不符合条件行的内容
ps -ef | grep sshd #查找指定ssh服务进程
ps -ef | grep sshd | grep -v grep #查找指定服务进程,排除gerp身
ps -ef | grep sshd -c #查找指定进程个数
11. 进程相关
ps [选项]
1)选项:
-e 显示所有进程
-f 全格式
-h 不显示标题
-l 长格式
-w 宽输出
-r 只显示正在运行的进程
-a 即all,查看当前系统所有用户的所有进程,与 -e 具有同样的效用;
-u 以用户为主的进程状态
-x 显示没有控制终端的进程。就是不需要和用户进行交互
2)common
ps ajx #这个最常用,格式化格式显示所有进程。
ps aux #查看所有系统进程,和windows任务管理器类似
ps aux |grep 'abc' #查找进程中aux结果集中任一列包含abc的进程
ps -Lf 进程id #查看线程号
who #显示当前用户的进程
jobs #查看当前用户下后天运行的进程
fg 前台进程切换
bg 后台进程切换
kill
top 文字版的任务管理器
ls -l 程序名 #查看正在运行程序的大小
Ctrl+C #终止任务运行快捷键
killall programname #杀死多个后台运行程序。一次全杀死,这个就相当于先找到名字叫programname的所有程序对应的ID,然后循环执行kill ID的命令
kill ID #根据ID每次杀死一个
kill -9 ID #强制杀死进程
killall -信号数字 程序名 #指定执行某信号
程序命令 & #运行某个命令后面加&,代表后台运行
#示例:sleep 5 & #在后台运行sleep,而前台可以做任何操作;如果不加&,前台就需要等sleep 5秒后再进行相关操作
ps #ps 查看当前终端的进程,也就是当前terminal中运行的进程。
ps -ef #查看系统全部的进程
#如下ps结果列名:
#UID :启动进程的操作系统用户。
#PID :进程编号。
#PPID :进程的父进程的编号。
#C :CPU使用的资源百分比。
#STIME :进程启动时间。
#TTY :进程所属的终端。
#TIME :使用掉的CPU时间。
#CMD :执行的是什么指令。
ps -ef |more #查看系统全部的进程,结果分页显示。
ps -ef |grep book #查看系统全部的进程,然后从结果集中过滤出包含“book”单词的记录。程序员用得最多的指令就是这个了。
ps -ef |grep 进程名|wc #统计当前正在运行程序进程的个数,最后的wc就是统计行数的意思,而一行信息对应一个文件或程序
tail -f filename #查看文件动态变化,比如查看日志文件的实时写入状态
12. 线程相关
ps -xH #查看系统全部线程
ps -xH |grep threadname #查看系统全部的进程,然后从结果集中过滤出包含“threadname”单词的记录。
通过进程ID查看线程ID:
1.以线程数的形式查看
pstree -p $pid #1.以线程数的形式查看
2.动态形式查看线程数
top -Hp $pid #2.动态形式查看线程数,线程销毁时这个动态显示也会消失
13.网络编程相关
13.1 最大文件描述符数
分为 用户级限制 和 系统级限制。
1.用户级
ulimit -n #查看用户级文件描述符限制
#临时修改用户级限制,当前 session 有效:
ulimit -SHn max-file-number #将用户级文件描述符限制设定为 max-file-number,临时的,只在当前 session 有效
永久修改用户级文件描述符数限制,可以在 /etc/security/limits.conf 中加入如下两项:
hard nofile max-file-number #硬限制
soft nofile max-file-number #软限制
2.系统级
# 临时修改系统限制:
sysctl -w fs.file-max=max-file-number
#永久修改
在 /etc/sysctl.conf 中添加如下一项:
fs.file-max=max-file-number
之后执行 sysctl -p 使更改生效。
13.2 调整内核参数
/proc/sys #内核参数所在文件夹
sysctl -p #load the settings from a configuration file
1. /proc/sys/fs 目录下文件
sysctl -a #查看所有内核参数
#下面两个一般配合使用
/proc/sys/fs/file-max #系统级文件描述符限制。一般修改这个后,需把同时修改 /proc/sys/fs/inode-max
/proc/sys/fs/inode-max #设置为 /proc/sys/fs/file-max 值得 3~4 倍。
/proc/sys/fs/epoll/max_user_watches #一个用户能往epoll内核事件表中注册事件总量(所有epoll 实例)。
2. /proc/sys/net 目录下文件
#指定 listen 监听队列,能够建立完整连接从而进入 ESTABLISHED 状态的 socket 最大数目。
/proc/sys/net/core/somaxconn
#指定 listen 监听队列,能够转移至 ESTABLISHED 或 SYN_RCVD 状态的 socket 最大数目
/proc/sys/net/ipv4/tcp_max_syn_backlog
#含 3 个值,分别指定一个 socket 的 TCP 写 缓冲区的最小值、默认值和最大值。
/proc/sys/net/ipv4/tcp_wmem
#含 3 个值,分别指定一个 socket 的 TCP 读 缓冲区的最小值、默认值和最大值。
/proc/sys/net/ipv4/tcp_rmem
#可以修改这个参数来改变接收通告窗口大小
#指定是否打开 TCP 同步标签(syncookie)
/proc/sys/net/ipv4/tcp_syncookies
#同步标签通过启用 cookie 防止监听socket不停重复接收来自同一个地址的连接请求(同步报文段),
而导致 listen 监听队列溢出(所谓的 SYN 风暴)。
netstat -apn |grep 端口号 #查看网络通信时,客户端或服务端的状态
nc 127.0.0.1 10001 #模仿客户端连接服务器,TCP做的
netstat -an | grep 8080 #搜索指定端口8080
netstat -an #查看当前系统端口
cat /proc/sys/fs/file-max #查看当前计算机所能打开的最大文件个数。受硬件影响
ulimit -a #当前用户下的进程,默认打开文件描述符个数。缺省为 1024.
修改默认文件描述符个数:
1.打开 sudo vi /etc/security/limits.conf
2.写入
* soft nofile 65535 #设置open files的默认值。也可以直接通过命令修改,如下:
ulimit -n 10240 #将open files的值设置为10240. 每次都需要注销用户令其生效。
* hard nofile 65535 #命令修改上限。 soft nofile 后及 ulimit -n 后的值都不能超过此值。
Other.常用命令
ldd ./hello #list, dynamic, dependencies (列出动态库依赖关系)
strace ./mycp #跟踪打印出程序执行时的系统调用
cat /etc/shells #查看当前系统下有哪些shell
echo $SHELL #查看当前正在使用的shell
history #查看历史使用过的命令
sudo passwd 用户名 #设置用户密码
ifconfig #查看网卡信息
free -m #查看空闲内存
od -tcx filename #查看文件的16进制表示形式
od -tcd filename #查看文件的10进制表示形式
service network restart #重启网络
readlink 链接 #读链接本身
whoami #查看当前登录用户
which 命令 #显示可执行命令文件所在文件夹
alt+n #切换终端标签。n为1、2、3...
alias #给一段命令起别名
#示例:
#[root@bogon Desktop]# alias pg='ls -l'
#[root@bogon Desktop]# pg
#total 24
#-r--rwx--x. 1 root root 13 Jan 3 20:10 a.c
#-rw-r--r--. 1 root root 7 Dec 31 02:14 b.cpp
#lrwxrwxrwx. 1 root root 17 Dec 31 03:41 d.c -> /root/Desktop/a.c
echo #显示字符串
#示例:
#[root@bogon Desktop]# echo aaa
#aaa
umask #掩码,设定权限用,详情百度
env #显示系统所有环境变量
#示例:
#[root@bogon Desktop]# env | grep SHELL
#SHELL=/bin/bash
Other. OtherConfig
1.防火墙及配置
1.1 centos
注:CentOS7及以后的版本适用此命令,之前的版本请自行百度
#安装防火墙,如果没有安装防火墙,下面的命令都会无效
sudo apt install firewalld
------------------------查看防火墙的命令----------------------------
#查看防火墙的版本
firewall-cmd --version
#查看防火墙的状态。
firewall-cmd --state
#查看防火墙服务状态(普通用户可执行)
systemctl status firewalld
#查看防火墙全部的信息
firewall-cmd --list-all
#查看防火墙已开通的端口
firewall-cmd --list-port
#查看防火墙已开通的服务
firewall-cmd --list-service
#查看全部的服务列表(普通用户可执行)
firewall-cmd --get-services
#查看防火墙服务是否开机启动。
systemctl is-enabled firewalld
------------------------配置防火墙的命令----------------------------
# 启动
systemctl start firewalld
# 重启
systemctl restart firewalld
# 关闭
systemctl stop firewalld
# 开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 移去80端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 开放5000-5500之间的端口
firewall-cmd --zone=public --add-port=5000-5500/tcp --permanent
# 移去5000-5500之间的端口
firewall-cmd --zone=public --remove-port=5000-5500/tcp --permanent
# 开放ftp服务
firewall-cmd --zone=public --add-service=ftp --permanent
# 移去http服务
firewall-cmd --zone=public --remove-service=ftp --permanent
#重新加载防火墙配置(修改配置后要重新加载防火墙配置或重启防火墙服务)
firewall-cmd --reload
# 启用服务
systemctl enable firewalld
# 禁用服务
systemctl disable firewalld
1.2 ubuntu
sudo ufw status #检查 UFW 的状态
sudo ufw allow 7722/tcp #允许连接通过那个端口
sudo ufw allow 7100:7200/tcp #允许端口从7100到7200 支持 tcp
sudo ufw allow 7100:7200/udp #允许端口从7100到7200 支持 udp
sudo ufw allow from 64.63.62.61 #允许指定 IP 地址访问指定端口
sudo ufw allow from 64.63.62.61 to any port 22 #允许给定 IP 访问指定的端口,使用to any port关键字加上端口号
sudo ufw disable #关闭开机自启,并关闭服务
sudo ufw enable #开启开机自启,并开启服务
2. 查看以及执行.sh文件方法(测试并发程序时常用)
----------------------------------查看.sh文件---------------------------------------
#1.(必须先装有vim编辑器)在bash窗口中输入:
vi 文件名.sh
----------------------------------执行.sh文件方法-----------------------------------
#1.在bash窗口,利用命令执行
sh 文件名.sh
#2.cd到.sh文件的目录下,然后
./文件名.sh