Linux系列——常用命令与shell函数总结

简介: Linux系列——常用命令与shell函数总结

前言

Linux系统:CentOS6.7


很多命令可以在linux通用,但是有些可能有版本限制,如果使用这些命令没有找到的话,可以尝试搜索其他文章


查看linux系统版本  cat /etc/redhat-release


一、主机相关命令

查看主机名:hostname   或者  export


查看系统版本:cat /etc/redhat-release


修改主机名:vi /etc/sysconfig/network


查看ip地址:ifconfig (CentOS7用 ip a)


修改ip地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0         hostnamectl set-hostname 主机名 (即为临时和永久生效)


修改ip与主机名的映射关系:vi /etc/hosts


关闭iptables并设置其开机启动/不启动:service iptables stop


重启:reboot


关机:halt


查看当前服务器中的java进程:jps类似于ps -ef | grep java


结束进程 :kill -9 进程号(进程号可以根据ps -ef | grep ...获取到)



CentOS7:


查看启动项:systemctl list-unit-files


过滤查看启动项:systemctl list-unit-files | grep enable


过滤查看某服务名:systemctl list-unit-files | grep zabbix


查看所有建立的TCP连接: netstat -antp


查看监听(Listen)的端口: netstat -lntp


查看所有运行中的服务的详细信息 :netstat -tulpn


显示所有进程:ps -ef


显示使用内存的进程:ps -aux


查看内存使用说明 (shift+m 按照排名):top


二、防火墙

CentOS7:


systemctl stop firewalld  临时关闭


systemctl disable firewalld  然后reboot 永久关闭


systemctl status  firewalld  查看防火墙状态


service firewalld status  查看防火墙状态


CentOS6:


查看防火墙状态:service iptables status


查看防火墙状态:/etc/init.d/iptables status


查看防火墙是否开机启动:chkconfig iptables –list



设置防火墙开机启动:chkconfig iptables on


设置防火墙开机不启动:chkconfig iptables off



关闭防火墙指令:/etc/init.d/iptables stop


永久关闭防火墙指令:chkconfig iptables off



开启防火墙指令:/etc/init.d/iptables start


永久开启防火墙指令:chkconfig iptables on


重启服务:service iptables restart


三、修改开机等待时间

vi /boot/grub/menu.lst


四、启动Linux默认进入命令行模式

修改/etc/inittab,


将id:5:initdefault:修改为id:3:initdefault:


设置后台服务的自启配置


chkconfig   查看所有服务器自启配置



开源的,安全的系统,通常使用命令行界面,


命令名称 --help:列出该命令的使用方式


man 命令名称:列出该命令的使用方式


cd 目录:切换到某个目录下


cd ..:切换到父目录


pwd:查看当前目录(print working directory)


五、文件查询命令

find / -name my*:在根目录(/)下查找以my开头的文件


whereis :查询某个命令所在目录


grep:查询某个字符串所在行(列出本行所有内容)


六、文件操作命令

ls :列出所有目录和文件的名字


ls -l:竖着列出所有文件详细信息


ll:ls -l 的缩写


cp:复制文件


touch:创建文件


mkdir:创建文件夹


rm:删除文件


rmdir:删除空的文件夹


rm -r:递归删除文件,询问


rm -rf:直接删除文件,不询问(f:force)


rm命令慎用,可能会毁掉一个公司!解决方案mv 文件(夹) /tmp


mv:移动文件或者重命名


rename:重命名(批量命名:rename .repo.bak .repo *)


七、文件显示命令

more:分页查询(空格 下翻一页  b 上翻一页  q 退出)


less:分页查询 (空格 下翻一页  b 上翻一页  q 退出  ↑上翻一行 ↓下翻一行  /..搜索)


cat:列出文件全部内容


tac:逆序列出文件内容(按照行逆序)


head -n 文件名:列出前n行


tail -n 文件名:列出后n行(查日志用)


tail -f install.log ---->只在同一个文件跟踪(文件大于64M会产生新文件)


tail -F install.log---->按照文件名跟踪


wc:打印出多少字节,多少字符,多少行


八、文件编辑命令

vi:编辑文件,如果没有文件就创建文件并编辑


从编辑模式切换到命令模式使用“esc”键,


连续两次大写Z退出命令模式


从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键


