Welcome My Friend

Linux基础

自己在使用linux时候的总结,不定时更新

linux

基本指令

  • cp:cp -rf /var/cos/* /root把var/cos下所有东西拷贝到root下

  • scp:scp [-r或者其他参数][文件名或文件夹名] [root@IP:/文件路径]跨机器传输

  • 新建文件夹:单级:mkdir [文件名] 多级:mkdir -p [文件名]

  • 创建文件:touch [文件名+扩展名]rm [文件名]

  • 移动文件:mv

  • 删除文件:单个文件:rm [文件名](删文件夹要rmdir [文件名]) 删除目录及目录所有文件和子目录:rm -rf [文件名]

  • 查看文件类型:file [文件名]

  • 查找指令:

    • findfind -name/-type filename
      find -type f -mmin -10所有过去10分钟更新过的普通文件,不加-type f则搜索普通文件+特殊文件+目录
    • locatelocatefind -name的另外一种写法locate快很多,因为只搜索/var/lib/locatedb,这个数据库中包含了本地所有文件信息
      locate /etc/sh,搜索etc下所有sh开头的文件
      locate ~/m,搜索所有m开头的文件
      locate -i ~/m,用户主目录下所有m开头的文件,并且忽略大小写
    • whereis,只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s),如果省略所有信息则返回所有信息
    • which,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果,可以看到某个命令是否存在,以及执行的到底是哪个位置的命令
    • 总结:which 查看可执行文件的位置
      whereis 查看文件的位置
      locate 配合数据库查看文件位置
      find 实际搜寻硬盘查询文件名称

    以上参考链接:https://www.cnblogs.com/kex1n/p/5233821.html

  • 查找带某个字符的所有文件:

    grep -rn "hello,world!" *

    * : 表示当前目录所有文件,也可以是某个文件名

    -r 是递归查找

    -n 是显示行号

    -R 查找所有文件包含子目录

    -i 忽略大小写

    find -type f -name '*.php' | xargs grep 'GroupRecord' xargs配合grep查找

  • 修改权限:chmod [-cfvR][--help] [--version][文件名]

    参数详解:mode : 权限设定字串,格式如下 : [ugoa…][[+-=][rwxX]…][,…],其中 u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

    -c : 若该档案权限确实已经更改,才显示其更改动作
    -f : 若该档案权限无法被更改也不要显示错误讯息
    -v : 显示权限变更的详细资料
    -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
    –help : 显示辅助说明
    –version : 显示版本

    + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。

    r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。

    其中ll(ls -l)可以看到,r-读(4),w-写(2),x-执行(1),rw—r—r代表权限644,rwxrw—r代表权限是764,其中7表示所有者对应的权限,6是表示所属组的用户权限,4表示其他用户,所以修改权限最直接的指令就是chmod 777 [dir]

  • nl [dir](读取file参数)计算输入中的行号

  • about network:

    重启:service network restart(centos),/etc/init.d/networking restart(debian)

    查看:systemctl status firewalld.service或者firewall-cmd--state

    关闭:systemctl stop firewalld.service

    禁止开机启动:systemctl disable firewalld.service(这里换成其他也可以,比如network.service)

  • sz&rz:(假若没有则安装)yum install -y lrzsz

    具体操作:sz filename发送到本地

    rz上传文件

  • cron:cron服务是Linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:

    /sbin/service crond start(开机自启在/etc/rc.d/rc.local脚本中加入/sbin/service crond start)

    /sbin/service crond stop
    /sbin/service crond restart
    /sbin/service crond reload

    编辑:crontab -e,删除:crontab -r

    E:echo "1 1 * * * command" >> /var/spool/cron/root
    中间五个分别是分时日月周,*/10分钟的话,10分钟执行一次。10-23/2小时的话,上午十点到晚上23点每两个小时执行一次

  • ln:ln [选项][参数]链接指令。其中选项s常用,其他的见http://man.linuxde.net/ln ,-s或–symbolic:对源文件建立符号连接,而非硬连接,如果不打参数默认硬链接。

    E:将目录/usr/mengqc/mub1下的文件m2.c链接到目录/usr/liu下的文件a2.c:

    cd /usr/mengpc

    ln /mub1/m2.c /usr/liu/a2.c

  • tar:tar (选项)(参数)

    选项(部分):

    -d:记录文件的差别;
    -x或–extract或–get:从备份文件中还原文件;
    -t或–list:列出备份文件的内容;
    -z或–gzip或–ungzip:通过gzip指令处理备份文件;
    -Z或–compress或–uncompress:通过compress指令处理备份文件;
    -f<备份文件>或–file=<备份文件>:指定备份文件;
    -v或–verbose:显示指令执行过程;
    -r:添加文件到已经压缩的文件;
    -u:添加改变了和现有的文件到已经存在的压缩文件;
    -j:支持bzip2解压文件;
    -v:显示操作过程;
    -l:文件系统边界设置;
    -k:保留原有文件不覆盖;
    -m:保留文件不被覆盖;
    -w:确认压缩文件的正确性;

    E:

    压缩:

    tar –cvf jpg.tar .jpg //将目录里所有jpg文件打包成tar.jpg
    tar –czf jpg.tar.gz
    .jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
    tar –cjf jpg.tar.bz2 .jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
    tar –cZf jpg.tar.Z
    .jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
    rar a jpg.rar .jpg //rar格式的压缩,需要先下载rar for Linux
    zip jpg.zip
    .jpg //zip格式的压缩,需要先下载zip for Linux

    解压:

    tar –xvf file.tar //解压 tar包
    tar -xzvf file.tar.gz //解压tar.gz
    tar -xjvf file.tar.bz2 //解压 tar.bz2
    tar –xZvf file.tar.Z //解压tar.Z
    unrar e file.rar //解压rar
    unzip file.zip //解压zip

    参考链接:http://man.linuxde.net/tar

  • netstat:netstat -an “-a”选项意在显示所有连接,当不附加”-n”选项时,它显示的是本地计算机的netbios名字+端口号。而加了”-n”选项后,它显示的是本地IP地址+端口号。

  • 重新动态获取IP:dhclient -r /释放IP 然后dhclient

  • 查看进程:ps -ef | grep httpd(检查httpd进程是否存在)

    参数详解:ps:将某个进程显示出来

    -e:显示所有进程

    -f:全格式

    | :管道命令,ps与grep同时执行
    grep(Global Regular Expression Print):查找,强大的文本搜索工具,使用正则表达式搜索文本并把匹配的行打印出来

    cat /proc/进程号/maps 查看虚拟地址空间

    E:假如现在正在mv文件但是没有进度条,可以ps -ef | grep mv来看是否移动完了

    杀死进程:killall 进程名

  • 查看端口:lsof -i:端口号

  • 查看CPU信息:cat /proc/cpuinfo # 查看CPU信息,可以看到核心数

  • 查看系统负载:cat /proc/loadavg # 查看系统负载

  • 查看CUP数:cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l

  • 查看内核数:cat /proc/cpuinfo |grep "processor"|wc -l

    具体看每个cpu对应的核心:cat /proc/cpuinfo | grep physical | uniq -c

  • 查看CPU型号和数量:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

  • 查看磁盘使用情况:df -h查看物理机

    du -h查看当前目录下的空间使用情况,这条指令会遍历

  • 查看内存:

    free 默认kb,后面加上参数-m就可看mb
    top 类似任务管理器,查看运行程序
    vmstat 主要参数free空闲,buff已用缓冲数目,cache已用缓存数目
    vgdiplay 查看卷组名称及卷组使用情况
    lvdisplay 当前逻辑卷空间状态

    LVM扩容参考网址:https://blog.csdn.net/u012439646/article/details/73380197

  • 擦除网卡缓存:ip addr flush eth0
  • 显示已加载的系统的模块:lsmod
  • 查看版本:cat /etc/redhat-release(目测是隐藏文件)或者uname -a(centos) 或者lsb_release -a

  • 查看应用:rpm -qa | grep [软件名]rpm -q [软件名]

  • /dev/sda3表示的意思:/dev是表示设备,访问外部设备的端口(其实就是文件)

    /dev/hd[a-t]:IDE设备,hda,hdb表示harddisk,a表示第一个盘等等

    /dev/sd[a-z]:SCSI设备和SATA设备,a表示第一个,以此类推,1-4分给主分区。其他的是扩展分区

    /dev/fd[0-7]:标准软驱
    /dev/md[0-31]:软raid设备
    /dev/loop[0-7]:本地回环设备
    /dev/ram[0-15]:内存

    linux下各个文件目录的意思:https://www.jb51.net/LINUXjishu/32180.html

  • 查看系统时间并且修改:
    查看:当前:data,硬件时间:hwclock
    修改:date -s “2018-08-24 10:45:10”
    同步:hwclock --systohc

    修改时区:timedatectl list-timezones |grep Shanghai- -结果Asia/Shanghai

    timedatectl set-timezone Asia/Shanghai


