Linux-基础学习(一)-基本命令

开始今日份整理

1.Linux的文件目录操作

1.1 ls

简述:ls是list的缩写,用于列出指定目录或文件

常用的选项

1 -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为隐藏,不会列出)
2 -A:显示除影藏文件“.”和“..”以外的所有文件列表;
3 -d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
4 -l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等

ls-l的结果

1.2 Linux的目录结构

以下是对这些目录的解释:

/bin:
bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt:
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/root:
该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux:
这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:
该目录存放一些服务启动之后需要提取的数据。
/sys:
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

/tmp:
这个目录是用来存放一些临时文件的。
/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:
系统用户使用的应用程序。
/usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var:
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

在linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。

值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。

1.3 cd与pwd

cd是change directory的缩写,用于变更用户所在目录

1 cd 进入当前用户的根目录(root用户的根目录是/root,其他用户的根目录是/home下的用户目录)
2 cd . 进入当前目录(cd ~也是进入当前目录)
3 cd .. 进入上一级目录
4 cd /.../.. 进入某目录(绝对目录)
5 cd .. 进入某目录(相对目录)
6 cd - 进入上一次所在的目录
7 cd ~进入当前用户的家目录

注:cd后面跟目录名就会直接切换到指定的目录中,但cd后不能跟文件名,有文件名就会报错!.表示当前目录,..表示上一级目录

pwd是print work directory的缩写,用来打印当前工作目录

image

1.4 mkdir与rmdir

mkdir是make directory的缩写,用于创建目录

1 mkdir dirname 直接在当前目录下创建新目录
2 mkdir -p dirname1/dirname2/... 一次性创建多级目录
3 mkdir {test1,test2,test3}当前目录下创建多个文件夹

rmdir是remove directory的缩写,用来删除空目录,该目录只能用来删除目录不能删除文件 -> 一般都使用rm代替rmdir

1 rmdir dirname 删除当前目录下的某目录
2 rmdir -p dirname  删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除

简述:rm是remove的缩写,用来删除文件或目录

1 rm    删除文件,会有提示
2 rm -r 删除目录,可以用来删除非空目录,若目录非空则会提示
3 rm -f 强制删除目录,不会提示
4 rm -rf 删除文件或目录,不会提示

注: Linux中删除文件前最好备份,尤其是一些重要文件

1 mv filename /opt/filename.bak 备份文件
2 rm -rf filename

1.5 touch

简述:创建新的空文件;如果要创建的文件已存在则把已存在文件的时间标签更新为系统当前的时间(默认方式),原来的数据将保留

1 touch new_file 在当前目录下建一个空文件

1.6 文件内容查看

简述:显示文件的内容,将其打印在屏幕上

1 cat -n 打印行号
2 cat -A显示所有内容包括特殊字符

与cat类似的其他命令,均是用来显示文件,后跟文件名

1 tac     和cat一样也是打印文件内容到屏幕,不过是从倒数第一行开始打印
2 more    Ctrl+D向上翻屏,Ctrl+F向下翻屏,q退出,一般常用在看LOG文件
3 less    空格键翻页,j向下移动,k向上移动
4 head    显示文件前10行,可以用head -n显示前n行
5 tail    显示文件最后10行,也可以用tail -n显示最后n行

1.7 cp、scp与mv

cp是copy的缩写,用于复制文件或文件夹,命令格式为cp [选项] [来源文件][目的文件]

选项:

1 -f:强行复制文件或目录,不论目标文件或目录是否已存在;
2 -i:覆盖既有文件之前先询问用户;
3 -l:对源文件建立硬连接,而非复制文件;
4 -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
5 -b:覆盖已存在的文件目标前将目标文件备份;

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。

选项:

-r :递归复制整个目录
-v:详细方式输出
-q:不显示传输进度条
-C:允许压缩

例子:

