linux基础整理0316

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux基础整理0316相关的知识,希望对你有一定的参考价值。

一、linux基础整理

  由于这是学习linux的第一周,整理的东西很杂很分散,其中包括了查看虚拟机的各种信息,命令相关的只整理了alias、date、history、cal、帮助会话screen等命令的使用,最后加上了两个常见问题处理办法;在以后的学习中会不断完善文中整理的相关内容。

1、查看系统信息类命令:

查看内核版本

[[email protected] ~]#uname -r 
3.10.0-957.el7.x86_64

查看系统版本

查看配置文件
[[email protected] ~]#cat /etc/redhat-release    //Centos
CentOS Linux release 7.6.1810 (Core) 

[email protected]:~$ cat /etc/os-release      //Ubuntu系统
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
使用lsb_release -a 命令
[[email protected] ~]#lsb_release -a          //Centos
[email protected]:~$ lsb_release -a   //Ubuntu系统
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:    18.04
Codename:   bionic

查看内存大小

[[email protected] ~]#free
              total        used        free      shared  buff/cache   available
Mem:        1475156      706280      110076       22952      658800      515300
Swap:       3145724         264     3145460
[[email protected] ~]#cat /proc/partitions 
  major minor   #blocks  name
  11        0   10491904 sr0
   8        0  209715200 sda
   8        1    1048576 sda1
   8        2  104857600 sda2
   8        3    3145728 sda3
   8        4          1 sda4
   8        5   52428800 sda5

查看cpu信息

[[email protected] ~]# lscpu
[[email protected] ~]# cat /proc/cpuinfo

查看磁盘分区

[[email protected] ~]# df 
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda2      104806400  3713712 101092688   4% /
devtmpfs          721736        0    721736   0% /dev
tmpfs             737576        0    737576   0% /dev/shm
tmpfs             737576    10780    726796   2% /run
tmpfs             737576        0    737576   0% /sys/fs/cgroup
/dev/sda5       52403200    33036  52370164   1% /data
/dev/sda1        1038336   167008    871328  17% /boot
tmpfs             147516        4    147512   1% /run/user/42
tmpfs             147516       32    147484   1% /run/user/0
/dev/sr0        10491772 10491772         0 100% /run/media/root/CentOS 7 x86_64

[[email protected] ~]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  3.7G  0 rom  /media/CentOS_6.10_Final
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0 97.7G  0 part /
├─sda3   8:3    0 48.8G  0 part /data
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0    3G  0 part [SWAP]

2、echo回显命令的$()、””、’’、的区别

功能:显示字符

[[email protected] ~]# echo ‘hostname‘       //单引号为强引用,不替换引号中的变量
hostname
[[email protected] ~]# echo `hostname`      //反向单引号替换引号中的变量
CentOS7.localdomain
[[email protected] ~]# echo "hostname"     //双引号为弱引用,替换引号中的变量
hostname 
[[email protected] ~]# echo $(hostname)    //$()替换变量的值
CentOS7.localdomain

3、显示当前使用的shell

echo $(shell)

[[email protected] ~]#echo $SHELL
/bin/bash
[[email protected] ~]#echo ${SHELL}
/bin/bash

4、显示当前系统使用的所有shell

cat /etc/shell

[[email protected] ~]#cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

5、显示shell的搜索路径

[[email protected] ~]#echo $PATH                       
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

6、显示提示符格式

临时/永久 改变命令行提示符的格式、颜色
临时改变:修改PS1变量

[[email protected] ~]# PS1="[e[1;5;41;33m][[email protected]h W]\$[e[0m]" 

永久改变:修改配置文件
将命令追加至/etc/profile 文件中,然后重新登录或重载文件source /etc/profile即可生效

7、配置登录前的提示信息

[[email protected] ~]# cat /etc/motd 

8、内部命令和外部命令

区别内部命令和外部命令:type cmd

[[email protected] ~]#type cd 
cd is a shell builtin              //这是一个内部命令
[[email protected] ~]#type rpm 
rpm is /usr/bin/rpm             //显示命令的路径,为外部命令

内部命令:由shell自带的,而且通过某命令形式提供
help或enable显示内部命令列表
enable cmd 启用内部命令
enable -n cmd 禁用内部命令
enable -n 查看所有禁用的内部命令

外部命令:查看外部命令路径:which -a|--skio-alias , whereis

[[email protected] ~]#whereis cp
cp: /usr/bin/cp /usr/share/man/man1/cp.1.gz /usr/share/man/man1p/cp.1p.gz

9、hash缓存表

作用:将执行的外部命令的路径存储在hash里,再次执行外部命令是优先从hash里寻找。
优点:大大提高命令的调用速率
常见用法:
hash 显示hash缓存
hash -l 显示hash缓存,可作为输入使用
hash -p path name 给命令路径path取别名name
hash -t name 打印缓存中的name路径
hash -d name 清除name缓存
hash -r 清除缓存

 [[email protected] ~]#hash      //显示hash缓存
hits    command
   1    /usr/bin/timeout
   1    /usr/bin/tty
   2    /usr/bin/bash