安装软件

Debian下

  • sudo:进入root:su,输入密码,然后apt-get install sudo,这样可以使用sudo

  • vim:安装过程中如果遇到下面遇到的问题中第二个问题则先解决,然后apt-get update&apt-get upgrade
    出现需要先安装common,则就是apt-get remove vim-common,然后再apt-get install vim
    参考链接:https://www.cnblogs.com/drfxiaoliuzi/p/4143933.html

    配置源的参考链接:https://blog.csdn.net/w6280190/article/details/80840728

    gg:跳到第一行

    shift+g:跳到最后一行

    ddp:光标所在行与下一行进行交换

    xp:光标所在的字符与后面一个字符交换

  • gcc:apt-get install build-essential 这个命令会将所有c语言的开发包安装好,包含了gcc make gdb和lib函数库很多工具,build-essential是c语言的开发包

  • apt命令:apt-get install --reinstall 软件名 重新安装

apt-get remove 软件名卸载软件

apt-get clean清除deb包

Centos6.6下

  • 安装Mysql

    首先查看是否有旧版本

    rpm –qa | grep -i mysql 或者 yum list installed | grep mysql

    删除系统自带或者已安装版本

    yum -y remove mysql-libs.x86_64

    然后给CentOS添加rpm源

    wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

    yum localinstall mysql-community-release-el6-5.noarch.rpm

    yum repolist all | grep mysql

    yum-config-manager –disable mysql55-community

    yum-config-manager –disable mysql56-community

    yum-config-manager –enable mysql57-community-dmr

    yum repolist enabled | grep mysql

    安装mysql

    yum install mysql-community-server

    启动mysql

    service mysqld start

    查看mysql是否自启动,并且设置开启自启动

    chkconfig –list | grep mysqld

    chkconfig mysqld on

    mysql安全设置

    mysql_secure_installation

    注意centos6没有systemd,所以没有systemctl命令,只有service命令,查看状态可以service mysqld status

    mysql