# 传输本地文件到远程地址
scp 本地文件  远程用户名@远程ip:远程文件夹/
scp 本地文件  远程用户名@远程ip:远程文件夹/远程文件名

scp /tmp/test.py root@192.168.1.155:/home/
scp /tmp/test.py root@192.168.1.155:/home/tiger_python.py

# 输入本地文件夹到远程地址
scp -r  本地文件夹  远程用户名@远程ip:远程文件夹/
scp -r /tmp/oldboy root@192.168.1.155:/home/oldboy

# 复制远程文件到本地
scp root@192.168.1.155:/home/oldboy.txt /tmp/oldboy.txt
scp -r root@192.168.1.155:/home/oldboy /home/

mv是move的简写,用于移动文件或目录,还可以用来重命名,命令格式为mv [选项] [源文件或源目录] [目标文件或目录]

该命令有如下几种情况:

  • 目标文件是目录,但目录不存在 -> 重命名源目录
  • 目标文件是目录,但目录存在 -> 将源文件或源目录移动到该目录下
  • 目标文件是文件,但文件不存在 -> 重命名源文件
  • 目标文件是文件,但文件存在 -> 会询问是否覆盖

1.8 搜索文件相关

(1)which:用于查找并显示给定命令的绝对路径

1 $ which ls
2 /bin/ls
3 $ which cd
4 $ which mkdir
5 /bin/mkdir

(2)whereis:用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径

1 $ whereis tomcat
2 tomcat:
3 $ whereis python
4 python: /usr/bin/python2.7-config /usr/bin/python3.5 /usr/bin/python2.7 /usr/bin/python3.5m /usr/bin/python /usr/lib/python3.5 /usr/lib/python2.7 /etc/python3.5 /etc/python2.7 /etc/python /usr/local/lib/python3.5 /usr/local/lib/python2.7 /usr/include/python2.7 /usr/share/python /usr/share/man/man1/python.1.gz

(3)ind:用来在指定目录下查找文件

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示

find .    列出当前目录及子目录下所有文件和文件夹
find /home -name "*.txt"  在/home目录下查找以.txt结尾的文件名
find /home -iname "*.txt"  同上,但忽略大小写
find . \( -name "*.txt" -o -name "*.pdf" \)  当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find /usr/ -path "*local*"    匹配文件路径或者文件
find . -regex ".*\(\.txt\|\.pdf\)$"  基于正则表达式匹配文件路径
find . -iregex ".*\(\.txt\|\.pdf\)$"  同上,但忽略大小写
find /home ! -name "*.txt"  找出/home下不是以.txt结尾的文件
find . -type 类型参数    根据文件类型进行搜索
find . –name a.txt   在当前目录下查找 a.txt 文件(. 表示当前命令)
find /dev -name std*/dev 目录查找 std开头的文件

(4)locate:实是find -name的另一种写法,但是要比后者快得多

1 locate /etc/sh    搜索etc目录下所有以sh开头的文件
2 locate ~/m        搜索用户主目录下,所有以m开头的文件
3 locate -i ~/m     搜索用户主目录下,所有以m开头的文件,并且忽略大小写

(5)grep

简述:是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

语法:
grep [参数] [--color=auto] [字符串] filename
参数详解:
-i : 忽略大小写
-n : 输出行号
-v : 反向选择
--color = auto : 给关键词部分添加颜色

grep "我要找什么" /tmp/oldboy.txt
#排除 -v,排除我要找的东西
grep -v "我要找什么 /tmp/oldboy.txt

例题:

例题,找出/etc/passwd下root用户所在行,以及行号,显示颜色
cat /etc/passwd |grep '^root' --color=auto -n

找出/etc/passwd所有不允许登录的用户
grep /sbin/nologin /etc/passwd

找到/etc/passwd的所有与mysql有关行,行号
cat /etc/passwd |grep 'mysql' -n

1.9 cmp与diff

cmp:比较两个文件是否有差异

