linux入门+常用命令 【CentOS7.2-Minimal】

初识 linux

~:家目录

root 用户~规定为 /root

[root@localhost ~]$ pwd
/root

普通用户~默认 /home/username

[liqiang@localhost ~]$ pwd
/home/liqiang

pwd 显示当前光标所在路径

~ 与 / 的区别

~ 代表家目录, 对于root用户来讲就是: /root
/ 是根目录。/root 只是 / 下的其中一个子文件夹。

[root@localhost /]# ls
bin dev home root etc usr var

切换路径

# windows 也是使用cd切换路径,但win有盘符,切换到c盘只需要
 D:\> c:         # 简写
 D:\> cd /d c:   # 也是cd命令,不过要用加上 /d  区别于切换盘符和路径
去到家目录:

cd
cd ~

去到根目录

## 所有用户同一个根目录
cd /

回退到上一次停留目录
 cd -
去到上一层、上两层目录
cd ../  
cd ../../

./ 是当前目录,相对路径

绝对路径: 以根目录为起始

[root@localhost local]$ cd /usr/local/mysql

相对路径: 以当前目录为起始

[root@localhost local]$ cd mysql
[root@localhost local]$ cd ./mysql

文件

查看当前目录下文件/文件夹

ls
ll –> ls -l 的别名,列出文件/文件夹详细信息
ll -a –> ls -l -a 查看包括隐藏文件在内的所有文件/文件夹
ll -h 查看文件大小 【du -sh 可看文件/文件夹大小,小于4k的文件/夹只会显示4.0k】
ll -rt 按时间并排展示,一般 -rt 一起使用
ls --help 更多命令查看命令帮助
ll -R 查看当前目录和子目录下文件

统计文件/文件夹大小
ll -h (ls -lh)列表输出该目录下文件大小信息。对文件夹不适应。
du -sh  当前目录下文件/夹总量大小,也可指定查单独某个文件/夹 du -sh xxx.txt
统计文件内容

wc -l 统计当前目录下所有文件各自的行数,总行数
也可以指定统计某个文件

统计当前目录下文件(递归子文件夹、过滤掉文件夹)

ls -lR | grep "^-" | wc -l 

统计当前目录下文件夹(递归子文件夹、过滤掉文件)

ls -lR | grep "^d" | wc -l
mkdir 创建文件夹
单个创建 mkdir  a 		 (相对路径创建在当前目录下)
        mkdir /xxx/xxx   (绝对路径可以往任意路径创建)
级联创建 mkdir -p 1/2/3  
并联创建 mkdir  a b c
复制和移动文件
cp  /xxx/xx  ./xxxx       [源文件] [目标文件]
mv  /xxx/xx  xxxx         [源文件] [目标文件]
ln -s mysql-5.6.23 mysql  [源文件] [快捷方式] ## 代替mv重命名,便于上线后版本变更,存储位置变更
上传文件
# cd 到使用目录                    
# rz 从windows资源管理器选中文件上传到linux当前目录 【或使用xftp工具】 
# sz filename 将文件下载到windows     [yum install -y lrzsz]
解压文件
tar -zxvf  file.tar.gz  -C ../app  【-C指定解压目录 】

# 其他压缩格式
# unzip     file.zip     解压zip     [yum install -y unzip]
# tar -xzvf file.tar.gz  解压tar.gz  [yum install -y lrzsz]
# tar Jxvf  file.tar.xz  解压tar.xz
# tar –xvf  file.tar     解压tar     
# unrar e file.rar       解压rar      **需要安装工具包**

