实战中收藏已久的Linux命令


这里主要整理记载和整理了一些在2年的Code过程中,零零散散使用到的Linux命令和常用的操作。主要的练习环境是Centos7,但是大多数也都是通用其它类Unix系统。希望对看到这篇文章的你有帮助, 也欢迎给予一些FeedBack。

常见的Linux命令

wget 命令

  • -b 后台下载模式
  • -P 下载到指定目录
  • -t 最大尝试次数
  • -c 断点续传
  • -p 下载页面内所有资源,包括图片、视频等
  • -r 递归下载
# 下载某个文件到指定目录(桌面)下
wget -p ~/Desktop http://www.linuxprobe.com/docs/LinuxProbe.pdf

date 命令

date 命令用于显示及设置系统的时间或日期,格式为“date [选项] [+指定的格式]”。

按照默认格式查看当前系统时间的 date 命令如下所示:

# 按照指定格式显示时间 年月日时分秒
$ date "+%Y-%m-%d %H:%M:%S"
# 设置当前系统时间
date-s "20170901 8:30:00"

top 命令

  1. top -H 可以查看具体线程的负载情况

tar 命令 - 压缩和解压

  1. 压缩 : tar -czf 压缩后文件名 压缩文件路径

  2. 解压缩: tar -xzf 解压缩文件名 -C 解压文件路径

  3. 不解压,只查看压缩文件内容: tar -tvf 压缩文件

grep 命令 - 基础正则表达式

正则表达式和通配符不是一个概念

cat -A 输出文档中的所有字符,包括特殊字符;
	^M :表示断行字符; 
	^I :表示 <tab> 造成的按键符号; 
	$  :表示每一行的行尾之意!

egrep表示扩展的正则表达式

^word / word$:表示待搜寻的字符在表首部/尾部
?/ *表示任意一个/多个字符;
\{n\}:表示连续n个及以上的前一个RE(参考字符)
\{n,m\}:表示连续n到m个前一个RE

sed 命令 - 进行替换、删除、新增、选取,应用场景主要是文件

用法:sed [-nefr] [动作]

  • -n:表示只有经过处理的哪行才会显示出来(安静模式)

  • -e:直接在命令行上进行动作的编辑

  • -f:是将sed的动作编写在一个文件中,-f filename执行文件内的sed动作

  • -r:让sed支持egrep

  • -i:直接读取文件的内容,不在屏幕中输出(一般不推荐,危险系数比较高)

  • 动作说明:[n1,n2] function 。其中 n1,n2 通常代表选择进行动作的行数(可选)。
    a:+str 直接加字符串,新增(add),目前的下一行
    c:+str 所加的字符串替换n1和n2之间的行
    d: 删除(delete),后面一半不加
    i: +str 插入(insert),在目前的上一行中插入
    p: 打印(print),通常和sed -n一起使用
    s: 替换,通常搭配正则表达式,例如 1,20s/old/new/g其中s///g是标准格式,缺一不可

sed的一些实际用例

  1. 在第二行的后面增加两行字

    nl /etc/passwd | sed '2a Drink tea or \drink beer?'
    
  2. 将第2~5行的内容替换成“NO-2-5 number”

    nl /etc/passwd | sed '2,5c NO-2-5 number'
    
  3. 仅仅列出文件内的第5-7行

    nl /etc/passwd | sed -n '5,7p'
    
  4. 取得ip的范例

    1. 利用关键字配合grep选取出关键的一 行

      /sbin/ifconfig eth0 | grep 'inet addr'
      
    2. 将ip前面的字符部分删除

    3. ~ | sed "s/^.*addr://g"
      
    4. 将ip后面的部分删除

      ~ | sed "s/Bcas.*$//g"
      

      值得注意的就是 .*配合一起才能表示任意的连续的多个字符,单个的*只是表示前面的re的重复
      "/^$/d" 表示删除空白行

