linux系统编程-1、基础知识

2023-11-14

前言:Linux系统编程的基础系列文章,随着不断学习会将一些知识点进行更新,前期主要是简单了解和学习。

shell

shell:命令解释器,根据输入的命令执行相应命令。
可通过以下命令,查看当前系统支持哪些shell

cat /etc/shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

bash

bash是许多Linux平台的内定Shell。

命令和路经补齐

在bash下敲命令时,Tab键可以补全已经敲了一部分的文件名和目录名。如果是Ubuntu系统,系统默认启用了bash completion,还可以补全命令的某些参数、Makefile目标等等。

历史记录

history

随着你每输入一个字母,bash会做增量式(increasingly)查找,也可以反复按Ctrl-r或Ctrl-s向前向后查找。

功能 快捷键 助记
Ctrl+p previous
Ctrl+n next
Ctrl+b backward
Ctrl+f forward
Del Ctrl+d delete光标后面的
Home Ctrl+a the first letter
End Ctrl+e end
Backspace Backspace delete光标前面的

目录和文件

对于所有东西来说都是文件

类Unix系统目录结构

根目录 /

bin         //系统可执行文件,如命令
boot        //内核和启动程序,所有和启动相关的文件都保存在这里
    grub    //引导器相关文件
dev         //设备文件
etc         //系统软件的启动和配置文件,系统在启动过程中需要读取的文件都在这个目录
home        //用户的主目录,下面是自己定义的用户名的文件夹
lib         //系统程序库文件,这个目录里存放着系统最基本的动态链接共享库
media       //挂载媒体设备
mnt         //用于让用户临时挂载别的文件系统
opt         //可选的应用软件包
proc        //系统内存的映射
sbin        //管理员系统程序
sys         //反映当前所接的设备
tmp         //临时文件夹
usr         //
    bin     //应用程序
    game    //游戏程序
    include
    lib     //应用程序的库文件
    lib64   //
    local   //包含用户程序等
    sbin    //管理应用程序

用户目录

/home/user

绝对路径:从/目录开始描述的路径
相对路径:从当前位置开始描述的路径

.表示当前目录
…表示上一级目录,即父目录

ls

ls -a   #列出隐藏文件,文件中以"."开头的均为隐藏文件  
ls -l   #列出文件的详细信息
ls -R   #连同子目录中的内容一起列出

ls -l
用此命令显示的信息中,会出现以下

drwxr-xr-x 2 kudio kudio 4096 Dec 27 18:42 Desktop
-rw-r--r-- 1 kudio kudio 8980 Dec 27 18:37 examples.desktop
drwxrwxr-x 3 kudio kudio 4096 Dec 28 07:00 VmareTools

开头由10个字符构成的字符串,第一个字符表示文件类型

- 普通文件
d 目录和文件
l 符号链接
b 块设备文件
c 字符设备文件
s socket文件,网络套接字
p 管道

后面九个字符表示文件的访问权限,分为3组,每组3位。

  • 第一组表示文件属主的权限
  • 第二组表示同组用户的权限
  • 第三组表示其他用户的权限

且各权限如下所示

  • r 可读权限
  • w 可写权限
  • x 可执行权限,对于目录表示进入权限
  • s 当文件被执行时,把该文件的UID赋予执行进程的UID
  • t 设置标志位
    • 没有相应位置的权限

目录大小一般为4096的整数倍

cd

change dir 改变当前所在路径

which

查看指定命令所在路径

pwd

查看当前所在路径

mkdir

mkdir [OPTION] DIRECTORY…
创建目录DIRECTORY,可以一次创建多个

$mkdir aa bb cc

OPTION如果是-p,表示可以连同父目录一起创建

$mkdir -p aa/bb/cc
$tree

└── aa
    └── bb
        └── cc

rmdir

rmdir [OPTION]… DIRECTORY…
删除空目录,可以一次删除多个,OPTION如果是-p,表示可以连同父目录一起删除

touch

  • 如果文件不存在,则创建一个字节数为0的文件
  • 如果该文件已经存在,则更新文件时间

rm

删除文件

rm -r ff 递归删除,即删除所有文件即删除目录
rm -rf ff 强制删除该目录