a:即append,添加内容,在当前字符后添加文本;


A:在行末添加文本;


i:在当前字符前插入文本;


I:在行首插入文本;


o:在当前行后面插入一空行;


O:在当前行前面插入一空行;


:wq:在命令模式下,执行存盘退出操作;


:w:在命令模式下,执行存盘操作;


:w!:在命令模式下,执行强制存盘操作;


:q:在命令模式下,保存修改执行退出vi操作;


:q!:在命令模式下,不保存修改执行强制退出vi操作;


dd:删除一行


ln 3.txt 4:为3.txt创建链接4(硬链接,相当于复制了一份,删除3.txt后,4依然存在)


ln -s 3.txt 5:为3.txt创建链接5(软链接,相当于快捷方式,删除3.txt后,5不存在)


九、权限:

r是读,w是写,x是可执行


chmod +x 文件名:给文件添加可执行权限(所有用户都加)


chmod -x 文件名:给文件去掉可执行权限(所有用户都去掉)


chmod u+x 文件名:只给自己加权限


chmod g+x 文件名:给同组其他人加权限


chmod o+x 文件名:给其他人加权限


chmod 755 文件名:755转为2进制为111101101对应的为 rwxr-xr-x,从而修改所有用户的权限


十、用户:

useradd 用户名:添加用户(添加之后在home目录下面多一个用户目录)


passwd 用户名:设置密码


groupadd:添加一个组


useradd testuser -g group:在某个组下添加用户


usermod -g group testuser :修改用户所在的组


userdel:删除用户(home下的目录没有删除)


su:切换用户


exit:返回上一目录


chown 用户名 文件名:改变文件的所有者:



为用户配置sudo权限:


用root编辑 vi /etc/sudoers


在文件的如下位置为shuhao添加一行


root        ALL=(ALL)     ALL


shuhao     ALL=(ALL)     ALL


然后shuhao用户就可以用sudo来执行系统级别的指令


十一、SSH

两个linux系统远程复制文件:


scp 文件名 用户名@主机ip:目标文件夹


ssh免密登录命令:


第一步:ssh-keygen (生成密钥对,提示时回车即可)


第二步:ssh-copy-id 192.168.1. (复制公钥到目标主机)



linux与其他机器之间共享文件:


在Linux中创建ftp server,通过windows往上传


开启ftp服务:service vsftpd start


停止ftp服务:service vsftpd stop


判断是否开启:ftp localhost


退出服务:bye


查询linux的IP:ifconfig


关闭linux防火墙:service iptables stop



ftp登录:anonymous


设置vsftpd开机自启动:chkconfig vsftpd on



远程管理服务器:通过ssh管理,可以加密


十二、下载命令

wget http://


十三、上传安装包到服务器

上传:如果不cd到指定目录,则上传到当前用户的主目录\root\


可以使用图形化工具,如filezilla

可以使用sftp工具:alt+p调出后,用put命令上传

下载:lcd到本地的目标路径


sftp> lcd d:/  


sftp> get /home/jdk-7u45-linux-x64.tar.gz


十四、查看网络端口

netstat -nltp


十五、yum

yum install 全部安装

yum install package1 安装指定的安装包package1

yum groupinsall group1 安装程序组group1


yum update 全部更新

yum update package1 更新指定程序包package1


yum list 显示所有已经安装和可以安装的程序包

yum list package1 显示指定程序包安装情况package1


yum clean packages 清除缓存目录下的软件包

yum clean headers 清除缓存目录下的 headers

yum clean oldheaders 清除缓存目录下旧的 headers

yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers


十六、rpm

直接安装  rpm -ivh 包名


忽略报错 rpm -ivh --force 包名


查询已安装的rpm列表 rpm -qa | grep xx


卸载 rpm -e 包名


强制卸载 rpm -e --nodeps


十七、Shell变量定义

定义变量和常量不能有空格,用到空格时用双引号


系统变量:echo $HOME  $PWD  $SHELL  $USER


查看环境变量:echo $path


显示当前shell中所有变量:set


unset:撤销当前变量


双引号不会脱意,单引号会脱意


export 可以把变量提升为全局变量,如export JAVA_HOME=/usr/local/jdk1.7


source /etc/profile 重新把变量执行一遍