cmp testfile testfile1 #比较两个指定的文件

diff:在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作

diff /usr/li test.txt     #使用diff指令对文件进行比较

1.10 文件的打包与压缩

打包和压缩的区别:打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件

打包:tar命令

利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的

-z 使用gzip工具进行压缩

-x 解压文件

-v 显示详细信息

-c 压缩文件

-f 指定文件

1 tar -cvf test.tar a.txt b.txt c.txt    仅打包,不压缩! 
2 tar -tf test.tar        查看tar包中的内容
3 tar xvg test.tar        解包(tar)

压缩和解压缩: gzip命令和gunzip命令、bzip2命令和bunzip2命令

1 gzip test.txt                 压缩文件
2 gunzip test.txt.gz            解压文件
3 bzip2 test.txt                压缩文件
4 bunzip2 test.txt.gz           解压文件

当然也可以直接使用tar命令在打包的同时进行压缩

获取到.gz结尾的文件一般有俩种方式对文件进行解压

(1) 先使用gzip命令进行第一步解压,去掉.gz后缀
    gzip -d 文件名
    得到optall.tar文件
    然后再进行tar解压
    tar -xvf optall.tar

(2)  直接使用tar命令一次性进行解压
     tar -zxvf 文件名
     tar -zxvf optall.tar.gz  # 一次性解压

1.11 path 命令

windows下的环境变量(PATH),都知道系统会按照PATH的设定,去每个PATH定义的目录下搜索可执行文件。查看linux的系统配置如下

执行命令:
echo $PATH
echo命令是有打印的意思
$符号后面跟上PATH,表示输出PATH的变量

PATH(一定是大写的)这个变量是由一堆目录组成,分隔符是":"号,而不同于windows的";"号。

1.12 chattr与lsattr

(1)chattr 给文件加锁,只能写入数据,无法删除文件

chattr +a test.py
chattr -a test.py

(2)lsattr

查看文件隐藏属性

lsattr test.py

1.13 stat

显示文件或文件系统的状态。
#用法 stat  [参数]  文件
参数列表:
-L, --dereference     跟随链接
  -f, --file-system     显示文件系统状态而非文件状态
  -c --format=格式      使用指定输出格式代替默认值,每用一次指定格式换一新行
      --printf=格式     类似 --format,但是会解释反斜杠转义符,不使用换行作
                                输出结尾。如果您仍希望使用换行,可以在格式中
                                加入"\n"
  -t, --terse           使用简洁格式输出
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出
格式化输出参数:
  %a    八进制权限
  %A   用可读性较好的方式输出权限


#实例1
[root@master tmp]# stat 1.txt
  File: '1.txt'
  Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 17348002    Links: 1
(权限)Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
(最近访问)Access: 2018-07-10 15:30:00.000000000 +0800
(最近更改)Modify: 2018-07-10 15:30:00.000000000 +0800
(最近改动)Change: 2018-11-07 15:38:36.400989868 +0800
 Birth: -

#实例2,显示文件权限
[root@master tmp]# stat -c %a 1.txt
[root@master tmp]# stat -c %A 1.txt
-rw-r--r--

2. Linux的系统操作相关

2.1 网络相关

在我们刚装好linux的时候,需要用远程软件进行远程连接,那就得获取ip地址,有时候网卡默认是没启动的,Linux也就拿不到ip地址,因此我们得手动启动网卡

2.1.1 首先需要启动网络服务

systemctl start network  # 启动网络服务
systemctl restart network  # 重启网络服务
systemctl stop network  # 停止网络服务

2.1.2 启动一块网卡

启动/关闭一块网卡 ifup eth0/ ifdown eth0

2.1.3 服务器重启配置

#编辑网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0 
#修改配置参数
ONBOOT=yes

网络配置文件:
/etc/sysconfig/network