awk工具——将一行的数据变成字段来处理(默认分隔符tab和空格)

用法:awk '条件类型1 {动作1} 条件类型2 {动作2} …… filename
例如: last -n 5 | awk 'print $1 "\t" $3' # awk会将行分段,每一段都会用变量名1,2,3……来表示
其中 NF($0):表示每一行拥有的字段总数

  • NR:目前awk所处理的哪行
  • FS:目前使用的分割符,默认空格

diff、patch命令 - 文档比较工具

diff 比较两文件的区别,可用来制作补丁文件 diff -Naur oldfile newfile > file.patch
patch 利用补丁文件升级patch文件

  • 更新:patch -pN < file.patch
  • 还原:patch -R -pN < file.patch

history 命令

  1. !! 执行上一个命令
  2. !n 执行第n个指令
  3. !vi执行最近以vi开头的指令

split 命令 切分文件

常见操作

rpm软件安装命令

rpm -ivh 软件名称 [--test] [--prefix 新路径]

eg:rpm -ivh ‘/home/x3919/Desktop/jdk-8u131-linux-x64.rpm’ --test --prefix /opt/modules/

卸载rpm软件

rpm -qa | grep jdk 命令表示查询与jdk字符有关的软件名称
rpm -e jdk1.8.0_131-1.8.0_131-fcs.x86_64 表示卸载jdk软件,加上–nodeps表示强制删除

RPM 验证与数字证书
  1. rpm -Va 列出系统中所有可能被改过的文件
  2. rpm -V softname 列出该软件所含的文件被改过,才会列出来
  3. rpm -Vf filename 某个文件是否被更改过
  4. 重建数据库: rpm --rebuilddb

VIM 中的操作命令

  • x向后删除(字符);X 向前删除(字符)

  • dd删除整行 ndd为向下删除n行, d1GdG删除到第一行(最后一行)的数据

  • d$d0删除到光标到该行的最前面(最后面)

  • yy复制

  • pP 在光标的下一行(上一行)粘贴

常见的输出文本内容

  • cat、和 tac:正向查看文本和方向查看文本(最后一行先展示)
  • nl 功能,可以查看行号,比cat -n 功能更强
  • more 翻页
    • 空白键space 代表向下翻一页
    • Enter 向下翻一行
    • /字串 向下搜索字段这个关键字
    • :f 立刻显现文件名及当前的行数
    • b或者ctrl+b 往前翻页,只对文件有效,管道无效
  • less 比more更强
    • [pageDown]、[pageUp] 向下和向上翻页
    • /字串、?字串 向下或向上搜索字段
    • n、N 重复前一个搜索,返回前一个搜索
    • g、G 前进到这个数据的第一行/最后一行数据中去
  • head、tail 截取文本的前面/后面的内容

可配置环境变量的地方

  • /etc/profile 设置系统级别的环境变量,对所有的用户有效,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置;
  • /etc/bashrc 为每个运行bash shell的用户执行此文件。
  • ~/.bash_profile 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
  • ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
  • ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.

/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

设置环境变量export属性后,利用 source 命令使整个脚本生效

与文件系统及程序的限制关系: ulimit

变量内容的删除、取代与替换 ( Optional)