[[email protected] ~]#hash -l        //显示hash缓存,可作为输入使用
builtin hash -p /usr/bin/timeout timeout
builtin hash -p /usr/bin/tty tty
builtin hash -p /usr/bin/bash bash

[[email protected] ~]#hash -p /usr/bin/timeout tout      //给命令路径path取别名name
[[email protected] ~]#hash -t tout       //打印缓存中的name路径
/usr/bin/timeout
[[email protected] ~]#hash -d tout       //打印缓存中的name路径
[[email protected] ~]#hash -t tout       //再次打印缓存中的name,发现已经找不到了
-bash: hash: tout: not found
[[email protected] ~]#hash -r            //清除缓存
[[email protected] ~]#hash 
hash: hash table empty

10、别名alias

显示当前shell进程的所有可用别名alias

[[email protected] ~]#alias 
alias cp=‘cp -i‘
alias egrep=‘egrep --color=auto‘
alias fgrep=‘fgrep --color=auto‘

定义别名:alias name=’cmd’
注意:仅对当前shell进程有效

[[email protected] ~]#alias cdnet="cd /etc/sysconfig/network-scripts/"     //命名别名`
[[email protected] ~]#cdnet                                                                            //使用别名
[[email protected] network-scripts]#                                            //通过提示符已知进入到了network-scripts目录

撤销别名:unalias name
撤销所有别名:unalias -a
[[email protected] ~]#unalias cdnet
注意:永久有效要定义在配置文件中:
对当前用户有效:~/.bashrc
对所有用户有效:/etc/bashrc

注意:别名可以与原名相同,此时原名被隐藏;此时如果要运行原命令,则使用cmd “cmd”’cmd’

总结命令的优先级:

别名alias > 内部命令builtin > 外部命令/path/file>缓存hash

11、bash进程重新读取配置文件

Source /path/to/config_file
.  /path/to/config_file

12、时间相关命令

date 显示和设置系统时间
date [option] [+format]
FORMAT:格式符
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;

date -s                                  #设置当前时间,只有root权限才能设置,其他只能查看 
date -s 20120523               #设置成20120523,这样会把具体时间设置成空00:00:00 
date -s 01:01:01                 #设置具体时间,不会对日期做更改 
date -s "01:01:01 2012-05-23"      #这样可以设置全部时间 
date -s "01:01:01 20120523"        #这样可以设置全部时间 
date -s "2012-05-23 01:01:01"     #这样可以设置全部时间 
date -s "20120523 01:01:01"       #这样可以设置全部时间

%F 显示当前年月日

[[email protected] ~]#date +%F
2019-03-16

%T 显示当前时分秒

[[email protected] ~]#date +%T
14:46:58

设定日期时间:date [MMDDhhmm[[CC]YY][.ss]]

[[email protected] data]#date 031614302019.30
Sat Mar 16 14:30:30 CST 2019

如果需要以指定的格式显示日期,可以使用“+”开头的字符串指定其格式,详细格式如下:

%H : 小时(00-23)
%I : 小时(01-12)
%k : 小时(0-23)
%l : 小时(1-12)
%M : 分钟(00-59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00-60)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
%a : 星期几 (Sun-Sat)
%A : 星期几 (Sunday-Saturday)
%b : 月份 (Jan-Dec)
%B : 月份 (January-December)
%c : 直接显示日期与时间
%d : 日 (01-31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001-366)
%m : 月份 (01-12)
%U : 一年中的第几周 (00-53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0-6)
%W : 一年中的第几周 (00-53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000-9999)

查看时区:

[[email protected] ~]#timedatectl status
      Local time: Sat 2019-03-16 15:51:15 CST
  Universal time: Sat 2019-03-16 07:51:15 UTC
        RTC time: Sat 2019-03-16 08:13:56
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

修改时区:

[[email protected] ~]#timedatectl set-timezone Asia/Shanghai

设置时间格式:

MMDDHHmmYYYY.ss
月 天 小时 分钟 年.秒

[[email protected] ~]#date 031615302019.30   //2019-03-16 15:30:30
Sat Mar 16 15:30:30 CST 2019

时间加减操作

date +%Y%m%d                            #显示前天年月日 
date -d "+1 day" +%Y%m%d       #显示前一天的日期 
date -d "-1 day" +%Y%m%d        #显示后一天的日期 
date -d "-1 month" +%Y%m%d    #显示上一月的日期 
date -d "+1 month" +%Y%m%d   #显示下一月的日期 
date -d "-1 year" +%Y%m%d       #显示前一年的日期 
date -d "+1 year" +%Y%m%d      #显示下一年的日期
[[email protected] ~]#date
Sat Mar 16 14:40:16 CST 2019
[[email protected] ~]#date +%F -d "yesterday"        //昨天
2019-03-15
[[email protected] ~]#date +%F -d "3 day"                //三天后
2019-03-19
[[email protected] ~]#date +%F -d "-2 day"               //两天前
2019-03-14

显示硬件时钟hwclock/clock

-s 以硬件时钟为准
-w 以系统时间为准

13、日历:cal