网络接口配置文件:
/etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME
DEVICE=: 关联的设备名称,要与文件名的后半部“INTERFACE_NAME”保持一致; 
BOOTPROTO={static|none|dhcp|bootp}: 引导协议;要使用静态地址,使用static或none;dhcp表示使用DHCP服务器获取地址;
IPADDR=: IP地址
NETMASK=:子网掩码
GATEWAY=:设定默认网关;
ONBOOT=:开机时是否自动激活此网络接口;
HWADDR=: 硬件地址,要与硬件中的地址保持一致;可省;
USERCTL={yes|no}: 是否允许普通用户控制此接口;
PEERDNS={yes|no}: 是否在BOOTPROTO为dhcp时接受由DHCP服务器指定的DNS地址;

ifconfig 用于查看网卡状态,和路由器中的ipconfig一致

ip是一个命令,不是TCP/IP那个ip,这个ip命令是结合了ifconfig和route两个命令的功能。

ip addr show #查看ip信息

2.1.4netstat命令

netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。

选项

netstat [选项]
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-l或--listening:显示监控中的服务器的Socket;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-a或--all:显示所有连线中的Socket;

实例:

[root@oldboy_python ~ 10:21:59]#netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      814/sshd            
tcp6       0      0 :::111                  :::*                    LISTEN      2703/rpcbind        
tcp6       0      0 :::3306                 :::*                    LISTEN      29269/mysqld        
udp        0      0 0.0.0.0:758             0.0.0.0:*                           2703/rpcbind        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           2703/rpcbind        
udp        0      0 10.141.32.137:123       0.0.0.0:*                           484/ntpd            
udp        0      0 127.0.0.1:123           0.0.0.0:*                           484/ntpd            
udp        0      0 0.0.0.0:123             0.0.0.0:*                           484/ntpd            
udp6       0      0 :::758                  :::*                                2703/rpcbind        
udp6       0      0 :::111                  :::*                                2703/rpcbind        
udp6       0      0 :::123                  :::*                                484/ntpd

2.2 磁盘存储相关

2.2.1 du与df

du:查看目录下文件占用磁盘空间情况

df: 查看整个磁盘空间占用情况

du 显示当前目录下文件所占的空间
du filename 显示指定文件所占的空间
du catalogname 显示指定目录下所占的空间
 
df 查看系统磁盘设备,默认是KB为单位
df -h 使用-h选项以KB以上的单位来显示查看系统磁盘设备,可读性高
df -a 查看全部文件系统的磁盘设备

2.2.2  fdisk

fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣

选项:

1 -b<分区大小>:指定每个分区的大小;
2 -l:列出指定的外围设备的分区表状况;
3 -s<分区编号>:将指定的分区大小输出到标准输出上,单位为区块;
4 -u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址;
5 -v:显示版本信息。

输入fdisk命令回车后会出现一个问答式界面,要求输入信息来选择可执行的操作,输入的信息选项如下:
1 m  列出可以执行的命令
2 p   列出磁盘目前的分区情况
3 d   选择分区,删除现有分区:
4 n   建立新的磁盘分区

fdisk详细解释:http://man.linuxde.net/fdisk

2.2.3 mkfs(没用过)

mkfs命令用于在设备上(通常为硬盘)创建Linux文件系统。mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行

选项如下:

1 fs:指定建立文件系统时的参数;
2 -t<文件系统类型>:指定要建立何种文件系统;
3 -v:显示版本信息与详细的使用方法;
4 -V:显示简要的使用方法;
5 -c:在制做档案系统前,检查该partition是否有坏轨

/dev/hda5上建一个msdos的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来:

1 mkfs -V -t msdos -c /dev/hda5

2 mkfs -t ext3 /dev/sda6     //将sda6分区格式化为ext3格式
3 mkfs -t ext2 /dev/sda7     //将sda7分区格式化为ext2格式

2.2.4 mount(没用过)

mount命令用于加载文件系统到指定的加载点。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命令来手动完成挂载