语法:${variable#/bin:} 其中variable 是要操作的变量,#关键词,而 /bin:表示要匹配的内容
其中 # 表示删除符合条件的最短字符(从左往右删除)

  • ## 表示删除符合条件最长的字符
  • % 表示从后往前删除符合条件最短的字符
  • %% 表示删除最长符合条件的字符
echo ${PATH}
echo ${PATH#/bin*:} # 删除最短的以bin开头的目录

对磁盘的操作

  • 分区 fdisk -l 会显示所有的磁盘信息
  • mkfs -t ext3 /dev/sdb1 会对所分区的内容格式化
  • mount -t ext3 /dev/sdb1 /mnt/dir 对磁盘进行挂载
  • vim /etc/fstab 开机自动挂载的设置,编辑如上的编写 /dev/sdb1 /mnt/dir ext3 defaults 0 0

更改swap内存的方法

  • 可以查看PC中的内存情况 free

  • 通过dd命令创建一个临时的swap file,大小为1Gb

    dd if=/dev/zero of=/home/oracle/swap.file bs=1024k count=1024

  • 通过mkswap命令格式化步骤1中创建的临时交换文件

    mkswap /home/oracle/swap.file

  • 通过swapon命令使swap文件生效,如下:

    swapon /home/oracle/swap.file

  • 如果需要永久有效,那么需要将新加的swap设备文件写到fstab文件中,使其每次服务器重启都会自动生效

    echo “/home/oracle/swap.file swap swap defaults 0 0”>>/etc/fstab

  • 在临时设备上面关闭SWAP

    swapoff /home/oracle/swap.file

挂载指定的iso文件和生成指定的iso文件

# 挂载指定的iso文件
mount -o loop /dev/xxx.iso /mnt
# 生成iso等镜像文件
mkisofs -r -v -o 输出文件名 输出的目录

env 显示环境变量

set 是显示环境变量和自定变量
几个重要的环境变量
PS1:命令提示字符,修改可以设置显示的内容
OSTYPE, HOSTTYPE, MACHTYPE:( 主机硬件与核心的等级)

declare 与 typeset的功能相同,顾名思义就是设置变量类型

影响显示结果的语系变量 ( locale)

变量键盘读取、阵列与宣告: read, array, declare

read [-pt] variable
	-p 后面接提示字符
	-t 后面接等待的秒数  read -p "please enter a str" -t 30 named
declare [-aixr] variable
	-a 将后面的变量声明为数组类型
	-i 声明为整型
	-x 将变量声明为环境变量和export一样
	-r 将变量声明为只读类型
	<.> bash 环境中的数值运算,默认最多仅能到达整数形态,所以 1/3 结果是 0;

阵列的设置方式是
	var[index]=content

truncate

文件的缩短,主要是文件的切割,只能缩小,从开头剪切到你指定的大小.参数不存在会创建文件
主要参数
	  -c, --no-create        do not create any files
	  -o, --io-blocks        使用 IO Black 来表示文件大小
	  -r, --reference=FILE   用别的文件的大小
	  -s, --size=SIZE        使用指定大小

SIZE 需要时如下整数选项: KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
SIZE 也可以拥有下面的这些修饰符前缀:
		`+' extend by, `-' reduce by, `<' at most, `>' at least,
		`/' round down to multiple of, `%' round up to multiple of.
	Note that the -r and -s 交互执行.

时区的显示与设置

 CentOS 7以前,可以直接修改 /etc/sysconfig/clock就修改了时区,时区的选项在 /usr/share/zoneinfo中
 时间的修改可以利用 date -s '2016-01-01 00:00:00' 来实现,详细的查看date 用法

bash script 脚本的编写

test 命令的用法

#!/bin/bash
# 让用户输入,并且判断是否真的输入了用户名
echo -e "请输入文件名:我将会检查文件的类型和权限.\n"
read -p "输入文件" filename
# 用于文件名是否存在  test -z string 判断文件名是否为空
test -z &filename && echo "你必须输入一个文件名" && exit 0
# 用于判断文件是否存在,其中 -e 表示是否存在 !表示反向选择
test ! -e $filename $$ echo "这个'$filename'文件不存在" && exit 0
# 开始判断文件的类型与属性
test -f $filename && filetype="regulare file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
# 开始输出信息!
echo "这个文件:$filename 是一个 $filetype"
echo "并且权限是:$perm"

时间:2017/8/16

systemctl 管理单一服务(service unit)

[root@study ~]# systemctl [command] [unit]
command 主要有:
start :立刻启动后面接的 unit
stop :立刻关闭后面接的 unit
restart :立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思
reload :不关闭后面接的 unit 的情况下,重新载入配置文件,让设置生效
enable :设置下次开机时,后面接的 unit 会被启动
disable :设置下次开机时,后面接的 unit 不会被启动
status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机默认执行否、登录等信息等!
is-active :目前有没有正在运行中
is-enable :开机时有没有默认要启用这个 unit

配置本地源

步骤 1:光驱挂载镜像

查看磁盘与目录的容量:df, du

  1. df: 列出文件系统的整体磁盘使用量
  2. du:评估文件系统的磁盘使用量(常用于评估目录所占容量)
df [OPTION]... [FILE]...
	-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
	-h,(-H,-k,-m ) --human-readable  人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;-H,-k,-m 是具体指定格式来显示
	-i, --inodes          不用磁盘容量,而以 inode 的数量来显示
	-T 	列出该分区的分区容量

Usage: du [OPTION]... [FILE]...
    -a :列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。
	-h :以人们较易读的容量格式 ( G/M) 显示;
	-s :列出总量而已,而不列出每个各别的目录占用容量;
	-S :不包括子目录下的总计,与 -s 有点差别。
	-k :以 KBytes 列出容量显示;
	-m :以 MBytes 列出容量显示;

启动后台程序

  • 方法1:标准的 service 方式:RPM 、DEB 安装,运行 service logstash start 命令即可
  • 方法2:最基础的 nohup 方式:同时在命令前面加 nohup ,后面加 &,例如:nohup bin/kibana &
  • 方法3:更优雅的 SCREEN 方式:
    ① 创建独立的 screen 命令如下:screen -dmS elkscreen_1
    ② 接管连入创建的 elkscreen_1 命令如下:screen -r elkscreen_1
    按 Ctrl+A+D 键,断开环境。想重新接管,依然 screen -r elkscreen_1,如果创建了多个 screen,查看列表命令screen -list
  • 方法4:最推荐的 daemontools 方式:对于需要长期后台运行的大量程序(注意大量,如果就一个进程,还是学习一下怎么写 init 脚本吧),推荐大家使用一款 daemontools 工具。包括但不限于 python 实现的 supervisord,perl 实现的 ubic,ruby 实现的 god 等。

yum 的在线升级机制

查询功能

yum [list|info|search|provides|whatprovides] 利用yum来查询原版distribution所提供的软件或已知软件的名称

常见的用法如下 yum [option] [查询的工作项目] [相关参数]

主要的 [option] 选项如下:

  • -y 表示等待用户输入时,自动提供yes的响应
  • --installroot=/opt/softpath 表示更改该软件的默认安装路径为/opt/softpath
  • [查询的工作项目] 的可用选项如下
    • search : 搜索某个软件的名称或者是描述description的重要关键字
    • list: 列出目前yum所管理的所有软件名称与版本,类似于 rpm -qa
    • info: 同上,不过类似于 rpm -qai
    • provides: 从文件去搜索软件,类似于 rpm -qf

具体的用法如下:

  1. 列出yum服务器上可供本机升级的所有软件yum list updates
  2. 列出提供passwd这个文件的软件有哪些 yum provides passwd
安装/升级软件

主要用法如下 yum [option] [查询的工作项目] [相关参数]

主要参数(option)如下:

  • install:后面接要安装的软件
  • update:后面接要升级的软件
  • remove:后面接要卸载的软件

如果软件安装 rpm -ivh xx.rpm 失败,提示缺少指定软件依赖是 libXss.so.1,可以通过如下方式查找。

repoquery --nvr --whatprovides libXss.so.1

可以查找出依赖的包名,然后根据包名来补包就可以啦。非常的方便。

yum的设置文件

可以参考设置的地方有两个:

  1. 关于/etc/yum.conf文件:主要承担全局配置[main],此外也可以在此处配置软件仓库(repository)

  2. 关于/etc/yum.repos.d/filename.repo:主要承担具体软件仓库的配置(若上面yum.conf中配置了软件仓库,此处也可以选择不配置),filename可自行定义。

    vim /etc/yum.repos.d/CentOS-Base.repo
    
    [base]:代表容器的名字。中括号一定要存在,里面的名字可以随便取,但是并不能有两个相同的容器名称
    name:只是说明容器的意义,不重要
    mirrorlist=:列出容器可以使用的镜像站点,如果不想使用,可以批注注释掉这一行
    baseurl=:这个非常的重要,因为后面接的就是容器的实际网址。
    enable=1:就表示让这个容器启动
    gpkcheck=1:指定是否需要查阅RPM的数字证书
    gpgkey=:就是数字证书公钥文件所在位置
    

如何清除本机上面的旧数据,使用命令yum clean [packages|headers|all]

-  packages:将已下载的软件文件删除;
-  headers:将下载的软件文件头删除;
-  all: 将所有容器的数据都删除。

如何使用 yum 的软件组功能,使用的命令 yum [组功能] [软件组],主要参数:

  • grouplist:列出可以使用的组列表
  • groupinfo:后面接group name,则可了解该group 内含的所有组名称
  • groupinstall:这个好用,可以安装一组的软件,相当方便
  • groupremove:删除某个组

如果实现全系统自动升级,例如我们希望在每天凌晨 3:00 升级。

vim /etc/crontab
0  3 * * * root /usr/bin/yum -y update

Linux 账号和用户组

每个用户都会有两个ID: UID(用户) + GID(用户组)

对于a.UID,取值范围:

  1. 0 表示系统管理员,具有root权限,只要改为0就具有root权限(一般不推荐多个账号UID为0);
  2. 1~499:保留给系统自己使用,但是除了0以外,其他的UID特性并没有不同。通常不可登录,需要使用/sbin/nologin;
  3. 500以上:普通用户自己使用.

/etc/passwd 文件存放不同账号的权限 /etc/shadow 存放加密后的密码

如果root用户密码忘记:

  1. 进入单用户模式(直接赋予root权限);

  2. 利用Live CD 开机挂载根目录、修改/etc/shadow,将root密码字段清空。

/etc/group 文件存放用户组信息 /etc/gshadow 存放用户组密码

  • 初始用户组:就是(加入多个组中)默认的用户组,被设置在/etc/passwd的第四个字段中
  • 有效用户组:正在使用的用户组权限的用户组(操作命令:groups),有效用户组切换,newgrp 用户组名

下面介绍一些实例:

  1. 新建一个账号。主要用法 useradd \[-u UID\]\[-g 初始用户组\]\[-G 次要用户组]\[-mM\]\[-c 说明栏\]\[-d 设置主文件夹绝对路径\]\[-s shell\] 用户名
  • -u:指定用户的UID
  • -g/G:指定用户的初始用户组/次要用户组
  • -s:指定该用户使用的shell,默认是/bin/bash
  • -r: 创建一个系统账号,UID 有限制(参考 /etc/login.defs),默认不创建主文件夹

打开useradd的参考文件 “useradd -D”

e.g.1:useradd + 设置用户名 # 默认主目录权限是700
修改密码是:passwd 用户名
chage命令用来显示详细的密码参数

  1. usermod 命令对用户信息进行微调——和useradd很像,主要用法usermod [-cgGlsu] username
  • -c:后面接上用户的说明
  • -g/G:修改初始用户组/次要用户组
  • -l:修改账号名称
  • -s:修改用户的shell
  1. userdel 用来删除用户,主要用法 userder [-r] username 用户确定要删除不需要的用户名
  • -r:表示连同主文件夹一起删除.
  1. 用户的功能:

  2. finger [-s] username # 显示用户里面内容,通常都是/etc/passwd里面的内容

  3. chsh : 改变shellid:列出你的UID/GID 的信息

  4. id:列出你的UID/GID 的信息

  5. 新增和删除用户组

  6. groupadd

  7. groupmod

  8. groupdel

  9. 用户身份的切换命令 su、sudo

  10. su 命令的主要语法 su [-lm] [-c 命令] [username]

- `-`:代表使用login-shell的变量文件读取方式来登录系统,用户名称没有添加进去代表切换到root用户
- `-l`:同上
- `-m/p`:表示不读取login-shell用户中的文件,来切换用户
- `-c`:仅仅执行一次命令
- 直接使用su命令,很多原本的命令不会改变
  1. sudo命令的主要语法, sudo [-b][-u 新用户账号],能让你以其他用户的身份登录
  2. -b:后面的命令让系统自行执行,而不与目前的shell参数影响
  3. -u: 代表想要切换的对象,没有为root

说明一点,仅有/etc/sudoers内的用户才能执行sudo命令。在root身份下,使用visudo来修改/etc/sudoers,能够让该账户使用全部或者部分root命令功能。

e.g.1:单一用户可进行root所有命令与sudoers文件语法. 执行 visudo /etc/sudoers 添加指定的用户,例如hadoop。

	用户账号 登陆证的来源主机名=(可切换的身份)	可执行的命令
	root 				ALL=(ALL)     		ALL     	# 默认值
	hadoop 				ALL=(ALL)			NOPASSWD:ALL        #新增的用户

e.g.2:利用用户组来修改,修改同样的文件中

%wheel ALL=(ALL)  ALL	# %代表用户组的意思
usermod -a -G wheel hadoop # 将prol加入wheel的支持

Linux系统的状态检测

  1. ifconfig 命令用于获取网卡配置与网络状态等信息
  2. uname 命令用于查看系统内核与系统版本等信息,格式为“uname [-a]”。
  3. uptime 用于查看系统的负载信息,格式为 uptime
  4. free 用于显示当前系统中内存的使用量信息,格式为“free [-h]
  5. who 用于查看当前登入主机的用户终端信息,格式为“who [参数]”。
  6. last 命令用于查看所有系统的登录记录,格式为“last [参数]”。
  7. history 命令用于显示历史执行过的命令,格式为“history [-c]”。
  8. sosreport 命令用于收集系统配置及架构信息并输出诊断文档,格式为 sosreport
  9. lscpu 查看一些cpu等信息
  10. lshw是一个通用的工具,可以列出多种硬件单元的详细或者概要的信息,比如 CPU、内存、usb 控制器、硬盘等。lshw能够从各个“/proc”文件中提取出相关的信息

实际的案例

从实际的例子出发来熟悉一些Linux语法

从某个文件或者输出中读取选项作为用户输入

这里面需要介绍一个Linux中的数组概念(一维数组),数组生成方式为arrays=(value1 value2 ...)用空格分开

  • 数组中的单个元素表示 ${my_array[0]}
  • 使用@ 或 * 可以获取数组中的所有元素。${my_array[*]}或者${my_array[@]}
  • 获取数组长度的方法与获取字符串长度的方法相同。${#my_array[*]}或者${#my_array[@]}

一个实际样例,我们从命令行单独启动安卓模拟器,我们首先获得选中输入的模拟器名称列表。并且展示出来。

emulatorList=($(emulator -list-avds | awk '{print $1}'))
emulatorListLenght=${#emulatorList[*]}

for ((i = 1; i <= $emulatorListLenght; i++)); do
        Stream="${emulatorList[$i - 1]}"
        echo "$i. ${Stream}"
done

read -p 'Enter input (default 1):' selectNum

echo "--- start ${emulatorList[$selectNum - 1]} ---"

参考文档

  1. Mac 每次都要执行source ~/.bash_profile 配置的环境变量才生效 - science_Lee的博客 - CSDN博客
  2. ubuntu12.04 .bashrc设置后无效 - heybob的专栏 - CSDN博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值