A=`ls -la`反引号:运行里面的命令,并把结果返回给变量A


A=$(ls -la)等价于反引号



$? 表示上一个命令退出的状态,true是0,false是1


$$表示当前进程编号


$0表示当前脚本名称


$n表示位置变量(n代表数字,n>=1)


$#表示变量的个数,常用语循环


$*和$@都表示参数列表


区别:当他们被双引号包含时,”$*”会将所有的参数作为一个整体,以”$1$2...$n”的形式输出所有参数;”$@”会将各个参数分开,以”$1””$2”...”$n”的形式输出所有参数


运算符:

格式:`expr m + n` 或 $((m+n))


注意:expr运算符之间要有空格


如:a=$(((2+3)*4))


for循环:

第一种


for N in 1 2 3


do


echo $N


done


或 for N in 1 2 3;do echo $N;done


或 for N in {1..3};do echo $N;done


第二种:


for ((i = 0;i <= 5;i ++))


do


echo "welcome $i times"


done


或for((i = 0;i <= 5;i ++));do echo "welcome $i times";done


While循环

第一种


while true


do


echo aaa


sleep 1


done


第二种


int=1


while((int<=3))


do


echo $int


let int++


done


Case语句

case $1 in


start)


echo "starting"


;;


stop)


echo "stoping"


;;


*)


echo "Usage: {start|stop}"


esac



read -p(提示语句)-n(字符个数)-t(等待时间)


read -p "please input your your name: " c



If判断(注意[]左右两边都要有空格)

If condition


Then


 Statements


[ elif condition


Then statements. ..]


[ else


statements ]


fi


判断语句(注意condition左右两边都要有空格)

[condition]


非空返回true,可使用$?验证(0位true,>1为false)


[ ] 空返回false



[ condition ] && echo OK || echo not OK



= 字符串比较


-lt 小于


-le 小于等于


-eq 等于


-gt 大于


-ge 大于等于


-ne 不等于



-f 判断目标是否存在并且为正规文件


-s 判断目标是否存在并且不为空


-d 判断目标是否存在并且为目录


-L 判断目标是否存在并且为符号链接


-r 判断目标是否可读


-w 判断目标是否可写


-x 判断目标可否执行



Shell自定义函数

语法


1.[ function ] funname [()]

{


action;


[ return int; ]


}


1.Function start() / function start / start()

例如:


#!/bin/bash


fSum 3 2;


function fSum()


{


 echo $1,$2;


 return $(($1+$2))


}


total=$?;


echo "第一次调用后的返回结果:"$total


fSum 5 7;


total=$?;


echo $total,$?;


return后面跟数值0-255


脚本调试

sh -vx fun.sh


或者在脚本中增加set -x


十七、高级命令行文本处理工具

cut


PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/apps/jdk1.7.0_45/bin:/root/bin


echo $PATH | cut -d ':' -f 5 (将path变量取出,找到用:分割的第5个路径)


echo $PATH | cut -d ':' -f 3,5 (将path变量取出,找到第3和第5个路径)


echo $PATH | cut -d ':' -f 3-5 (将path变量取出,找到第3-5个路径)


echo $PATH | cut -d ':' -f 3- (将path变量取出,找到第3到最后一个路径)


echo $PATH | cut -d ':' -f 1-3,5 (将path变量取出,找到第1到3和第5路径)



例子:只显示/etc/passwd的用户和shell


cat /etc/passwd | cut -d ':' -f 1,7



sort


cat /etc/passwd | sort 默认首字母来排序


cat /etc/passwd | sort -t ':' -k 3  默认用:分割的第3列 首字母来排序


cat /etc/passwd | sort -t ':' -k 3n 默认用:分割的第3列 数字来排序


cat /etc/passwd | sort -t ':' -k 7 -u 去重


uniq  可以取出排序过的文件中的重复行,与sort合用


cat testfile | sort |uniq


cat testfile | sort |uniq -c 统计每行出现的次数


wc


wc -l /etc/passwd 统计行数


wc -w /etc/passwd 统计单词出现次数


wc -m /etc/passwd 统计文件的字符数


sed(物理删除、替换)


删除:d


sed '2d' testfile  删除testfile的第二行


sed '2,$d' testfile  删除testfile的第二行到末尾的所有行


sed '$d' testfile  删除testfile的最后一行