语法: mount 选项  设备文件名  加载点

选项:

-V:显示程序版本;
-l:显示已加载的文件系统列表;
-h:显示帮助信息并退出;
-v:冗长模式,输出指令执行的详细信息;
-n:加载没有写入文件“/etc/mtab”中的文件系统;
-r:将文件系统加载为只读模式;
-a:加载文件“/etc/fstab”中描述的所有文件系统。

实例:

1 mount -t auto /dev/cdrom /mnt/cdrom     挂载cdrom
2 mount: block device /dev/cdrom is write-protected, mounting read-only     挂载成功

2.3 系统状态

2.3.1 top

top命令可以实时动态地查看系统的整体运行情况,也就是可以动态查看系统进程信息 (q 退出)

注:ps命令只能静态地输出进程信息,而top目录可以动态显示系统进程信息,可以每隔一段时间刷新当前状态

top交互命令

在top命令执行过程中可以使用的一些交互命令如下:

•h:显示帮助画面,给出一些简短的命令总结说明 
•k:终止一个进程 
•i:忽略闲置和僵死进程,这是一个开关式命令 
•q:退出程序 
•r:重新安排一个进程的优先级别 
•S:切换到累计模式 
•s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s 
•f或者F:从当前显示中添加或者删除项目 
•o或者O:改变显示项目的顺序 
•l:切换显示平均负载和启动时间信息 
•m:切换显示内存信息 
•t:切换显示进程和CPU状态信息 
•c:切换显示命令名称和完整命令行 
•M:根据驻留内存大小进行排序 
•P:根据CPU使用百分比大小进行排序 
•T:根据时间/累计时间进行排序 
•w:将当前设置写入~/.toprc文件中

注:这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽

2.3.2 ps

ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的

语法:ps 选项

常用选项如下:

a:显示现行终端机下的所有程序,包括其他用户的程序。
c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
e:列出程序时,显示每个程序所使用的环境变量。
f:用ASCII字符显示树状结构,表达程序间的相互关系。
g:显示现行终端机下的所有程序,包括群组领导者的程序。
h:不显示标题列。
u:以用户为主的格式来显示程序状况。
x:显示所有程序,不以终端机来区分。
r:只列出现行终端机正在执行中的程序。
v:采用虚拟内存的格式显示程序状况
-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
-c:显示CLS和PRI栏位。
-d:显示所有程序,但不包括阶段作业领导者的程序。
-e:显示所有程序。
-f:显示UID,PPIP,C与STIME栏位。
-H:显示树状结构,表示程序间的相互关系。
-u<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
-j:采用工作控制的格式显示程序状况
-l或l:采用详细的格式来显示程序状况。
-N:显示所有的程序,除了执行ps指令终端机下的程序之外。

2.3.3 kill

kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看

选项:

a:当处理当前进程时,不限制命令名和进程号的对应关系
l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称
p:指定kill 命令只打印相关进程的进程号,而不发送任何信号
s <信息名称或编号>:指定要送出的信息
u:指定用户

参数:进程或作业识别号(指定要删除的进程或作业)

同时还有其他操作方式:

通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这 些进程会比较麻烦,此时可以使用 killall 命令来批量结束某个服务程序带有的全部进程。例如:

nginx启动后有2个进程 killall nginx

实例:

先用ps查找进程,然后用kill杀掉:
ps -ef | grep vim
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

kill 3268
kill 3268
-bash: kill: (3268) - 没有那个进程

2.3.4 free(没用过)

free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区

2.3.5 jobs(没用过)

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号

在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成

1 firefox &       后台运行程序
2 jobs             查看在后台运行的程序
3 fg %工作号    后台程序掉到前台运行     
4 bg %工作号   直接在后台运行

2.4 设备关机

reboot或init 6命令用于重启机器

poweroff或init 0用于关闭系统

