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的迁移。
相关文章
|
5天前
|
Linux
【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解
System V信号量的概念及其在Linux中的使用,包括 `semget()`、`semctl()`和 `semop()`函数的具体使用方法。通过实际代码示例,演示了如何创建、初始化和使用信号量进行进程间同步。掌握这些知识,可以有效解决多进程编程中的同步问题,提高程序的可靠性和稳定性。
45 19
|
7天前
|
Linux Android开发 开发者
linux m、mm、mmm函数和make的区别
通过理解和合理使用这些命令,可以更高效地进行项目构建和管理,特别是在复杂的 Android 开发环境中。
39 18
|
27天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
53 14
Linux 10 个“who”命令示例
|
6天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
28 8
|
16天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
100 20
|
15天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
79 13
|
16天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
43 7
|
2月前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
35 9
|
2月前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解
|
2月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
156 7

热门文章

最新文章