ls

通配符 匹配
一个字符
* >=0个任意字符
[ai] a 或者 i
[a-i] a/b/c/d...i
[!a] 除了a

cat

cat -n test  #加上行号
cat -b test #只给有文本的行加上行号

tail

tail -n 2 log_file #只显示最后两行
tail -nf 2 log_file #使得tail命令保持活动状态,并不断显示添加到文件中的内容

head

head -n 2 log_file

touch

touch main.py #  创建main.py,或者更新修改时间、访问时间
touch main.py -a # 只修改访问时间
ls -l --time=atime main.py #显示访问时间,默认系显示修改时间

ps

#默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程
ps -ef #显示所有e进程的完整f信息
ps -el #长格式输出
#S 进程状态。O正在运行、S在休眠、R可运行、Z僵尸、T停止
#C 进程生命周期的CPU利用率
#STIME 进程启动时的系统时间
#CMD 启动程序的名字
#PRT 进程优先级(越大优先级越低)
ps --forest #显示进程的层级关系

grep

grep 要搜的 文件
grep -v #反向搜索
grep -n #同时显示行号
grep -c #统计匹配数量
grep -e t -e f file # 匹配任意模式即可
grep [tf] file # 使用正则

tar

#创建归档
tar -cvf test.tar one two three
#看一下,不提取
tar -tf test.tar
#提取
tar -xvf test.tar

压缩

#压缩
gzip
#看一下
gzcat
#解压缩
gunzip

进程列表

#命令列表
pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls
#进程列表
( pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls )
# 括号的加入使命令列表变成了进程列表,生成了一个子shell来执行对应的命令。

jobs

# 显示当前运行在后台模式中的所有用户进程(作业)
一旦后台作业完成,就会显示出结束状态。
[1]+ Done sleep 3000 &
# Ctrl+z 切换到后台,并停止运行
# 将指定进程切回前台运行。
fg %1
# 在后台恢复运行
bg %1
#杀死
kill %1 命令 & :将任务进程在后台运行。
jobs:查看后台的进程列表。
fg %后台任务编号:将指定后台任务切换到前台运行。
bg %后台任务编号: 恢复运行后台指定的任务。
kill %后台任务编号:杀死后台指定任务。

环境变量

  • 全局环境变量:对于shell会话和所有生成的子shell都是可见的
  • 局部变量:则只对创建它们的shell可见