init一共分为7个级别,这7个级别的所代表的含义如下
0:停机或者关机(千万不能将initdefault设置为0)
1:单用户模式,只root用户进行维护
2:多用户模式,不能使用NFS(Net File System)
3:完全多用户模式(标准的运行级别)
4:安全模式
5:图形化(即图形界面)
6:重启(千万不要把initdefault设置为6)

不过常用的就是0,5,6

2.5 服务器时间同步

linux的date命令可以显示当前时间或者设置系统时间

查看当前时间

格式化输出

-d    --date=string    显示指定的时间,而不是当前时间
以年--日显示当前时间
date +"%Y-%m-%d"
以年--日 时分秒 显示当前时间
date +"%Y-%m-%d %T"

同步系统时间和硬件时间,可以用hwclock命令

//以系统时间为基准,修改硬件时间
[root@oldboy_python ~ 10:29:07]#hwclock -w

//以硬件时间为基准,修改系统时间
[root@oldboy_python ~ 10:29:21]#hwclock -s

ntp时间服务器同步,以阿里云为例:

ntpdate -u ntp.aliyun.com

3. 用户,群组与权限

3.1 用户管理相关命令

(1)su与sudo

su: 切换用户

sudo:  表示获取临时的root权限命令

1 su 切换到root用户
2 su - root 切换到root用户
3 su - username 切换到普通用户
4 sudo后面跟操作表示进行某些特殊操作

(2)who系列

1 whoami;显示的是当前用户下的用户名
2 who am i:显示的是登录时的用户名
3 who:显示当前真正登录系统中的用户(不会显示那些用su命令切换用户的登录者)

(3)useradd

简述: 创建的新的系统用户

选项如下:

-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
-d<登入目录>:指定用户登入时的启始目录;
-D:变更预设值;
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<群组>:指定用户所属的群组;
-G<群组>:指定用户所属的附加群组;
-m:自动建立用户的登入目录;
-M:不要自动建立用户的登入目录;
-n:取消建立以用户名称为名的群组;
-r:建立系统帐号;
-s<shell>:指定用户登入后所使用的shell;
-u<uid>:指定用户id。

############使用
1 useradd test1    直接添加用户
2 useradd test2 -u 1000 -g test      指定uid和gid添加用户

(4)userdel

简述:用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件

选项如下:

-f:强制删除用户,即使用户当前已登录
-r:删除用户的同时,删除与用户相关的所有文件

userdel username  删除用户账号而不删除相关文件
userdel -f username 强制删除用户
userdel -r username 删除用户的同时删除与用户的相关文件

(5)usermod

简述:用于修改用户的基本信息

选项如下:

-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s<shell>:修改用户登入后所使用的shell;
-u<uid>:修改用户ID;
-U:解除密码锁定。


##################
usermod -d /home/new test  将test用户的家目录修改为/home/new
usermod -G ttt test     将test用户添加到ttt组中
usermod -g ttt test     将test用户的gid变为ttt
usermod -L test        锁定test用户
usermod -U test        解锁test用户

(6)passwd

简述:用于设置用户的认证信息,包括用户密码、密码过期时间等

选项如下:

1 -d:删除密码,仅有系统管理者才能使用
2 -f:强制执行
3 -k:设置只有在密码过期失效后,方能更新
4 -l:锁住密码
5 -s:列出密码的相关信息,仅有系统管理者才能使用
6 -u:解开已上锁的帐号



########################
1 passwd 不带任何选项和参数是更改root用户密码
2 passwd username 更改username的密码

(7)id

简述:显示用户信息

1 id user 显示用户user的信息
2 id 显示当前登录的用户的信息
3 
4 注:用户root的UID号码 = 0,GID号码 = 0

 

注:与用户、组账户信息相关的文件

存放用户信息:

1 /etc/passwd
2 /etc/shadow

存放组信息:

1 /etc/group
2 /etc/gshadow

3.2用户组管理相关命令