# 压缩文件
zip -r test.zip  test.txt   
zip -r test.zip ./*  【将当前目录下的所有文件和文件夹,压缩成test.zip,-r表示递归压缩子目录下所有文件】
创建空文件
  • touch xxx.xx
  • cat /dev/null > xxx.xx
 echo "" > xxx.xx (空字符串并不完全空)回显
 vi xxx.xx (前提xxx.xx不存在,vi后不编辑,保存退出) 
将已有内容的文件清空内容
  • cat /dev/null > xxx.xx
 echo "" > xxx.xx (空字符串并不完全空)  
 vi  gg dG  【gg 第一行;dG删除光标所在及以后行;更多命令参考一下内容(命令行模式的快捷命令)】
 rm -rf 后再 touch 
将文件追加至另一个文件

cat wc2.txt >> wc.data

查看文件的内容
  1. cat / more / less
    • cat 一次全部展示 (小文件)
    • more 按空格往下翻页,不能往上,按q退出 (大文件)–和cat一样一次加载全部,只是可以分页查看
    • less 按上下箭头往上下,按q退出 (大文件)-- 不是一开始加载文件全部
      具备查找功能,按/ 然后输入要找的字串,再按 Enter 即可,按 n(next) 会继续找,大写的 N 则是往回(上)找,按 q(quit)或者ZZ离开
      《more和less的用法》:https://www.cnblogs.com/aijianshi/p/5750911.html
  • cat xxx.xx | grep -C 20 ERROR
    【过滤出关键字 ERROR 出现的前20行+后20行的内容】
    【管道符:第一个命令的输出为第二个命令的输入】
    【grep:按关键字过滤 】
    【- A 后20行;-B 前20行;-C 前后20行 -after/-before】
  • cat xxx.xx | awk ‘{print $1,$2}’
    【awk :可以将文本格式化,即按指定的格式输出】
    【print $1,$2 : 只会输出 默认以空格分隔的第一和第二列的内容】指定#作为分割符号:cat awk_test.txt | awk -F# ‘{print $1,$2}’

awk更多用法参考:https://cloud.tencent.com/developer/article/1533669

 生成到log文件,再用sz命令  下载到windows来查看(一般在download目录下)
cat xxx.xx | grep -C 30 ERROR > error.log    【> 新建/覆盖】 【把过滤出来的文件输出到新的文件】
cat xxx.xx| grep -C 30 ERROR >> error.log    【>> 追加】 
  1. tail -f 【实时查看】
  • tail -200f xxx.xx 实时查看文件最新200行【没有-200F的,一般脚本里用F,自己操作时f】
  • tail -F xxx.xx 【F = f + retry,文件消失后会不停尝试重新获取文件】
全局搜索一个文件的名称

find / -name ‘*mysql*’ [*:模糊搜索;/ 根路径:全局会很慢,能确定部分目录就用/xxx 替换/]

vi 编辑文件的过程

vi xxx.xx 打开进入命令行模式
i 进入编辑模式
esc 进入命令行模式
shift+: 进入尾行模式
wq 保存退出;q退出;q!不保存;wq!强制保存退出

命令行模式的快捷命令
	gg:光标移动至第一行
	dd:删除游标所在的一整行(常用)
	ndd:n为数字。删除光标所在的向下n行,如20dd则是删除光标所在的向下20行;不是从开始行删除哦;
	dG:删除光标所在到最后一行的所有数据
	d$:删除光标所在处,到该行的最后一个字符
	d1G:删除光标所在到第一行的所有数据
	d0:那个是数字0,删除光标所在到该行的最前面的一个字符
	
	x,X:x向后删除一个字符(相当于[del]按键),X向前删除一个字符(相当于[backspace]即退格键)
	nx:n为数字,连续向后删除n个字符
 :set nu      显示行号
 :set nonu      取消显示输入
 永久显示行号:vi /etc/virc  在最后一行添加 set nu
 :set fileencoding    显示编码格式
 :set fileencoding=utf-8  设置编码格式

Window 和 Linux 文件&编码格式

  • 在win创建的问题,可能导致linux进程不识别。

    在linux上 vi 打开后,文件内容看起来一摸一样,但左下角显示 [dos] 代表是win创建的文件。

    ~
    ~
    ["address.txt" [dos] 14L, 214C ]
    
  • 将win文件转unix

    $ sudo yum install dos2unix 
    
    $ dos2unix address.txt 
    dos2unix: converting file address.txt to Unix format ...
    

    再次打开后,就没有 [dos]

  • 凡是win创建的文件都留意一下编码格式(是否UTF-8)

    $ file address.txt 
    address.txt: UTF-8 Unicode text, with CRLF line terminators
    
    

环境变量和PATH

全局环境变量:/etc/profile
个人环境变量: (~自己家目录)

~/.bashrc
~/.bash_profile
最好配置在 .bashrc。【切换用户 su 不会执行.bash_profile;su - 才会】可能存在其他不会生效情况

   修改配置文件后:刷新、执行配置文件 [source 或 .]   (只会在当前会话,其他已经连接的会话也需要source)                
 source /etc/profile  
 . .bashrc  【第一个. 与 source同样效果,代表执行】  

which java 【检查修改有没有生效】
echo $JAVA_HOME -->能输出 /usr/java/jdk1.8.0_121 是因为在/etc/profile里添加了JAVA_HOME

vi ~/.bashrc 【额外的tips】

	PS1=`uname -n`":"'$USER'":"'$PWD'":>"; export PS1
于是得到了:
	localhost:mysqladmin:/usr/local/mysql:>    
which 和 whereis 的区别

which 是直接查找可执行命令;
whereis 不仅可以查找命令还可以查找文件位置。

别名
[root@localhost ~]# alias jk='pwd'   ## 当前会话生效 【注意=前后不能有空格】

如果要永久生效需要配置在 /etc/profile 中

vi /etc/profile
添加一句 :alias jdk='echo $JAVA_HOME'  【注意=前后不能有空格】
source /etc/profile

用户

列出所有用户
 cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
添加用户

[root@localhost ~]# useradd liqiang
[root@localhost ~]# id liqiang
uid=1002(liqiang) gid=1002(liqiang) groups=1002(liqiang)
【 gid:主组; groups:所在的所有用户组】

查看用户、用户组

id liqiang

如果创建用户时,家目录空文件夹提前存在但没有配置文件,会报错:
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

处理办法(把缺少的文件从 [/etc/skel/.*] 复制一份过来)
 [root@localhost ~]# cp /etc/skel/.* /home/liqiang/
设置密码

[root@localhost ~]# passwd liqiang

删除用户

[root@localhost ~]# userdel liqiang
用户组下唯一用户删除时,用户组也会删

创建用户组

[root@localhost ~]# group -g 101 dba
[root@localhost ~]# useradd -u 514 -g dba -G root -d /usr/local/mysql mysqladmin

将用户 liqiang 添加到另外一个用户组 bigdata 

[root@localhost ~]# usermod -a -G bigdata liqiang
[root@localhost ~]# id liqiang
uid=1002(liqiang) gid=1002(liqiang) groups=1002(liang),1003(bigdata)

修改主组【修改gid后groups也只剩主组这一个,需要添加原来的组到groups】

[root@localhost ~]# usermod --gid bigdata liqiang
[root@localhost ~]# id liqiang
uid=1002(liqiang) gid=1003(bigdata) groups=1003(bigdata)
[root@localhost ~]# usermod -a -G liqiang liqiang
uid=1002(liqiang) gid=1003(bigdata) groups=1003(bigdata),1002(liang)

权限

r4 w2 x1
rwxr-xr-x 代表 755

第一组 rwx代表用户的权限              [读、写、执行]
第二组 r-x代表同用户组下其他用户的权限  [读、执行]
第三组 r-x代表其他用户组的权限         [读、执行]

chown -R 用户:用户组 文件夹/文件路径
chmod -R 777 文件夹/文件路径

 [root@localhost ~]# chown -R mysqladmin:dba /usr/local/mysql  
 [root@localhost ~]# chmod -R 755 /usr/loacl/mysql
 
 [root@localhost ~]# chmod +x  /etc/rc.d/init.d/mysql
切换用户
su ruoze   切换到用户,但pwd在切换前的目录(临时)  
su - ruoze 切换到该用户的家目录,且执行环境变量文件

.bash_profile  su 不会执行;su - 都执行
.bashrc        su 执行   ;su - 都执行
配置普通用户获取root的最大权限 [sudo]

[root@localhost ~]# vi /etc/sudoers

    liqiang   ALL=(ALL)      NOPASSWD:ALL

-rw-r–r-- 1 root root 3 Jan 7 21:47 tmpdata.data
[liqiang @localhost ~]# vi /tmp/tmpdata.data 【会发现编辑后无法保存】

[liqiang @localhost ~]# sudo vi /tmp/tmpdata.data 【获取root权限打开后就可以保存】

sudo su 一起使用的场景

[liqiang@Gargantua ~]$ su - mysqladmin
su: Authentication failure 【liqiang用户是没有权限去切换到其他普通用户的】
[liqiang@Gargantua ~]$ sudo su - mysqladmin 【需要sudo su - 一起使用】

服务

查看服务进程号,端口号
[root@localhost ~]# ps -ef|grep mysql       # jps  查看java进程的pid

[root@localhost ~]# netstat -nlp|grep pid   # 查看当前活跃的所有端口  sudo netstat -nlp
防火墙

云主机不需要

// 关闭 和 查看当前状态
service ipstables stop
service ipstables status
检查ip / 端口号通不通
ping  ip
telnet  ip:端口号       【yum install telnet】
查看系统磁盘,内存的命令
df -h  
free -m

free,Top,df的相关命令参考:https://blog.csdn.net/alawaka2018/article/details/80352216

查看机器负载

top 列表显示CPU占用
htop 详细显示CPU核心数占用/内存占用【需要yum install -y htop】
iotop 磁盘读写消耗
iftop 网络传输,网卡消耗

PID USER PR NI VIRI RES SHR %CPU TIME+  COMMAND

进程强制结束

kill -9 [PID]

PS 命令

ps命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等。常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。参考:https://www.cnblogs.com/abc8023/p/5459724.html

ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
ps -e 此参数的效果和指定"A"参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信号的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps u  以用户为主的格式来显示程序状况。
ps x  显示所有程序,不以终端机来区分。
  • 查找僵尸进程

      ps -ef | grep defunct   #  defunct 代表进程成为僵尸进程
    
  • 或 获取stat状态为z/Z的进程。【zombie prosess】

      ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'   
       -A 参数列出所有进程
       -o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)
      # 可以使用 kill -HUP \<pid> 指定杀死僵尸进程,确认kill不掉,则 kill -HUP \<ppid>
    
  • 或top 命令中状态为zombie

      Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
    

参考:
https://cloud.tencent.com/developer/article/1804818
https://cloud.tencent.com/developer/article/1114512

netstat命令参考:https://www.runoob.com/linux/linux-comm-netstat.html#

历史命令记录 查看/清空

history ;  history -c ;    

date 命令

使用“date -s”命令来修改系统时间

date -s 06/10/96     # 系统时间设定成1996年6月10日
date -s 13:12:00     # 将系统时间设定成下午1点12分0秒

快捷键

ctrl + a  将光标移动到当前命令头部
ctrl + e  将光标移动到当前命令末尾

linux的 /tmp 目录超过30天没有访问会自动删除
关于部署服务的任何东西不要配置在/tem下
/tmp 的权限是777,可以放一下需要传送的文件,不用考虑权限问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值