sed '/test/'d testfile  删除testfile的所有包含test的行



替换:s


sed 's/test/mytest/g' testfile   在整行范围内把test替换为mytest,如果没有g标记,则只有每行第一个匹配的test被替换成mytest;


sed -n 's/^test/mytest/p' testfile    ^表示以test开头,(-n)选项与p标志一起使用,表示只打印那些发生替换的行,也就是说,如果某一行的开头的test被替换成mytest,就打印他


sed 's/^192.168.0.1/&localhost/' testfile    &表示追加,某一行的开头的192.168.0.1被替换成192.168.0.1localhost


sed -n 's/loveloveable/\1rs/p' testfile     love被标记为第一组,所有loveable会被替换成lovers,而且被替换的行会被打印


awk


last -n 5   取出最近登录的5个记录


last -n 5 | awk '{print $1}'   取出最近登录的5个记录,并打印出第1列。$0表示所有域,$1表示第1列


cat /etc/passwd | awk -F ':' '{print $1}'   -F为指定分隔符为:


cat /etc/passwd | awk -F ':' '{print $1"\t"$7}'   "\t"表示tab键,打印出第1列和第7列


十八、可执行文件:

a.sh


#!/bin/bash


while true


do


echo "han shu hao"


sleep 1


done


十九、其他

管道:


ls -rl /etc | more:把上一个命令执行的结果交给下一个命令



wall :把字符警告所有人


wall 'date':把结果警告给所有人



重定向:


>  例如ls > a.txt


把结果放到a.txt中,覆盖原来的结果


>>  例如ls >> a.txt


把结果放到a.txt中,不覆盖原来结果


2> 例如lssss 2>a.txt


把错误结果放到a.txt中



清屏:clear



ctrl+c 或者ctrl+z来终止ping命令的执行。



挂载:mount


mkdir /mnt/cdrom 创建一个目录,用来挂载


将设备/dev/cdrom挂载到挂载点:/mnt/cdrom/中


mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/


umount /mnt/cdrom 解除挂载



统计文件或文件夹的大小


du -h /mnt/cdrom/Package


du -sh *


service network status 查看指定服务的状态


service network stop 停止指定服务(不要轻易敲)


service network start 启动指定服务


service network restart 重启指定服务


service --status-all 查看系统中所有的后台服务

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
4天前
|
缓存 监控 Linux
|
7天前
|
Linux Shell 数据安全/隐私保护
|
8天前
|
域名解析 网络协议 安全
|
14天前
|
运维 监控 网络协议
|
15天前
|
监控 Linux Shell
|
2天前
|
监控 Linux
Linux常用命令-2
本文继续介绍Linux常用命令,涵盖目录操作、文件操作、系统信息和进程管理等类别。具体包括mkdir、rmdir、cp、mv、rm、touch、whereis、whatis、dmesg、free、date、cal、ps、kill、killall和top等命令的使用方法和常用参数。
23 7
|
2天前
|
Linux Shell
Linux常用命令-1
本课程要求学生熟悉Linux系统终端窗口和命令基础,掌握文件目录类、系统信息类、进程管理类及其他常用命令,学时为3-6小时。课程内容涵盖Linux命令的特点、常见命令的使用方法及其应用场景,如文件浏览、目录切换、内容显示等。建议学生逐个操作命令并及时反馈问题。
21 5
|
4天前
|
缓存 Linux 开发者
深入理解Linux命令 `autom4te`
`autom4te` 是 GNU Autotools 中不可或缺的组件,通过高效处理 M4 宏,生成配置脚本并提供强大的调试功能。了解 `autom4te` 的工作机制和常用选项,可以帮助开发者更好地编写和维护配置文件,从而提高软件项目的配置和编译效率。在实际应用中,结合 `autoconf` 等工具,`autom4te` 能够为项目的构建过程提供坚实的基础。
13 2
|
6天前
|
Linux 开发工具
linux文本管理命令
本文档介绍了Linux系统中常用的文本处理命令,包括`echo`、`cat`、`head`、`tail`、`wc`、`less`、`grep`以及重定向符号的使用方法和练习题。此外,还详细讲解了VIM编辑器的特点、工作模式、常用快捷键和高级技巧,帮助用户高效地进行文本编辑和处理。
23 4
|
11天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。