mv

重命名

mv file1 file2

移动文件

mv file1 ~/

cp

拷贝文件

cp file1 file2

拷贝目录

cp dir1 dir2 -r

cat

查看文件内容,输出到终端

more和less

ln

链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。如果给ln命令加上-s选项,则建立符号链接。

ln -s a.c b.c

符号链接只是该文件指向链接的文件。可以发现符号链接文件大小只有3即链接的文件名大小。

-rw-rw-r-- 1 kudio kudio 74 Jan 26 04:55 a.c
lrwxrwxrwx 1 kudio kudio  3 Jan 26 04:55 b.c -> a.c

wc

利用 wc 指令我们可以计算文件的 Byte 数、字数、或是列数,若不指定文件名称、或是所给予的文件名为“-”,则 wc 指令会从标准输入设备读取数据。

du

查看某个目录的大小
以M为单位

du -hm

以B为单位

du -hb

以K为单位,4K的整数倍

du -hk

df

查看磁盘使用情况

文件属性和用户用户组

chmod

文字设定法

chomd [who] [+/-/=] [mode]文件名

操作对象who可是下述字母中的任一个或者它们的组合:

  • u表示“用户”,即文件或目录的所有者
  • g表示“同组用户”,即与文件属主有相同组ID的所有用户
  • o表示“其他用户”
  • a表示“所有用户”,为系统默认值

操作符号可以是

  • +添加某个权限
  • -取消某个权限
  • =赋予给定权限并取消其他所有权限

mode表示的权限可用下述字母的任意组合

  • r可读
  • w可写
  • x可执行

数字设定法

chomd [mode]文件名

数字表示的属性含义

  • 0表示没有权限
  • 1表示可执行权限
  • 2表示可写权限
  • 4表示可读权限

然后将其相加,即3个0到7的八进制数,其顺序是u、g、o

查找与检索

find

find ./* -name "*.c"

安装卸载软件

apt-get

更新源服务器列表

sudo vi /etc/apt/sources.list

更新完服务器列表后需更新源

sudo apt-get update	更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-get upgrade 更新已安装的包 
sudo apt-cache search package 搜索软件包
sudo apt-cache show package 获取包的相关信息

磁盘管理

mount

mount [-t vfstype] -o options device dir

-t vfstype 指定文件系统的类型,通常不必指定。mount会自动选择正确的类型
loop:用来把一个文件当成硬盘分区挂接上系统

  • ro:采用只读方式挂接设备
  • rw:采用读写方式挂接设备
  • iocharset:指定访问文件系统所用字符集
    device:要挂接的设备

挂载U盘

  1. 检测存储设备名称
sudo fdisk -l
  1. 挂载存储设备sdb1到挂载点/mnt目录
sudo mount /dev/sdb1/mnt
  1. 访问/mnt
  2. 卸载/mnt
sudo umount /mnt

压缩包管理

tar

wget --no-check-certificate https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
tar -xzvf Python-3.6.5.tgz

man pthread_mutex_init
提示:No manual entryfor pthread_mutex_init

sudo apt-get install manpages-posix manpages-posix-dev

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux系统编程-1、基础知识 的相关文章

  • 如何调用位于其他目录的Makefile?

    我正在尝试这样做 我想打电话给 make Makefile存在于其他目录中 abc可以使用位于不同目录中的 shell 脚本的路径 我该怎么做呢 由于 shell 脚本不允许我cd进入Makefile目录并执行make 我怎样才能编写she
  • gethostbyname() 或 getnameinfo() 如何在后台工作?

    How gethostbyname or getnameinfo 在后台工作 include
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • gentoo crontab:为什么这个简单的 crontab 不起作用?

    我使用 GENTOO 发行版 crontab e 35 12 root php5 home www cron php 当我手动运行时 php5 php5 home www cron php 这有效 它向我发送了一封电子邮件 然后我检查日期
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 在 Ubuntu 16.04 上找不到 printf.c

    我最近切换到Ubuntu 16 04 我在用vscode作为 Ubuntu 上的 IDE 我配置了其他语言 但我无法做到这一点C C 我创建c cpp properties json launch json tasks json 当我开始编
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht

随机推荐