遇到的问题

Debian下

  • 运行脚本:先要有执行权限:chmod u+x [文件名],执行:bash [文件名.sh]或者./[文件名]
  • apt-get install之后404 not found的话那就直接先update一下
  • 能ping通自己和网关,但是上不去网可能是路由表里面没有网关地址,route -n就可以查看,没有网关的话就直接添加就行:route add defualt gw X.X.X.X 这样再去看路由表里面应该就有网关,可以上网了

CentOS7下

Ubuntu下


常见脚本

  • centos统计ping输出日志的脚本:

    1
    2
    #!/bin/sh
    ping 10.121.82.94 -c 172800 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }' > /tmp/ping94.log &
  • centos7中根据文件大小排序以及jenkins配置每周删除一次jobs日志信息:https://blog.csdn.net/u013066244/article/details/70232050

  • shell统计某个目录文件数量:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/bin/bash  

    cd /home/a //切换到要统计文件数目的目录

    fcnt=0
    dcnt=0
    frcnt=0
    fwcnt=0
    fxcnt=0
    for file in *
    do
    if [ -f $file ];then
    let fcnt+=1
    if [ -r $file ];then
    let frcnt+=1
    fi
    if [ -w $file ];then
    let fwcnt+=1
    fi
    if [ -x $file ];then
    let fxcnt+=1
    fi
    elif [ -d $file ];then
    let dcnt+=1
    fi
    done
    echo "There are $fcnt files in $PWD"
    echo -e "\tThere are $frcnt readable files in $PWD"
    echo -e "\tThere are $fwcnt writeable files in $PWD"
    echo -e "\tThere are $fxcnt executeable files in $PWD"
    echo "There are $dcnt directories in $PWD"

-------------本文结束-------------

文章作者: Summary
文章链接: http://noblestaspiration.net/2018/08/25/Linux基础/
版权声明:博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议,转载请注明出处!

想要分我一杯羹吗