[[email protected] ~]#cal 05 2019  
[[email protected] ~]#cal 2019
[[email protected] ~]#cal -y   //当前年日历
[[email protected] ~]#cal      //显示当前年当月日历

14、会话screen

使用此命令需要安装screen包
screen -S [SESSION] //创建新会话
screen -x [SESSION] //加入会话
exit //退出并关闭会话
Ctrl+a,d //剥离当前会话
screen -ls //显示已经打开的会话
screen -r [SESSION] //恢复某会话

在虚拟终端1上创建一个会话helpme
[[email protected] ~]#screen -S helpme  
在虚拟终端2上查看并加入会话
[[email protected] ~]#screen -ls  
There is a screen on:
    60812.helpme    (Attached)
1 Socket in /var/run/screen/S-root.

[[email protected] ~]#screen -x helpme 

15、命令历史

命令历史history:shell进程会其会话中保存此前用户提交执行过的命令;

定制history的功能,可通过环境变量实现:

    HISTSIZE:shell进程可保留的命令历史的条数;
    HISTFILE:持久保存命令历史的文件** .bash_history**
    HISTFILESIZE:命令历史文件的大小;

命令用法:

history [-c] [-d] [n]

    -c: 清空命令历史;
    -d offset:删除指定命令历史

history -anrw [文件名]

    -a: 追加本次会话新执行的命令历史列表至历史文件 
    -r: 读历史文件附加到历史列表 
    -w: 保存历史列表到指定的历史文件 
    -n: 读历史文件中未读过的行到历史列表 

history -ps 参数 [参数...]

    -p: 展开历史参数成多行,但不存在历史列表中 
    -s: 展开历史参数成一行,附加在历史列表后 

history #:显示最近的#条命令;

调用命令历史列表中的命令:

    !#:再一次执行历史列表中的第#条命令;
    !!:再一次执行上一条命令;
    !STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;
    注意:命令的重复执行有时候需要依赖于幂等性;

调用上一条命令的最后一个参数:

    快捷键:ESC, .
    字符串:!$

控制命令历史记录的方式:

    环境变量:HISTCONTROL
    ignoredups:忽略重复的命令;
    ignorespace:忽略以空白字符开头的命令;
    ignoreboth:以上两者同时生效;
    例:HISCONTROL=ignoredups

注:命令历史文件存放:/etc/profile 或 ~/.bash_profile

16、开机状态添加新硬盘后,不重启读取新硬盘的方法

步骤:
1、添加一块虚拟硬盘
2、使用lsblk 命令查看磁盘是否显示出来
3、使用 [[email protected] ~]#echo ‘- - -‘ > /sys/class/scsi_host/host0/scan 命令重定向,强制刷新硬盘
(注:/sys/class/scsi_host/ 路径下有多个host[0,1,2..]文件,每次刷新一个,直至新硬盘出现)

[[email protected] ~]#lsblk                                                         //使用lsblk发现新加的硬盘没有显示出来
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    3G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   50G  0 part /data
sr0     11:0    1   10G  0 rom  /run/media/root/CentOS 7 x86_64
[[email protected] ~]#echo "- - -" > /sys/class/scsi_host/host       //使用tab补全路径发现有多个文件
host0/ host1/ host2/
[[email protected] ~]#echo "- - -" > /sys/class/scsi_host/host0/scan   
[[email protected] ~]#lsblk                                            //重新执行lsblk发现新添加的硬盘sdb显示出来了
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    3G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   50G  0 part /data
sdb      8:16   0   20G  0 disk 
sr0     11:0    1   10G  0 rom  /run/media/root/CentOS 7 x86_64

17、当某个文件数据过大导致所在磁盘空间被占满,如何快速释放空间

1、如何快速将一个文件增大

[[email protected] ~]# cp /dev/zero /boot/a.txt      // /dev/zero为设备文件,将设备文件复制到另文件内会瞬间增大存储空间

查看磁盘被占满

[[email protected] ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sda1      1014M 1014M   32K 100% /boot
...

解决办法1、:
删除文件:

[[email protected] ~]# rm -rf /boot/a.txt 

注意:当要删除的文件正在被使用时,文件显示已被删除,但内存仍然被占满。此时需要将正在使用的文件关闭即可。

查看被删除的文件:

[[email protected] ~]# lsof |grep /boot/a.txt
vim       69356     root    3r      REG    8,1 892141568    113 /boot/a.txt (deleted)

解决办法2:使用/dev/null 文件的特性清空文件

[[email protected] ~]# cat /dev/null > /data/f1.txt

18、生成随机字符串


[[email protected] ~]# cat /dev/urandom |tr -dc ‘a-zA-Z0-9‘ |head -c12        
            // 文件/dev/urandom内为随机字符,通过tr删除除字母和数字的字符,通过head命令取前n个字符

以上是关于linux基础整理0316的主要内容,如果未能解决你的问题,请参考以下文章

VS2015 代码片段整理

小程序各种功能代码片段整理---持续更新

常用python日期日志获取内容循环的代码片段

PHP项目开发经验整理

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

逆向及Bof基础实践