groupadd:用于创建一个新的工作组,新工作组的信息将被添加到系统文件中

groupdel:用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组

groupmod:更改群组识别码或名称

用户组管理其他命令类似于用户管理命令

3.3 权限管理相关命令

3.3.1 查看权限信息

ls -l,输出的信息依次为: 权限信息  硬链接数  属主  属组  文件大小  文件创建日期  文件名

ls -l命令输出如下:

上述每一行的信息可以分成七段:

第一段信息表示文件或文件夹的权限,完整表示为drwxrwxrwx,第一个字符d表示文件类型为文件夹

后面的rwx 分别表示权限,read | write | excute,3组rwx分别表示,文件使用者的权限,使用者同组人员权限,其他人权限,如果为 – 表示用户没有这个权限

第二段信息表示文件硬链接数量

第三段信息表示所有者: root

第四段信息表示所属用户组: root

第五段信息表示文件大小,单位为byte

第六段信息表示修改时间

第七段信息表示文件名

文件权限详解

1553844091418

1553844149865

-    一般文件
d    文件夹
l    软连接(快捷方式)
b    块设备,存储媒体文件为主
c    代表键盘,鼠标等设备

注:ll -d 目录 -> 查看目录的权限信息

3.3.2 chown\chgrp

chown:  变更文件所有者

chgrp:   变更文件的所属组

注:以上均可以使用-R选项实现递归变更所有者或所属组

1 chown [选项] [新所有者] 文件列表
2 chgrp [选项] [新所属组] 文件列表
3 chown [选项] [新所有者] : [新所属组] 文件列表

3.3.3 chmod

chmod:  修改文件权限

权限范围的表示法:

u  User,即文件或目录的拥有者
g  Group,即文件或目录的所属群组
o  Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围
a  All,即全部的用户,包含拥有者,所属群组以及其他用户
r  读取权限,数字代号为“4”
w  写入权限,数字代号为“2”
x  执行或切换权限,数字代号为“1-  不具任何权限,数字代号为“0”
s  特殊功能说明:变更文件或目录的权限

1553847253243

实例:

文件权限用字符表示

1 chmod g+w, o+r  文件  给属组用户增加写权限,其他用户增加读权限
2 chmod go-r  文件  同时撤销所属组和其他用户对该文件的读权限
3 chmod a=rx 文件  对所有用户赋予读和执行权限

文件权限用数字表示

r为4 w为2 x为1 没有任何权限为0
每一类用户的权限用其各项权限的和表示(0到7)
权限依次为所有者(u)、所属组(g)、其他用户(o)

例如:754 -> 所有者[4+2+1] 所属组[4+0+1] 其他用户[4+0+0]

chmod 644 file 改变文件的权限

4. 重定向与管道

4.1 重定向

>:把左边的内容覆盖到右边

>>:把左边的内容追加到右边

1 cat /etc/passwd > new_pwd.txt   
2 echo "hello, world" > hello.txt
3 echo "1234" >> hello.txt
4 echo "1234" >> hello.txt

4.2 echo

echo:用于在shell中打印shell变量的值,或者直接输出指定的字符串

详细解释:http://man.linuxde.net/echo

echo "hello"  # 向屏幕输出hello

4.3 管道

作用:把前一个命令的结果当成后一个命令的输入

举例:ls -a | grep mysql就是用grep命令在ls的结果中查找包含mysql的文件

注:其实也可以理解为在前一个命令后,用管道符对当前的命令的内容进行二次筛选或者二次内容

5. vim操作

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。

5.1 vim的使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)

  • 命令模式:vi的默认模式,在任何模式下 按ESC 进入,另外一进入vi编辑器就是命令模式,命令模式中输入的任何字符都作为命令来处理
  • 插入模式(编辑模式):从命令模式下 按a, i 等 进入,输入的任何字符都作为插入的字符处理,按ESC返回命令模式
  • 末行模式:在命令模式下按:进入,执行文件级或全局操作,例如保存文件、退出编辑器等

