写在前面
都知道,一名开发工作者,如果不了解Linux那么一定是不合格的,大家在工作中多多少少会使用到Linux,但是很多Linux命令又不能很好的记忆,现在逐渐总结一下,以方便以后查看,也方便大家学习。
基本操作
- Linux关机,重启
#关机
#关机
shutdown -h now
#重启
shutdown -r now
- 查看系统cpu信息
#查看系统内核信息
uname -a
#查看系统内核版本
cat /proc/version
#查看当前用户环境变量
env
cat /proc/cpuinfo
#查看有几个逻辑cpu,包括cpu型号
cat /proc/cpuinfo |grep name |cut -f2 -d: | uniq -c
#查看有几个cpu,每个分别几核
cat /proc/cpuinfo |grep physical |uniq -c
#查看当前cpu运行在32bit还是64bit模式下,如果运行在32bit下,也不代表支持64bit
getconf LONG_BIT
#结果大于0,说明支持64bit计算,lm指long mode,支持lm则是64bit
cat /proc/cpuinfo |grep flags |grep 'lm' |wc -l
- 建立软连接
ln -s /usr/local/jdk1.8/ jdk
- rpm相关
#查看是否通过rpm安装了该软件
rpm -qa |grep 软件名
- sshkey
#创建sshkey
ssh-keygen -t rsa -C your_email@wxample.com
#id_rsa.pub的内容拷贝到要控制的服务器的 /home/username/.ssh/anthorized_keys中。如果没有,则新建(.ssh权限为700,quthorized_keys权限为600)
- 命令重命名
#在各个用户的.bash_profile中添加重命名配置
alias ll='ls -alF'
- 同步服务器时间
sudo ntpadate -u ntp.api.bz
- 后台运行命令
#后台运行,并且有nohup.out输出
nohup xxx &
#后台运行,不输出任何日志
nohup xxx > /dev/null &
#后台运行,并且将需哦呜信息做标准输出到日志中
nohup xxx >out.log 2>&1 &
- 强制活动用户推出
#命令来完成强制挥动用户推出,其中TTY表示终端名称
pkill -kill -t [TTY]
- 查看命令路径
which <命令>
- 查看进程所有打开最大fd数
ulimit -n
- 配置dns
vim /etc/resolv.conf
- nslookup查看域名路由表
nslookup google.com
- last 最近登录信息列表
#最近登录的5个账号
last -n 5
- 设置固定ip
ifconfig em1 192.168.5.177 netmask 255.255.255.0
- 查看进程内加载的环境变量
#也可以 cd /proc目录下,查看进程内存中加载的东西
ps eww -p xxxxx(进程号)
- 查看进程树找到服务器进程
ps auwxf
- 查看进程启动路径
cd /proc/xxx(进程号)
ls -all
#cwd 对应的应该是启动路径
- 添加用户,配置sudo
#新增用户
useradd 用户名
passwd 用户名
#增加sudo的权限
vim /etc/sudoers
#修改文件里面的
#root ALL=(ALL) ALL
#用户名 ALL=(ALL) ALL
- 强制关闭进程名包含XXX的所有进程
ps aux|grep xxx |grep -v grep | awk '{print $2}' |xargs kill -9
- 磁盘、文件、目录相关操作
#normal模式下 g代表全局,x代表查找的内容,y表示替换后的内容
:%s/x/y/g
#normal模式下
0 光标移动到行首(数字0)
$ 贯标移至行位
shift + g #条到文件最后
gg #调到文件头
#显示行号
:set nu
#去除行号
:set nonu
#检索
/xxxx(检索内容) #从头检索,按n查找下一个
?xxxx(检索内容) # 从尾部检索
#打开制度文件,修改后需要保存时(不用切换用户即可保存的方式)
:w !sudo tee % #在normal模式下
#查看文件、目录、磁盘基本信息
mount
#查看磁盘分区信息
df
# 查看目录及子目录的大小
du -H -h
#查看当前目录下各个文件,文件夹占了多少空间
du -sh
- wc命令
#查看文件里有多少行
wc -l filename
#查看文件里有多少个Word
wc -w filename
#查看文件里最长的那一行是多少个字
wc -L filename
#统计字节数
wc -c
- 常用压缩命令
#压缩命令
tar czvf xxxx.tar 压缩目录
tar -r xxx.zip 压缩目录
#解压命令
tar zxvf xxx.tar
#解压到指定文件夹
tar zxvf xxx.tar -C /xxx/yyy/
unzip xxx.zip
- 变更文件所属用户,用户组
chown eagleye.eagleye xxx.log
- cp/scp/mkdir
#复制
cp xxx.log
#复制并强制覆盖同名文件
cp -f xxx.log
#复制文件夹
cp -r xxx(源文件夹) yyy(目标文件夹)
#远程复制
scp -p ssh端口 username@10.10.10.101:/home/username/xxx /home/xxx
#级联创建目录
mkdir -p /xxx/yyy/zzz
#批量穿件文件夹,会在test、main下都创建Java,resources文件夹
mkdir -p src/{test,main}/{java,resources}
- 比较两个文件
diff -u 1.txt 2.txt
- 日志输出的字节数,可以用作性能测试
#如果做性能测试,可以每执行一次王日志里面输出".",这样日志中的字节数就是实际的性能测试运行的次数,还可以看见实时三维速率
tail -f xxx.log |pv -bt
- 查看、去除特殊字符
cat -v xxx.sh #查看特殊字符
#去除特殊字符
sed -i 's/^M//g' env.sh 去除文件的特殊字符,比如^M:需要这样输入ctrl+v+enter
#处理因系统原因引起的文件中特殊字符的问题
#可以转换为该系统下的文件格式
cat file.sh >file.sh_bak
#先将file.sh中文件内容复制下来然后运行,然后粘贴内容,最后ctrl+d保存退出
cat > file1.sh
#在vim中通过如下设置文件编码和文件格式
:set fileencodings=utf-8 ,然后w(存盘)一下即可转化为utf-8格式
:set fileformat =unix
#在mac下使用dos2unix进行文件格式转化
find . -name #*.sh" |xargs dos2unix
- tee重定向的同时输出到屏幕
awk '{print $0}' xxx.log |tee test.log
检索相关
- grep
#反向匹配,查找不包含xxx的内容
grep -v xxx
# 排除所有空行
greo -v '^/pre>
#返回结果 2,则说明第二行是空行
grep -n }^$' 111.txt
#查询艺ABC开头的行
grep -n "^abc" 111.txt
#同时列出该词语出现在文章的第几行
grep 'xxx' -n xxx.log
#计算一下该字符串出现的次数
grep 'xxx' -c xxx.log
#比对的时候,不计较大小写的不同
grep 'xxx' -i xxx.log
- awk
#以 ':' 为分隔符,如果第五域有user则输出该行
awk -F ':' {if ($5 ~ /user/) print $0}' /etc/passwd
#统计单个文件中某个字符(串){中文无效}出现的次数
awk -v RS='character' 'END {print --NR}' xxx.log
- find 检索命令
#在目录下找后缀是.mysql的文件
find /home/eagleye -name '*.mysql' -print
#会从/user目录下开始往下诏,找到最近三天之内存取过的文件
find /usr -atime 3 -print
#会从usr目录下开始往下找,找最近5天之内修改过的文件
find /usr -ctime 5 -print
#会从doc目录开始往下找,找jacky的、文件名开头是j的文件
find /doc -user jacky -name 'j*' -print
#会从doc目录开始往下找,找寻文件名是ja开头或者ma开头的文件
find /DOC \(NAME 'JA*' -O- -name 'ma*' \) -print
#会从/doc目录开始往下找,找到凡是文件名结尾为bak的文件,把他删除,-exec选项是执行的意思,rm是删除命令,{}表示文件名,“\;”是规定的命令结尾
find /doc -name '*bak' -exec rm {} \;
网络相关
- 查看什么进程使用了该端口
lsof -i:port
- 获取本机ip地址
/sbin/ifconfid -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
- iptables
#查看iptables状态
service iptables status
#要封停一个ip
iptables -I INPUT -s ***.***.***.*** -j DROP
#要解封一个ip
iptables -D INPUT -s ***.***.***.*** -j DROP
备注:参数I是表示Insert(添加),-D表示Delete删除。后面跟的是规则,INPUT表示入站,***。***。***。***表示要封停的IP,DROP表示放弃连接
#开启9090端口的访问
/sbin/iptables -I INPUT -p tcp --dport 9090 -j ACCPET
#防火墙开启、环比、重启
/etc/init.d/iptables status
/etc/init.d/iptables start
/etc/init.d/iptables stop
/etc/init.d/iptables restart
未完待续