# 查看全部全局变量
printenv
env
#查看某个特定环境变量
printenv HOME
echo $HOME
#使用环境变量,直接作为命令行参数
ls $HOME
#输出全局、局部、用户定义 环境变量
set #设置局部用户定义变量,推荐用小写,避免重新定义系统环境变量
my_variable="hello world" # = 左右没有空格
echo $my_variable
#fish 设置局部
set name "QWJ" #设置了局部环境变量后,就能在shell进程的任何地方使用它了。但是,如果生成了另外一个shell,它在子shell中就不可用。 #类似地,如果你在子进程中设置了一个局部变量,那么一旦你退出了子进程,那个局部环境变量就不可用。 #设置全局环境变量: 先创建一个局部环境变量,然后再把它导入全局环境中
my_variable="hello world"
export my_variable #在生成子shell进程时,只有部分父进程的环境被复制到子shell环境中
#修改子shell中全局环境变量并不会影响到父shell中该变量的值。
#子shell中添加全局环境变量,父进程看不到
#总结:父shell通过全局环境影响子shell。子shell无论如何(增删改)无法影像父shell #删除
unset name
set name #fish 中 #PATH
#PATH中的目录使用冒号分隔。
#追加
PATH=$PATH:/home/orange/bin
#对PATH变量的修改只能持续到shell退出或重启系统 #环境变量持久化
#/etc/environment中添加环境变量
key=val #/etc/profile
#系统上每个用户登录时都会执行这个启动文件 #其中包含这样的命令
# Load profiles from /etc/profile.d
if test -d /etc/profile.d/; then
for profile in /etc/profile.d/*.sh; do
test -r "$profile" && . "$profile"
done
unset profile
fi
# 迭代/etc/profile.d目录下的所有文件,当用户登录时,shell会执行这些文件
#因此也可以在/etc/profile.d目录下见一个脚本,里面设置环境变量,所有用户可见 #针对个别用户,在~/.bashrc #数组变量

创建、删除用户

useradd -m test #创建用户test,并创建用户HOME目录
useradd -mk test #必须和-m 一起使用,将/etc/skel目录的内容复制到用户的HOME目录
useradd -p passwd #为用户账户指定默认密码 useradd -D #查看默认属性
useradd -D -s /usr/bin/fish #更改默认属性 userdel test #只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件
userdel -r test #如果加上-r参数, userdel会删除用户的HOME目录以及邮件目录。然而,系统上仍可能存有已删除用户的其他文件。这在有些环境中会造成问题。

修改用户

#修改密码
passwd test
#快速修改默认用户登录shell
chsh -s /usr/bin/fish

管理组

groupadd qwj-friends #创建新租,里面没有人
usermod -G qwj-friends test # 将test加到这个组里 #修改组名称
groupmod -n newname oldname

文件权限

#查看默认权限掩码 0022,第一位特殊用途
umask
#权限三位一组,一组看做一个8进制数
#文件全权限 666
#目录全权限 777 #默认文件权限 666-022 = 644 = rw- r-- r--
#默认目录权限 777-022 = 755 = rwx r-x r-x #设置权限掩码
umask 026 #更改文件权限
chmod 760 file
chmod [ugoa] [+-=] [rwxs]
chmod o+r file
chmod u+x file
chmod u+x file -R #让权限的改变递归地作用到文件和子目录 #改变所属关系
chown orange file #将file的属主设为orange
chown orange.man file #同时将file的所属组设为man
chown .man #只改组 #只有root用户能够改变文件的属主。
#任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。 #chgrp命令可以更改文件或目录的默认属组。
chgrp shared file #额外信息位
#设置用户ID(SUID):当文件被用户使用时,程序会以文件属主的权限运行。
#设置组ID(SGID):对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。 #SGID位对文件共享非常重要。启用SGID位后,你可以强制在一个共享目录下创建的新文件都属于该目录的属组 mkdir testdir
chgrp shared testdir
chmod g+s testdir
#首先,用mkdir命令来创建希望共享的目录。然后通过chgrp命令将目录的默认属组改为包
#含所有需要共享文件的用户的组(你必须是该组的成员)。最后,将目录的SGID位置位,以保证
#目录中新建文件都用shared作为默认属组。 umask 002
cd testdir
touch newfile
#为了让这个环境能正常工作,所有组成员都需把他们的umask值设置成文件对属组成员可
#写。在前面的例子中,umask 改成了002,所以文件对属组是可写的。

重定向

date > text #覆盖
data >> text #追加
command < inputfile
wc < text # wc 输出文本行、文本词数、字节数
command << marker #输入marker结束

shell 基础

#!/usr/bin/bash
echo -n "现在的时间: " # -n 不换行
date # 直接输出
echo "让我们看看谁登陆了"
who name="QWJ"
money=100
today=$(date)
today1=`date`
echo "我叫$name,很高兴认识大家,我有\$$money "
echo "date 命令的输出放在了变量today中,其值$today" #命令替换会创建一个子shell来运行对应的命令。子shell (subshell)是由运行该脚本的shell
#所创建出来的一个独立的子shell(child shell)。正因如此,由该子shell所执行命令是无法
#使用脚本中所创建的变量的。
#在命令行提示符下使用路径./ 运行命令的话,也会创建出子shell;要是运行命令的时候
#不加入路径,就不会创建子shell。如果你使用的是内建的shell命令,并不会涉及子shell。
#在命令行提示符下运行脚本时一定要留心! echo
var1=3
var2=5
var=$[$var1+$var2]
echo "3+5=$var"
echo "$var1+$var2=$var" exit 9 # 脚本运行后 echo $? 得到9
#exit $var

shell 结构化语句

#!/usr/bin/bash

#bash shell的 if语句会运行if后面的那个命令。如果该命令的退出状态码(参见第11章)是0
#(该命令成功运行),位于then部分的命令就会被执行。 #if-then语句
if pwd
then
echo "成功运行"
fi #if-then-else语句
if pwd
then
echo "成功运行"
else
echo "运行失败"
fi testuser=NoSuchUser
if grep $testuser /etc/passwd
then
echo "用户 $testuser 存在"
else
echo "用户 $testuser 不存在"
if ls /home/$testuser
then
echo "但是 他有一个家目录"
fi
fi testuser=NoSuchUser
if grep $testuser /etc/passwd
then
echo "用户 $testuser 存在"
elif ls /home/$testuser
then
echo "用户 $testuser 不存在"
echo "但是 他有一个家目录"
else
echo "用户 $testuser 不存在"
fi #记住,在 elif 语句中,紧跟其后的 else语句属于 elif 代码块。它们并不属于之前的
#if-then代码块。

test

if test conditon
then
commands
fi if [condition]
then
commands
fi

Linux 备忘的更多相关文章

  1. linux 备忘记录

    杂项记录 Ubuntu 通过/etc/network/interfaces修改IP,重启网络服务貌似也不会生效.可以重启电脑使其生效,或执行: ip addr flush dev ens33 & ...

  2. linux备忘和卸载

    linux上网 -------------------------------------------------linux卸载------------------------------------ ...

  3. 树莓派 Linux备忘

    //更新树莓派 sudo apt-mark hold raspberrypi-bootloader sudo apt-get update sudo apt-get upgrade //配置 rasp ...

  4. linux备忘

    一.数字计算 echo $[3600*24] --只能计算整数echo $((3600*4)) --只能计算整数 expr 3600 \* 24        --注意空格,*要加\,只能计算整数ec ...

  5. linux备忘簿

    1.ubuntu中按ctrl+s锁定屏幕,按ctrl+q解锁. 2.vim中撤销和恢复为u和ctlr+r 3.静态库和动态库编译命令: (1)得到hello.o g++ -c hello.cpp (2 ...

  6. linux备忘命令

    1,安装vim以后把vim中的tab键设置为4个空格 vim ~/.vimrc一下,如果没有会创建新的, 然后添加下面两行: set ts=4 set expandtab 如果第二行内容是noexpa ...

  7. Linux常用命令速查备忘

    Linux常用命令速查备忘   PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...

  8. linux 指令备忘

    linux 指令备忘 1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和"..& ...

  9. ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘

    本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...

  10. Linux基础之常用基本命令备忘

    Linux基础之常用基本命令备忘 PWD   查询当前所在Linux上的位置 /         根目录 CD(change directory)切换目录  语法 CD /(注意添加空格)   LS ...

随机推荐

  1. QT实现参数批量配置

    QT实现批量配置 需求 一些参数需要批量化配置 之前搭建的FPGA的寄存器控制模型 使用AXI-lite搭建 直接操作上位机 这里需要一个可以快速配置所有参数的上位机 需要保存文件,可以保留上一次的参 ...

  2. multisim中常见的显示器

    multisim中常见的显示器 1.实验原理 multisim中做实验仿真一般需要各种各样的仿真器来模拟实验结果.这里列举几种比较常见的显示器以便后面快速选择. 2.实验操作 (1)LED[二极管] ...

  3. 基于logisim-D触发器设计四人抢答电路

    实验1:设计一个简易4人知识竞赛抢答电路,要求是: 裁判掌握一个按钮,作用是给电路复位和发出抢答开始命令;4名竞赛者各掌握一个按钮,每人对应一个指示灯,在主持人发出开始抢答命令后,哪位参赛者先按钮其对 ...

  4. Chrome浏览器安装离线插件Markdown Here

    前言 近期刚开通了微信公众号,想在上面发表一些自己的文章,由于排版问题很浪费时间,公众号后台本身不支持Markdown语法,所以就需要利用Markdown Here插件使得公众号后台支持Markdow ...

  5. 国民经济行业分类与代码(GB/T 4754-2002、GB/T 4754-2011、GB/T 4754-2017)并存入MySQL数据库【可获取下载】

    戳链接下载:https://download.csdn.net/download/weixin_45556024/34913490 或关注公众号[靠谱杨阅读人生]回复[行业]获取. 整理不易,资源fu ...

  6. .NET Core 多线程的用法,以及用例

    1.使用 Thread 类 Thread 类是 .NET 中最基本的多线程操作方式之一,可以使用它创建并启动新线程.以下是一个简单的例子,创建一个新的线程并运行: using System; usin ...

  7. 你不知道的java对象序列化的秘密

    目录 简介 什么是序列化 重构序列化对象 序列化不是加密 使用真正的加密 使用代理 Serializable和Externalizable的区别 总结 简介 你知道序列化可以使用代理吗?你知道序列化的 ...

  8. OpenHarmony 4.1 Release版本正式发布,邀您体验

    春风轻拂的4月,OpenAtom OpenHarmony(以下简称"OpenHarmony")4.1 Release版本如期而至,开发套件同步升级到API 11 Release. ...

  9. Docker 14 Docker Compose

    概述 使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器. 然而微服务架构的应用系统一般包含若干个微服务,每个微服务 ...

  10. Qt线程简单使用二:QObject~创建任务类

      需求: 点击QPushButton按钮,QLabel中的数字,不断累加,一直到999.   做法: 创建任务类,用来完成任务,创建子线程,将任务类放到子线程中,点击QPushButton后,先发送 ...