5.2 vi的基本使用

基本操作
以下操作在末行模式中操作:
:q             退出vi (q! 不保存强行退出)
:w             保存    (wq 保存并退出)
:x             保存退出
:X             加密保存退出
:u             撤销操作
:saveas     另存为

以下操作在命令模式中操作:
x       删除当前字符
dd      删除当前行 ,删除内容存入剪贴板 
h,j,k,l  和 右下上左 移动光标(某些情况下方向键也是命令的一部分)
0   到行首  
^   到行首第一个非空字符
$   到行尾
g_ 到行尾最后一个非空字符

5.3 常用组合键

5.3.1 命令模式

#移动光标
w(e)  移动光标到下一个单词
b    移动到光标上一个单词
数字0  移动到本行开头
$    移动光标到本行结尾
H    移动光标到屏幕首行
M    移动到光标到屏幕的中间一行
L    移动光标到屏幕的尾行
gg    移动光标到文档的首行
G    移动光标到文档尾行
ctrl + f  下一页
ctrl + b  上一页
`.  移动光标到上一次的修改行

#查找
/tiger     在整篇文档中搜索tiger字符串,向下查找
?tiger     在整篇文档中搜索tiger字符串,向上查找
*        查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处
#        查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处
gd        找到光标所在单词匹配的单词,并停留在非注释的第一个匹配上
%    找到括号的另一半!!

#复制,删除,粘贴
yy    拷贝光标所在行
dd    删除光标所在行
D     删除当前光标到行尾的内容
dG    删除当前行到文档尾部的内容
p     粘贴yy所复制的内容
x   删除光标所在的字符
u     撤销上一步的操作

3yy    拷贝光标所在的3行
5dd    删除光标所在5行

5.3.2 底线命令模式

:q!     强制退出
:wq!    强制写入退出
:set nu 显示行号
:数字  调到数字那行

随时按下esc可以退出底线命令模式

6. 其他命令

1.
clear: 用于清除当前屏幕终端上的任何信息
2. cal简述: 显示日历 cal 输出日历(现在所在的月份的日历) cal
year 输出某年的日历 cal month year 输出某年的某月的日历
3. man、help、info man:man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息 help:用于显示shell内部命令的帮助信息。help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man或者info命令查看 info:是Linux下info格式的帮助指令。就内容来说,info页面比man页面编写得要更好、更容易理解,也更友好,但man page使用起来确实要容易。一个man 页面只有一页,而info页面几乎总是将它们的内容组织成多个区段。理解info命令的窍门就是学习如何在单独的Info页面中浏览导航,还要学习如何在节点和子节点之间切换,实际上学习和使用起来更困难
4.
exit:退出 等同于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败
5. wget:网络下载 wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用 一般使用:wget 链接地址 注:wget命令会将文件下载到当前目录下 详细使用:http:
//man.linuxde.net/wget

6.
ps1:环境变量
PS1="[\u@\h \w \t]\$"
PS1的定义中个常用的参数的含义如下:
\d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"  
\H :#完整的主机名称  
\h :#仅取主机的第一个名字 
\t :#显示时间为24小时格式,如:HH:MM:SS  
\T :#显示时间为12小时格式  
\A :#显示时间为24小时格式:HH:MM  
\u :#当前用户的账号名称  
\v :#BASH的版本信息  
\w :#完整的工作目录名称  
\W :#利用basename取得工作目录名称,所以只会列出最后一个目录  
\# :#下达的第几个命令  
\$ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$ 
# 由此,我们可知linux默认的命令行提示信息为:[当前用户的账号名称@主机的第一个名字 工作目录的最后一项]#

软链接和硬链接

a

posted @ 2019-04-01 21:44  柴犬砍柴  阅读(569)  评论(0编辑  收藏  举报