如何在linux查看用户列表系统下用QT创建窗口实现线程同步? 如果有知道的可以私加我~有酬~

在嵌入式linux查看用户列表系统上鈳以使用多个平台插件:EGLFS,DirectFB或Wayland。但是这些插件的可用性取决于Qt的配置方式。

EGLFS是许多主板上的默认插件如果不合适,请使用QT_QPA_PLATFORM环境变量來请求另一个插件另外,对于快速测试请使用-platform具有相同语法的命令行参数。

注意:从Qt 5.0开始Qt不再具有自己的窗口系统(QWS)实现。对于單流程用例是一种出色的解决方案;支持多流程用例。

嵌入式linux查看用户列表设备的平台插件

是OpenGL与本机窗口系统之间的接口Qt可以将EGL用于仩下文和表面管理,但是API不包含特定于平台的内容创建本机窗口(不一定是屏幕上的实际窗口),仍然必须通过特定于平台的方式来完荿这就是为什么我们需要主板或GPU专用的适配代码的原因。通常这些改编提供为:

  • EGLFS挂钩 -将单个源文件编译到平台插件中
  • EGL设备集成 -动态加載的插件

EGLFS是一个平台插件,用于在EGL和OpenGL ES 2.0之上运行Qt5应用程序而没有像X11或Wayland这样的实际窗口系统。除了Qt Quick 2和本机OpenGL应用程序之外EGLFS还支持软件渲染的窗口,例如对于,小部件的内容使用CPU渲染为图像然后将其上载为纹理并由插件进行合成。

对于包含GPU的现代嵌入式linux查看用户列表设备嶊荐使用EGLFS插件。

EGLFS迫使第一顶层窗口-无论是或 -成为全屏该窗口也被选择为所有其他顶级窗口小部件都合并到其中的窗口小部件窗口。例洳对话框,弹出菜单或组合框这种行为是必要的,因为使用EGLFS时总是只有一个本机窗口和一个EGL窗口表面;这些属于首先创建的小部件戓窗口。当存在显示应用程序生命周期的主窗口并且所有其他窗口小部件不是非顶层窗口或在之后创建的所有其他窗口小部件时此方法效果很好。

基于OpenGL的窗口还有其他限制EGLFS支持单个单一的全屏GL窗口(从Qt 5.3开始),例如基于OpenGL的或。不支持打开其他OpenGL窗口或将此类窗口与基于嘚内容混合使用;Qt使用错误消息终止应用程序

如有必要,eglfs可以使用以下环境变量进行配置:

除了内置的钩子之外还可以使用动态加载嘚插件来提供设备或供应商特定的适配。此环境变量强制执行特定的插件例如,将其设置为eglfs_kms将使用KMS / DRM后端仅当在设备makespecs中未指定静态或内置挂钩时,这才是一个选项实际上,很少使用传统的内置挂钩现在几乎所有后端都已迁移到插件。设备的制造规范仍然包含相关内容EGLFS_DEVICE_INTEGRATIONentry:该特定设备的首选后端的名称这是可选的,但对于避免在目标系统中存在多个插件的情况下避免设置此环境变量非常有用在桌面环境中,根据DISPLAY环境变量的存在对KMS或X11后端进行优先级排序。注意:在某些板上使用特殊值none代替实际的插件。这表明将EGL与帧缓冲区一起使用鈈需要任何特殊的集成无需加载任何插件。
指定物理屏幕的宽度和高度(以毫米为单位)在无法从帧缓冲设备/ dev / fb0或通过其他方式查询该徝的平台上,使用默认DPI为100使用此变量来覆盖任何此类默认值。设置此变量很重要因为基于或基于Qt Quick Controls的应用程序依赖于这些值。使用硬编碼设置运行这些应用程序可能会导致用户界面元素的大小不适合所使用的显示器
指定在基于的应用程序中应用于软件渲染内容的轮播。支持的值为180、90和-90此变量不适用于基于OpenGL的窗口,包括Qt QuickQt Quick应用程序可以在其QML场景中应用转换。eglfs无论应用程序类型如何标准鼠标光标都会始終将值考虑在内,并具有适当放置和旋转的指针图像但是,特殊的游标实现(例如KMS / DRM后端的硬件游标)可能不支持旋转
fbdev子系统的后端有關。通常在默认交换间隔为1的情况下,Qt假设调用eglSwapBuffers()会处理vsync如果不是(例如由于驱动程序错误),请尝试将其设置QT_QPA_EGLFS_FORCEVSYNC为非零值
设置后,在eglfs创建新的上下文窗口或屏幕外表面时,红色绿色和蓝色通道大小将被忽略。而是插件请求每通道8位的配置。这对于在默认情况丅选择每像素少于32或24位的配置(例如5-6-5或4-4-4)的设备很有帮助尽管知道它们不理想,例如由于条带效果代替更改应用程序代码,此变量提供了强制执行24或32 bpp配置的快捷方式

此外,还提供以下不常用的变量:

覆盖帧缓冲设备默认值为/dev/fb0。在大多数嵌入式平台上此变量不是很楿关,因为帧缓冲区仅用于查询显示尺寸等设置但是,在某些设备上此变量提供了指定在多个显示设置中使用哪个显示器的功能,类姒于的fb参数
包含屏幕的宽度和高度(以像素为单位)。虽然eglfs尝试从帧缓冲设备/ dev / fb0确定尺寸但这并不总是有效。可能需要手动指定尺寸
覆盖屏幕的颜色深度。在帧缓冲设备/ dev / fb0不可用或查询不成功的平台上使用默认值32。使用此变量来覆盖任何此类默认值注意:此变量仅影響报告的色深值。它与EGL配置和OpenGL渲染所使用的颜色深度无关
默认情况下,1请求的交换间隔为使用此变量可以同步到显示器的垂直刷新。使用此变量覆盖交换间隔的值例如,传递0将禁用交换阻塞从而导致在没有任何同步的情况下尽可能快地运行。
设置后一些调试信息會打印在调试输出上。例如在创建新上下文时,将打印输入和所选EGL配置的属性与Qt Quick的QSG_INFO变量一起使用时,您可以获得有用的信息可用于解决与EGL配置有关的问题。

除了QT_QPA_EGLFS_DEBUGeglfs还支持Qt的现代分类日志系统。以下日志记录类别可用:

  • qt.qpa.egldeviceintegration–为动态加载的后端启用日志记录使用此类别可鉯检查正在使用的后端。
  • qt.qpa.input–启用evdevlibinput输入处理程序的调试输出使用此类别来检查是否识别并打开了给定的输入设备。

运行之后configure请确保检查其输出。这是识别您是否启用了必需的EGLFS后端libudev或libinput的最简单,最快的方法简而言之,如果您的configure输出中有不希望的“否”请运行:

打开詳细输出,以便您可以查看每个configure测试的编译器和链接器调用

注意:如果经常遇到有关缺少标题,库或看似神秘的链接器故障的错误则咜们通常是sysroot不完整或损坏的迹象,并且与Qt不相关

例如,当使用Broadcom专有的图形驱动程序作为Raspberry Pi的目标时输出应包含以下内容:

如果不是这种凊况,则不建议继续进行构建因为没有Raspberry Pi特定的后端,加速的图形将无法工作即使Qt的其余部分也可以成功编译。

该插件通过linux查看用户列表的fbdev子系统直接写入帧缓冲区仅支持软件渲染的内容。请注意在某些设置下,显示性能可能会受到限制

但是,由于在linux查看用户列表內核中已弃用fbdev因此从Qt 5.9开始,还提供了DRM哑缓存支持要使用它,请将QT_QPA_FB_DRM环境变量设置为非零值设置后,只要系统支持哑缓存/dev/fb0就不会访问舊式帧缓存设备。取而代之的是通过DRM API来设置呈现,类似于eglfs_kmsEGLFS中的后端输出经过双缓冲和页面翻转,也为软件渲染的内容提供了适当的垂矗同步

注意:使用哑缓冲区时,以下描述的选项均不适用因为会自动查询物理和逻辑屏幕大小之类的属性。

fb0要指定多个设置,请用冒号(:)分隔

指定帧缓冲设备。在多个显示器设置上此设置使您可以在不同的显示器上运行该应用程序。当前无法从一个Qt应用程序中使用多个帧缓冲区。
指定屏幕尺寸(以像素为单位)该插件尝试从帧缓冲设备查询物理和逻辑的显示尺寸。但是此查询可能并不总是會导致正确的结果。可能需要明确指定这些值
指定物理宽度和高度(以毫米为单位)。
指定屏幕的左上角偏移量(以像素为单位)默認位置为(0, 0)
指定不将虚拟终端切换到图形模式(KD_GRAPHICS)通常,启用图形模式会禁用闪烁的光标和屏幕空白但是,设置此参数后这两个功能也会被跳过。

从Qt 5.9 开始就窗口大小调整策略而言,EGLFS和的行为已同步:使用两个平台插件第一个顶级窗口被迫覆盖整个屏幕。如果不希朢这样做请将QT_QPA_FB_FORCE_FULLSCREEN环境变量设置为0从早期的Qt版本恢复行为。

当您连接了多个显示器时从一个单独的Qt应用程序中定位一个或多个这些显示器嘚支持级别在平台插件之间会有所不同,并且通常取决于设备及其图形堆栈

使用KMS / DRM后端时,EGLFS报告中的所有可用屏幕应用程序可以通过将具有不同窗口的不同屏幕作为目标。

注意:每个屏幕一个全屏窗口的限制仍然适用也不支持在使可见后更改屏幕。因此嵌入式应用程序必须在调用()之前进行所有必需的()调用。

当您开始在给定的嵌入式设备上进行开发时通常需要验证设备和驱动程序的行为,以忣所连接的显示器是否按预期工作一种简单的方法是使用hellowindow示例。使用-platform eglfs --multiscreen --timeout参数启动它会在每个连接的屏幕上显示旋转的Qt徽标几秒钟

KMS / DRM后端还通过JSON文件支持自定义配置。要启用此功能请将QT_QPA_EGLFS_KMS_CONFIG环境变量设置为文件名。您也可以通过Qt资源系统将此文件嵌入到应用程序中

这些配置选項中的大多数都适用于所有基于KMS / DRM的后端,而与缓冲区管理技术(GBM或EGLStreams)无关

在这里,我们配置指定的设备以便:

  • 它不会使用硬件光标(鈳通过OpenGL渲染鼠标光标;默认情况下会启用硬件光标,因为它们效率更高)
  • 它使用标准EGL pbuffer表面支持(默认情况下,此功能处于禁用状态而昰使用gbm表面)。
  • 当HDMI的分辨率为时VGA接口上的输出被禁用。

另外这样的配置还禁止通过libudev; 查找设备。而是使用指定的设备

如果mode未定义,则選择系统的首选模式为可接受的值mode是:offcurrentpreferredskip宽度x高度,宽度x高度@vrefresh或模式行字符串。

指定将current选择一种分辨率与当前模式匹配的模式因为仅当所需模式实际上与活动模式不同时才进行模式设置(除非通过QT_QPA_EGLFS_ALWAYS_SET_MODE环境变量强制设置),所以此值可用于保存当前模式以及Qt未触及嘚平面中的任何内容

skip使输出的连接器被忽略,就像已断开连接一样off类似于,但它更改了模式并关闭了显示

默认情况下,DRM层报告的所囿屏幕都被视为一个大的虚拟桌面鼠标光标的实现考虑到了这一点,并按预期在屏幕上移动尽管不建议这样做,但可以通过在配置中設置separateScreens为来禁用虚拟桌面false

默认情况下,虚拟桌面是根据系统报告的连接器顺序从左到右形成的要更改此设置,请设置virtualIndex一个从0开始的值

唎如,以下配置使用首选分辨率但要确保虚拟桌面的左侧是连接到HDMI端口的屏幕??。而右侧是连接到DisplayPort的屏幕:

数组中元素的顺序无关紧偠具有未指定虚拟索引的输出将放置在其他输出之后,并保留DRM连接器列表中的原始顺序

要创建垂直桌面空间(即从上到下而不是从左箌右堆叠),请virtualDesktopLayout在其后添加一个device值为的属性vertical

警告:建议虚拟桌面中的所有屏幕使用相同的分辨率,否则当进入仅存在于一个给定屏幕上嘚区域时诸如鼠标光标之类的元素可能会以意外的方式表现。

如果virtualIndex还不够则virtualPos可以使用该属性来明确指定相关屏幕的左上角位置。以前媔的示例为例假设HDMI1的分辨率为1080p,下面的代码段将第二个基于HDMI的屏幕放在第一个屏幕下方:

注意:当需要鼠标支持时避免进行此类配置。对于非线性布局鼠标光标的行为可能是意外的。触摸应该没有问题

注意:不建议使用不同的物理尺寸,从而避免使用不同的逻辑DPI因为某些图形堆栈组件不了解多个屏幕,而仅依赖于第一个屏幕的值这可能会导致意外问题。

从每个有源输出outputs阵列对应于一个例如从報道()默认情况下,()报告的主屏幕是首先注册的屏幕如果您未使用virtualIndex,则表示该决定基于DRM连接器的顺序要覆盖此primary属性,请将属性设置trueoutputs列表中所需的条目

例如,即使系统碰巧先报告HDMI时也要确保与VGA输出相对应的屏幕是主要屏幕,请执行以下操作:

为了进行故障排除从KMS / DRM后端启用调试日志可能会很有用。为此请启用qt.qpa.eglfs.kms分类日志记录规则。

注意:在嵌入式环境中与完整的窗口系统相比,虚拟桌面嘚局限性更大应避免重叠多个屏幕的窗口,非全屏窗口以及在屏幕之间移动窗口并且这些窗口可能无法正常运行。

对于多屏幕设置朂常见和最受支持的用例是为每个屏幕打开专用的或。使用threadedQt Quick场景图的默认渲染循环这些窗口中的每个窗口都将拥有自己的专用渲染线程。这很好因为可以基于vsync独立限制线程,并且不会互相干扰使用basic循环可能会出现问题,导致动画质量下降

例如,发现所有连接的屏幕並为每个屏幕创建一个可以像这样完成:

从Qt 5.11开始支持屏幕克隆(镜像)。这通过clones属性启用:

在这种情况下通过DisplayPort连接的显示器上的内容將与HDMI上的内容相同。通过在两者上扫描出相同的缓冲区来确保这一点

但是,仅当分辨率相同接受的缓冲区格式没有不兼容并且应用程序在与克隆目标相关联的上没有任何输出时,此功能才能起作用在实践中,后者是指没有与相关联的中的问题-在DP1的例子-必须永远执行()操作确保这些由配置和应用程序决定。

从Qt 5.11开始支持通过DRM渲染节点的无头模式。这允许执行GPU计算(OpenGL计算着色器OpenCL)或屏幕外OpenGL渲染,而無需DRM主权限在这种模式下,即使已经有另一个进程输出到屏幕应用程序也可以运行。

只需切换device/dev/dri/card0/dev/dri/renderD128因为有一些操作无法在无头的模式下进行是对自己徒劳的。因此它必须与一个headless属性结合使用,例如:

请记住窗口的大小仍要与现在的虚拟屏幕大小匹配,因此需要在headless屬性中指定大小也缺少基于vsync的限制。

启用后应用程序有两种典型选择以无头模式执行屏幕外渲染:

使用一个普通的窗口(例如子类),以该窗口的默认帧缓冲区为目标这gbm_surface实际上意味着:

或带有额外FBO的典型屏幕外方法:

KMS / DRM可以与两种不同的DRM API(旧版原子版)一起使用。DRM原孓API的主要好处是允许在同一renderloop中进行多个DRM平面更新而旧版API每个vsync需要一个平面更新。

当您的应用程序需要将内容混合到叠加层中并将所有更噺保持在同一vsync内时原子API很有用。仍然不是所有的设备都支持此API在某些较旧的设备上可能不可用。默认情况下KMS后端将使用旧版API,但是您可以启用DRM原子API并将QT_QPA_EGLFS_KMS_ATOMIC环境变量设置为1。

使用比屏幕分辨率小的帧缓冲区也很有用使用DRM原子,可以使用sizeJSON文件中的参数来实现以下示例茬视频模式下使用帧缓冲区:

该后端通常在Tegra设备上使用,类似于上面提到的KMS / DRM后端不同之处在于它依赖于EGLDevice和EGLStream扩展而不是GBM。

有关此方法的技術细节请查看。

从Qt 5.7开始此后端与基于GBM的后端共享许多内部实现。这意味着支持多个屏幕和高级配置QT_QPA_EGLFS_KMS_CONFIG某些设置,例如hwcursorpbuffers不适用

默认凊况下,后端将自动为每个输出的默认平面选择正确的EGL层必要时,可以通过将QT_QPA_EGLFS_LAYER_INDEX环境变量设置为所需图层的索引来覆盖此设置该方法当湔不支持多个输出,因此应仅将其用于具有单个屏幕的系统要查看可用的层并调试潜在的启动问题,请启用日志记录类别qt.qpa.eglfs.kms

在某些情况丅,即使屏幕报告已经设置了所需的分辨率也可能需要在应用程序启动时执行视频模式设置。通常可以进行优化但是如果屏幕保持关閉状态,请尝试将环境变量设置为QT_QPA_EGLFS_ALWAYS_SET_MODE非零值然后重新启动应用程序。

要配置后端使用的EGLStream对象的行为请使用QT_QPA_EGLFS_STREAM_FIFO_LENGTH环境变量。这假定KHR_stream_fifo目标系统支歭默认情况下,流以邮箱模式运行要切换到FIFO模式,请将值设置为1或更大该值指定流可以容纳的最大帧数。

在某些系统上可能有必偠通过预定义的连接器来定位特定的覆盖平面。仅强制通过层索引QT_QPA_EGLFS_LAYER_INDEX不执行平面配置因此本身不适合。相反在这种特殊情况下,请使用QT_QPA_EGLFS_KMS_CONNECTOR_INDEXQT_QPA_EGLFS_KMS_PLANE_INDEX环境变量设置这些选项后,将仅使用指定的连接器和平面所有其他输出将被忽略。后端将负责挑选与所需平面相对应的EGL层并对平媔进行配置。

KMS / DRM上具有多个屏幕的系统中的触摸输入

在多显示器系统中触摸屏还需要考虑其他因素,因为触摸事件必须路由到正确的虚拟屏幕并且这需要在触摸屏和显示输出之间进行正确的映射。

映射是通过上一部分中指定QT_QPA_EGLFS_KMS_CONFIG和描述的JSON配置文件完成的当数组touchDevice的元素中存在屬性时outputs,该值将被视为设备节点并且触摸设备将与相关的显示输出相关联。

例如假设我们的触摸屏的设备节点为/ dev / input / event5,并且是集成到显示器中的触摸屏该显示器通过HDMI作为辅助屏幕连接,则以下配置可确保正确的触摸(和合成鼠标)事件转换:

注意:如有疑问请QT_LOGGING_RULES=qt.qpa.*=true在启动应鼡程序之前通过设置环境变量来启用来自图形子系统和输入子系统的日志记录。这将有助于识别正确的输入设备节点并可能发现可能难鉯调试的输出配置问题。

注意:从Qt 5.8开始仅evdevtouch输入后端支持以上功能。其他变体例如基于libinput的变体,将继续将事件路由到主屏幕要在有多個输入后端可用的系统上强制使用evdevtouch,请将环境变量设置QT_QPA_EGLFS_NO_LIBINPUT1

带有其他后端的eglfs

其他后端通常基于直接通过供应商的EGL实现定位帧缓冲区或合成API嘚后端,通常对多个显示器提供有限的支持或不提供支持在具有Vivante GPU的基于i.MX6的板上,与QT_QPA_EGLFS_FBlinux查看用户列表fb类似可以使用环境变量来指定要定位嘚帧缓冲区。在Raspberry Pi上QT_QPA_EGLFS_DISPMANX_ID环境变量可用于指定要输出到的屏幕。该值对应于DISPMANX_ID_常量请参阅Dispmanx文档。请注意与KMS / DRM不同,这些方法通常不允许从同一應用程序输出到多个屏幕或者,也可以使用特定于驱动程序的环境变量或内核参数来控制使用的帧缓冲区请参阅嵌入式板的文档。

在運行基于Qt Quick或类的Qt应用程序之前具有固定数量专用视频内存的系统可能需要格外小心。对于这些应用程序默认设置可能不足,尤其是当咜们以高分辨率(例如全高清)屏幕显示时。在这种情况下它们可能会以意外的方式开始失败。建议确保至少有128 MB的GPU内存可用对于没囿为GPU保留固定内存量的系统,这不是问题

使用fbplugin参数指定要使用的帧缓冲设备。

面向主机平台的插件像eglfs和linux查看用户列表fb默认情况下捕获Φ断(安装信号处理器SIGINT),暂停和继续(SIGTSTPSIGCONT)和终止(SIGTERM)。通过这种方式键盘,光标终端以及其他可能的图形状态可以在应用程序终圵或被停用由于恢复kill,或Ctrl+CCtrl+Z(尽管只有在QT_QPA_ENABLE_TERMINAL_KEYBOARD设置时才可以通过键盘终止或挂起,如上面“输入”部分所述)但是,在某些情况下捕获SIGINT鈳能是不希望的,因为它可能与例如远程调试冲突因此,提供了环境变量QT_QPA_NO_SIGNAL_HANDLER以退出所有内置信号处理

Qt通常用于fontconfig提供对系统字体的访问。洳果fontconfig不可用则Qt将退回到使用QBasicFontDatabase。在这种情况下Qt应用程序将在Qt的lib/fonts目录中查找字体。Qt将自动检测预渲染的字体和TrueType字体可以通过设置QT_QPA_FONTDIR环境变量来覆盖此目录。

有关支持的格式的更多信息请参见。

注意: Qt不再在lib/fonts目录中附带任何字体这意味着由平台(系统映像)提供必要的字體。

嵌入式linux查看用户列表设备上用于窗口系统的平台插件

这是在常规桌面linux查看用户列表平台上使用的X11插件在某些提供X和必要的开发文件嘚嵌入式环境中,此插件的功能与在常规PC桌面上一样

注意:在某些设备上,X下没有EGL和OpenGL支持因为EGL实现与Xlib不兼容。在这种情况下XCB插件是茬没有EGL支持的情况下构建的,这意味着Qt Quick 2或其他基于OpenGL的应用程序无法与此平台插件一起使用但是,它仍然可以用于运行软件渲染的应用程序(例如基于)。

通常不建议在嵌入式设备上使用XCB。像eglfs这样的插件可能会提供更好的性能和硬件加速

是一种轻巧的窗户系统。或更確切地说它是客户端与显示服务器对话的协议。

在Qt中使用线程比较简单只需要繼承QThread类并重新实现其run()函数,代码如下

只需在run()函数中填写所需要的功能代码然后创建一个MyThread实例,并以QThread::start()函数启动这个实例就可以了这样run()函數中的功能代码就运行在一个独立的线程中。

1. 多线程程序的行为无法预测当我们多次执行同一个程序时,每次运行的结果都不相同;

2. 线程的执行顺序无法保证它与操作系统的调度策略和线程优先级等因素有关;

3. 线程的切换可能发生在任何时刻任何地点;

4. 线程对代码的敏感高,代码的细微修改可能产生意向不到的结果;

为了有效的使用线程必须对其进行控制。

线程间的关系:互斥关系和同步关系

QMutex类提供┅个保护一段临界区代码的方法它每次只允许一个线程访问这段临界区代码

QMutex类的lock函数用来锁住互斥量,如果互斥量处于解锁状态当前線程就会立即抓住并锁定它;否则当前线程就会被阻塞,直到持有这个互斥量的线程对它解锁线程调用lock函数后就会一直持有这个互斥量知道再次调用unlock函数。  也就是说 lock和unlock函数是成对出现的这就出现一个问题,如果说你的功能代码里需要返回一个数据比如:

上面的代码显然会囿一个问题:return 后的代码是不是执行的这就会出现这个线程不会释放乇鹗互斥量导致其他行程无法获得互斥量而一直处于阻塞状态;

Qt给出叻解决方法,QMutexLocker类可以简化互斥量的处理

构造函数是: QMutexLocker ( QMutex * mutex )在构造函数中接受一个QMutex对象作为参数并将其锁定,在析构函数中解锁这个互斥量

那么上面有点问题的代码就可以改成如下:

上面的locker作为局部变量会在数据退出的时候结束其作用域,从而自动调用析构函数来对互斥量mutex解鎖

信号量对互斥量做了扩充,互斥量只能锁定一次而信号量可以获取多次acquire()函数用于获取n个资源,当没有足够的资源时调用者会被阻塞直到有足够的可用资源,release()函数用于释放n个资源

生产者/消费者的问题中有两处关键:如果生产者过快地生产数据,将会覆盖消费者还没囿读取的数据;如果消费者过快地读取数据将越过生产者并且读取到一些过期数据。

两个关键的两个处理方法:

1.先让生产者填满整个缓沖区然后等消费者读取整个消费区;

2.让生产者和消费者同时分别操作缓冲区的不同部分,需要两个信号量;

freeBytes信号量控制可被生产者填充嘚缓冲区部分usedBytes信号量控制可被消费者读取的缓冲区部分。这两个信号量互为补充的其中freeBytes信号量被初始化为最大,usedBytes被初始化为0

除了互斥與同步控制多线程编程还涉及死锁和优先级控制两个经典话题。

linux查看用户列表中的线程调度策略:

死锁和优先级反转两者在很大程度仩都是因为线程的互斥与同步操作不当引起的。

死锁的产生必须具备以下4个条件:

在具有图形用户界面的Qt应用程序中主线程由GUI线程充当,该线程是Qt中唯一可以执行GUI相关操作的线程即一个具有图形用户界面的Qt应用程序只能有一个GUI线程。但却可以同时拥有一个或多个GUI线程为笁作线程处理其他耗时操作

这里抛出一个问题:非GUI线程怎么和GUI线程通讯?

可重入(reentrant):如果一个啊哈念书能同事被多个线程调用并且为每┅个调用者提供一份单独的数据,那么称这个函数是可重入的

线程安全(thread-safe):如果一个函数能同事被多个线程调用,并且所有的调用者引用哃一份数据访问数据时串行处理,那么称这个函数是线程安全的

GUI线程是唯一允许创建QApplication对象并且对它调用exec()函数的线程。在调用了exec()函数后GUI线程要么等待一个事件,要么处理一个事件每一个线程都有自己的事件循环。

linux查看用户列表是一个基于POSIX和Unix的多鼡户、多任务、支持多线程和多CPU的性能稳定的操作系统可免费使用并自由传播。

  • 在自由的时代用户应该免费享有对软件源代码阅读、修妀的权利
  • 软件公司可以靠提供服务和训练获得盈利。

)而是和这个文件是否具有“x”权限决定的。>

    • r:代表具有读取目录结构列表的权限(你可以使用ls命令将目录下的所有列表读出来)
    • w:这个权限对目录来说可是很强大的表示你具有更改该目录结构列表的权限

    • 删除已经存在的文件或者目录(无论文件的权限是怎样的)
    • 将已经存在的文件或者目录重命名
    • 转移该目录内的文件、目录位置
  • x:目录虽然不可以被拿来执行,但是目录的x代表的是用户能否进入该目录成为工作目录的用途(所谓工作目录就是你当下的目录,也就是时候如果目录不具有x权限,那么你就不能通过cd命令进入到该目录下工作)

能不能进入某一目录,只与该目录的x 权限有关

linux查看用户列表的单一文件或者目录的最大容许文件名为255个字符,包含完整路径名记(/)的完整文件名为4096个字符。


linux查看用户列表的文件系统是采用级层式的树状目录结构茬此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录在linux查看用户列表世界里,一切皆文件

【linux查看用户列表系统目录结構】

登录系统后在当前命令窗口下输入 ls / 你会看到

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

/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 这是linux查看用户列表2.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的预设放置也是茬这里


路径的写法,由根目录 / 写起例如: /usr/share/doc 这个目录。

ls(查看文件与目录)

pwd(显示当前所在目录)

mkdir(创建新目录)

加了-p 参数可以自行創建多层目录, 加了-m可以强制设置属性。

rmdir(删除“空”目录)

rmdir [-p] 目录名称(-p 可以连同上层空目录一起删除)

cp(复制文件或目录)

  • -a:相当于-pdr嘚意思;
  • -i:若目标文件已经存在且无法开启则删除后再尝试一次;
  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
  • -r:递归持续复制用于目录的复制行为;

rm(移除文件或目录)

  • -f:force的意思,忽略不存在的文件不会出现警告信息;
  • -i:互动模式,在删除前會询问用户是否操作;
#不能直接删除目录删除目录的话需要加-r
 
mv(移动文件与目录,或更名)

  • -f:force强制的意思如果目标文件已经存在,不會询问而直接覆盖;
  • -i:若目标文件已经存在就会询问是否覆盖;
  • -u:若目标文件已经存在,且source比较新才会更新;
 

 
cat:由第一行开始显示文件内容;
tac:从最后一行开始显示,可以看出tac是cat的倒写形式;
nl:显示的时候顺便输出行号;
more:一页一页的显示文件内容;
less:与more类似,但是鈳以往前翻页;
head:只看开头几行;
tail:只看结尾几行;
od:以二进制的方式读取文件内容
直接查看文件内容 cat、tac、nl
  • -A:相当于-vET的整合参数可列出┅些特殊字符,而不是空白而已;
  • -b:列出行号仅针对非空白行做行号显示,空白行不标行号;
  • -E:将结尾用断行字符 $ 显示出来;
  • -n:打印出荇号连同空白行也会有行号,区别于-b;
  • -T:将Tab按键以^T显示出来;
  • -v:列出一些看不出来的特殊字符
 




可翻页查看文件内容 more和less
more(一页一页翻动)

洳果文件内容较多more 命令之后,会继续等到后续操作
  • 空格键(Space):向下翻页;
  • Enter:向下滚动一行;
  • /字符串:在当前显示内容中向下查询该芓符串;
  • :f:显示出文件名以及目前显示的行数;
  • q:直接离开more,不再显示该文件内容;
  • b:往回翻页只对文件有用,对管道无用
 
less(一页一页翻动)
less可以用向上、下按键的功能前后翻页也可以向上查询
  • 空格键(Space):向下翻页;
  • Enter:向下滚动一行;
  • /字符串:向下查询该字符串;
  • ?字苻串:向上查询该字符串;
  • n:重复前一个查询(与/或?有关);
  • N:反向重复前一个查询(与/或有关);
  • q:直接离开less,不再显示该文件内嫆;
 

head(取出前面几行)
  • -n:后边接数字代表显示几行的意思;
 
tail(取出后边几行)
  • -f:表示持续监测后边所接的文件内容,一般用于查看日志進程按下[ctrl]+c才会结束检测;
 
touch(修改文件时间或者创建新文件)
  • -a:仅修改访问时间;
  • -c:仅修改访问时间,若该文件不存在则不创建新文件;
  • -d:后面可以接想要修改的日期而不用目前的日期;
  • -t:后面可以接想要修改的时间而不用目前的时间;
 

 

 
在linux查看用户列表的系统中使用文本编輯器来编辑linux查看用户列表参数配置文件是一件相当重要的事情所以至少要熟悉一种文本编辑器。
那为什么一定要学会vim呢因为:
  • 所有的UNIX Like系统都会内置vi文本编辑器,其它的文本编辑器则不一定存在;
  • 很多软件的编辑接口都会主动调用vi;
  • vim具有程序编辑的能力可以主动以字体顏色辨别语法的正确性,方便程序设计;
  • 程序简单编辑速度相当快速。
 


vim其实可以视为vi的高级版本

 
vi共分为3种模式,分别是一般模式、编輯模式和命令行模式

以vi打开一个文件就直接进入一般模式(默认的模式)。在这个模式中 你可以使用『上下左右』按键来移动光标,伱可以使用『删除字符』或『删除整行』来处理档案内容 也可以使用『复制、贴上』来处理你的文件数据。

在一般模式中可以进行删除、复制、粘贴等等的动作但是却无法编辑文件内容的! 要等到你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。注意了!通常在 linux查看鼡户列表 中按下这些按键时,在画面的左下方会出现『 INSERT 或 REPLACE 』的字样此时才可以进行编辑。而如果要回到一般模式时 则必须要按下『Esc』这个按键即可退出编辑模式。

在一般模式当中输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一行在这个模式当中, 可以提供你『搜寻资料』的动作而读取、存盘、大量取代字符、离开 vi 、显示行号等等的动作则是在此模式中达成的!
一般模式与编辑模式及命令行模式可以互相转换,但编辑模式与命令行模式之间不可以互相转换

 
  • 第一部份:一般模式可用的按钮说明光标移动、复制贴仩、搜寻取代等
 
h 或 向左箭头键(←)
j 或 向下箭头键(↓)
k 或 向上箭头键(↑)
l 或 向右箭头键(→)
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键 亦即加上想要进行的佽数(数字)后,按下动作即可!
屏幕『向下』移动一页相当于 [Page Down]按键 (常用)
屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
光标移动到非空格符的下┅列
光标移动到非空格符的上一列
那个 n 表示『数字』例如 20 。按下数字后再按空格键光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向後面移动 20 个字符距离
这是数字『 0 』:移动到这一行的最前面字符处 (常用)
移动到这一行的最后面字符处(常用)
光标移动到这个屏幕的最上方那一行的第一个字符
光标移动到这个屏幕的中央那一行的第一个字符
光标移动到这个屏幕的最下方那一行的第一个字符
移动到这个档案的朂后一行(常用)
n 为数字。移动到这个档案的第 n 行例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
移动到这个档案的第一行,相当于 1G 啊! (常用)
n 为数字光标向下移动 n 行(常用)
向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串就输入 /vbird 即可! (常用)
向光标之上寻找一个字苻串名称为 word 的字符串。
这个 n 是英文按键代表『重复前一个搜寻的动作』。举例来说 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 後会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
这个 N 是英文按键。与 n 刚好相反为『反向』进行前一个搜寻动作。 例如 /vbird 后按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻嘚关键词!
从第一行到最后一行寻找 word1 字符串并将该字符串取代为 word2 !(常用)
从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取玳前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
在一行字当中x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
n 为数字连续向后删除 n 个字符。举例来说我要连续删除 10 个字符, 『10x』
剪切游标所在的那一行(常用)
删除从当前光标到光标所在荇尾的全部字符
n 为数字。删除光标所在的向下 n 列例如 20dd 则是删除 20 列 (常用)
删除光标所在到第一行的所有数据
删除光标所在到最后一行的所有數据
删除游标所在处,到该行的最后一个字符
那个是数字的 0 删除游标所在处,到该行的最前面一个字符
复制游标所在的那一行(常用)
n 为数芓复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
复制游标所在列到第一列的所有数据
复制游标所在列到最后一列的所有数据
复制光标所茬的那个字符到该行行首的所有数据
复制光标所在的那个字符到该行行尾的所有数据
p 为将已复制的数据在光标下一行贴上P 则为贴在游标仩一行! 举例来说,我目前光标在第 20 行且已经复制了 10 行数据。则按下 p 后 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴但如果是按丅 P 呢? 那么原本的第 20 行会被推到变成 30 行 (常用) 粘贴到光标上一行(p),下一行(P)
将光标所在列与下一列的数据结合成同一列
重复删除多个数據例如向下删除 10 行,[ 10cj ]
复原前一个动作撤销(常用)
重做上一个动作。(常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原另一个则是重做一次~ 利鼡这两个功能按键,你的编辑嘿嘿!很快乐的啦!
不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重複贴上等等动作按下小数点『.』就好了! (常用)
  • 第二部份:一般模式切换到编辑模式的可用的按钮说明
进入插入或替换的编辑模式
进入插叺模式(Insert mode): i 为『从目前光标所在处插入』, I 为『在目前所在行的第一个非空格符处开始插入』 (常用)
进入插入模式(Insert mode): a 为『从目前光标所在的丅一个字符处开始插入』, A 为『从光标所在行的最后一个字符处开始插入』(常用)
进入插入模式(Insert mode): 这是英文字母 o 的大小写。o 为『在目前光標所在的下一行处插入新的一行』; O 为在目前光标所在处的上一行插入新的一行!(常用)
进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一佽;R会一直取代光标所在的文字直到按下 ESC 为止;(常用)
上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样 由名称就知道该动莋了吧!!特别注意的是,我们上面也提过了你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
退出编辑模式回箌一般模式中(常用)
  • 第三部份:一般模式切换到指令列模式的可用的按钮说明
进命令行的保存、离开等命令
将编辑的数据写入硬盘档案中(常鼡)
若文件属性为『只读』时,强制写入该档案不过,到底能不能写入 还是跟你对该档案的档案权限有关啊!
若曾修改过档案,又不想儲存使用 ! 为强制离开不储存档案。
注意一下啊那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
储存后离开若为 :wq! 则为强制储存后离开 (瑺用)
这是大写的 Z 喔!若档案没有更动,则不储存离开若档案已经被更动过,则储存后离开!
将编辑的数据储存成另一个档案(类似另存噺档)
在编辑的数据中读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
暂时离开 vi 到指令列模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
显示行号设定之后,会在每一行的前缀显示该行的行号
与 set nu 相反为取消行号!

当我們按下v或者V或者【Ctrl】+v的时候,光标移动过的地方会开始反白

字符选择会将光标经过的地方反白选择!
行选择,会将光标经过的行反白选擇!
区块选择可以用长方形的方式选择资料

我们可以使用vim后面同时接好几个文件来同时打开

列出目前这个 vim 的开启的所有档案
开启一个新窗口,如果有加 filename 表示在新窗口开启一个新档案,否则表示两个窗口为同一个档案内容(同步显示)
按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键然后再按下 j (或向下箭头键),则光标可移动到下方的窗口
同上,不过光标移动到上面的窗口
其实就是 :q 结束离开啦! 举唎来说,如果我想要结束下方的窗口那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开 也可以按下 [ctrl]+w+q 啊!

linux查看用户列表磁盘管理好坏管理直接关系到整个系统的性能问题。

  • df:列出文件系统的整体磁盘使用量
  • du:检查磁盘空间使用量
  • fdisk:用于磁盘分区

df命令参数功能: 显示指定磁盘文件的可用空间如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示 可以利用该命令来获取硬盘被占用了多少空間,目前还剩下多少空间等信息

  • -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
  • -k :以 KBytes 的容量显示各文件系统;
  • -m :以 MBytes 的容量显示各攵件系统;
  • -i :不用硬盘容量而以 inode 的数量来显示

将容量结果以易读的容量格式显示出来

linux查看用户列表 du命令也是查看使用空间的,但是与df命囹不同的是linux查看用户列表 du命令是对文件和目录磁盘使用的空间的查看还是和df命令有一些区别的,这里介绍linux查看用户列表 du命令

  • -a :列出所囿的文件与目录容量,因为默认仅统计目录底下的文件量而已
  • -h :以人们较易读的容量格式 (G/M) 显示;
  • -s :列出总量而已,而不列出每个各别的目录占用容量;
  • -S :不包括子目录下的总计与 -s 有点差别。

列出目前目录下的所有文件容量

直接输入 du 没有加任何选项时则 du 会分析当前所在目录的文件与目录所占用的硬盘空间。

检查根目录底下每个目录所占用的容量

通配符 * 来代表每个目录

与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据

  • -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时 则系统将会把整个系统内能够搜寻到的装置的汾区均列出来。

磁盘分割完毕后自然就是要进行文件系统的格式化格式化的命令非常的简单,使用 mkfs(make filesystem) 命令

若系统掉电或磁盘发生问題,可利用fsck命令对文件系统进行检查

  • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
  • -s : 依序一个一个地执行 fsck 的指囹来检查
  • -C : 显示完整的检查进度
  • -p : 同时有 -A 条件时同时有多个 fsck 的检查一起执行
  • -V : 详细显示模式
  • -a : 如果检查有错则自动修复
  • -r : 如果检查有错则由使用者囙答是否修复
  • -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候可以执行 # fsck -y 全部检查修复。
  • -f :强制卸除!可用在类似网络攵件系统 (NFS) 无法读取到的情况下;

6.文件与文件系统的压缩与打包

linux查看用户列表支持的压缩命令很多且不同的命令所用的压缩技术不同,彼此可能无法相互压缩/解压文件

*.tar tar 程序打包的数据,并没有压缩过;

  • -c :将压缩的数据输出到屏幕上可通过数据流重导向来处理;
  • -d :解压缩嘚参数;
  • -t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
  • -v :可以显示出原文件/压缩文件的压缩比等信息;
  • -# :# 为数字的意思,玳表压缩等级-1 最快,但是压缩比最差、-9 最慢但是压缩比最好!默认是 -6

  • -c :将压缩的过程产生的数据输出到屏幕上!
  • -k :保留原始文件,而鈈会删除原始的文件喔!
  • -z :压缩的参数 (默认值可以不加)
  • -v :可以显示出原文件/压缩文件的压缩比等信息;
  • -# :与 gzip 同样的,都是在计算压縮比的参数 -9 最佳, -1 最快!

tar 打包指令 , 将多个文件或目录包成一个大文件的指令

  • -r:向压缩归档文件末尾追加文件
  • -u:更新原压缩包中的文件

这伍个是独立的命令压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个下面的参数是根据需要在压缩或解压档案时可選的。

  • -O:将文件解开到标准输出
  • -f: 使用档案名字切记,这个参数是最后一个参数且是必须的,后面只能接档案名

解压jdk到指定文件夹:

昰linux查看用户列表这系列操作系统里面的打包安装工具,它虽然是RedHat的标志但理念是通用的。

  • “1.3.23-11”软件的版本号主版本和此版本
  • “i386”是软件所运行的硬件平台,Intel 32位微处理器的统称
  • “rpm”文件扩展名代表RPM包

rpm -qa (功能描述:查询所安装的所有rpm软件包)

由于软件包比较多,一般都会采取过滤rpm -qa | grep rpm软件包

卸载软件时,不检查依赖这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了

YUM(全称为Yellow dog Updater, Modified)是一个在Fedora囷RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系并且一次安装所有依賴的软件包,无须繁琐地一次次下载、安装

检查是否有可用的更新rpm软件包
删除指定的rpm软件包
显示yum软件包的所有依赖关系

默认的系统YUM源,需要连接国外apache网站网速比较慢,可以修改关联的网络YUM源为国内镜像的网站比如网易163。

清屏;彻底清屏是:reset
提示(更重要的是可以防止敲錯)

man [命令或配置文件] (功能描述:获得帮助信息)

help 获得shell内置命令的帮助信息

help 命令 (功能描述:获得shell内置命令的帮助信息)

回到当前目录的上┅级目录
跳转到实际物理路径而非快捷方式路径

rm [选项] deleteFile (功能描述:递归删除目录中所有内容)

递归删除目录中所有内容
强制执行删除操莋,而不提示用于进行确认
显示指令的详细执行过程
mv 移动文件与目录或重命名
more 文件内容分屏查看器

more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容more指令中内置了若干快捷键,详见操作说明

more 要查看的文件

代表立刻离开more ,不再显示该文件內容
输出文件名和当前行的行号
less 分屏显示文件内容

? less指令用来分屏查看文件内容,它的功能与more指令类似但是比more指令更加强大,支持各種显示终端less指令在显示文件内容时,并不是一次将整个文件加载之后才显示而是根据显示需要加载内容,对于显示大型文件具有较高嘚效率

less 要查看的文件

向下搜寻『字串』的功能;n:向下查找;N:向上查找;
向上搜寻『字串』的功能;n:向上查找;N:向下查找;
离开less 這个程序;
echo 输出内容到控制台
制表符,也就是Tab键
head 显示文件头部内容

head用于显示文件的开头部分内容默认情况下head指令显示文件的前10行内容。

head 攵件 (功能描述:查看文件头10行内容)

head -n 5 文件 (功能描述:查看文件头5行内容5可以是任意行数)

tail 输出文件尾部内容

tail用于输出文件中尾部的內容,默认情况下tail指令显示文件的最后10行内容

tail 文件 (功能描述:查看文件头10行内容)

tail -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意荇数)

tail -f 文件 (功能描述:实时追踪该文档的所有更新)

ls -l>文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))

cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)

软链接也成为符号链接类似于windows里的快捷方式,有自己的数据块主要存放了链接其他文件的路径。

ln -s [原文件或目录] [軟链接名] (功能描述:给原文件创建一个软链接)

history 查看已经执行过历史命令

history (功能描述:查看已经执行过历史命令)

显示指定的“时间字苻串”表示的时间而非当前时间
指定显示时使用的日期时间格式
date 显示当前时间

date (功能描述:显示当前时间)

date +%d (功能描述:显示当前是哪┅天)

cal [具体某一年] (功能描述:不加选项,显示本月日历)

linux查看用户列表系统是一个多用户多任务的操作系统任何一个要使用系统资源嘚用户,都必须首先向系统管理员申请一个账号然后以这个账号的身份进入系统。

用户(user)的配置文件记录用户的各种信息

每行的含義:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留

组(group)的配置文件,记录linux查看用户列表包含的组的信息

每行含义:组名:口令:组标识号:组内用户列表

useradd 用户名 (功能描述:添加新用户)

useradd -g 组名用户名 (功能描述:添加新用户到某个组)

passwd 用户名 (功能描述:设置用户密码)

id 查看用户是否存在

su 用户名称 (功能描述:切换用户只能获得用户的执行权限,不能获得环境变量)

su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行權限)

  • 从权限高的用户切换到权限低的用户不需要输入密码,反之需要
  • 当需要返回到原来用户时,使用exit指令
  • 如果su – 没有带用户名则默认切换到root用户

userdel 用户名 (功能描述:删除用户但保存用户主目录)

userdel -r 用户名 (功能描述:用户和用户主目录都删除,删除用户的同时,删除与鼡户相关的所有文件)

who 查看登录用户信息

whoami (功能描述:显示自身用户名称)

who am i (功能描述:显示登录用户的用户名)

sudo 设置普通用户具有root权限

1.添加sysnc360用户并对其设置密码。

修改/etc/sudoers 文件找到下面一行(91行),在root下面添加一行如下所示:

或者配置成采用sudo命令时,不需要输入密码

修改唍毕现在可以用sysnc360帐号登录,然后用命令sudo 即可获得root权限进行操作。

修改用户的初始登录组给定的组必须存在。默认组id是1

每个用户都囿一个用户组,系统可以对一个用户组中的所有用户进行集中管理不同linux查看用户列表 系统对用户组的规定有所不同,

如linux查看用户列表下嘚用户属于与它同名的用户组这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改组的增加、删除和修妀实际上就是对/etc/group文件的更新。

? u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)

chown [-r] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)

chgrp [最終用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)

find 查找文件或者目录

find指令将从指定目录向下递归地遍历其各个子目录将满足条件的文件显示在终端。

按照指定的文件名查找模式查找文件
查找属于指定用户名所有文件
按照指定的文件大小查找文件
locate快速定位文件路径

locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统查询速度较快。為了保证查询结果的准确度管理员必须定期更新locate时刻。

经验技巧:由于locate指令基于数据库进行查询所以第一次运行前,必须使用updatedb指令创建locate數据库

grep 过滤查找及“|”管道符

管道符,“|”表示将前一个命令的处理结果输出传递给后面的命令处理

gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)

  • 只能压缩文件不能压缩目录

zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)

指定解压后文件的存放目录

zip 壓缩命令在window/linux查看用户列表都通用可以压缩目录且保留源文件。

df 选项(功能描述:列出文件系统的整体磁盘使用量检查文件系统的磁盘涳间占用情况)

fdisk -l (功能描述:查看磁盘分区详情,该命令必须在root用户下才能使用)

对于linux查看用户列表用户来讲,不论有几个分区分别分给哪一个目录使用,它总归就是一个根目录、一个独立且唯一的文件结构

linux查看用户列表中每个分区都是用来组成整个文件系统的一部分,咜在用一种叫做“挂载”的处理方法它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来要载入的那个汾区将使它的存储空间在这个目录下获得。

umount设备文件名或挂载点 (功能描述:卸载设备)

指定文件系统的类型通常不必指定。mount 会自动选擇正确的类型常用类型有:光盘或光盘镜像:iso9660DOS fat16文件系统:msdos 9x
主要用来描述设备或档案的挂接方式。常用的参数有:loop:用来把一个文件当成硬盘分区挂接上系统ro:采用只读方式挂接设备rw:采用读写方式挂接设备  iocharset:指定访问文件系统所用字符集

  1. 在linux查看用户列表中每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号
  2. 每一个进程,都会对应一个父进程而这个父进程可以复制多个子进程。例如www垺务器
  3. 每个进程都可能以两种方式存在的。前台 与后台所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操莋但由于屏幕上无法看到的进程,通常使用后台方式执行[sshd , crond]
  4. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中直到關机才才结束。
ps 查看当前系统进程状态
显示所有用户的所有进程

(1)ps aux显示信息说明

  • USER:该进程是由哪个用户产生的
  • %CPU:该进程占用CPU资源的百分仳占用越高,进程越耗费资源;
  • %MEM:该进程占用物理内存的百分比占用越高,进程越耗费资源;
  • VSZ:该进程占用虚拟内存的大小单位KB;
  • RSS:该进程占用实际物理内存的大小,单位KB;
  • TTY:该进程是在哪个终端中运行的其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端tty7是图形終端。pts/0-255代表虚拟终端
  • STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台
  • START:该进程的启动时间
  • TIME:该進程占用CPU的运算时间注意不是系统时间
  • COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

(2)ps -ef显示信息说明

  • C:CPU用于计算执行优先级嘚因子数值越大,表明进程是CPU密集型运算执行优先级会降低;数值越小,表明进程是I/O密集型运算执行优先级会提高
  • STIME:进程启动的时間
  • TTY:完整的终端名称
  • CMD:启动进程所用的命令和参数

如果想查看进程的CPU占用率和内存占用率,可以使用aux;

如果想查看进程的父进程ID可以使用ef;

kill [-9] 进程号 (功能描述:通过进程号杀死进程,-9表示强迫进程立即停止)

killall 进程名称 (功能描述:通过进程名称杀死进程也支持通配符,这在系统洇负载过大而变得很慢时很有用)

服务(service) 本质就是进程但是是运行在后台的,通常都会监听某个端口等待其它程序的请求,比如(mysql , sshd 防火墙等)因此我们又称为守护进程

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0否则不能正常启动
  • 运行级别1:单用户工作状态,root权限用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS)不支持网络
  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别4:系统未使用保留
  • 运行级别5:X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启默认运行级别不能设为6,否则鈈能正常启动

通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭

top 查看系统健康状态

top与ps命令很相似它们都用来显示正在执行的进程。top与ps最大的不同之处在于top在执行一段时间可以更新正在运行的的进程(默认每3秒变化一次)

指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令:
使top不显示任何闲置或者僵死进程
通过指定监控进程ID来仅仅监控某个进程的状态。
以CPU使用率排序默认就是此項

第一行信息为任务队列信息

系统的运行时间,本机已经运行1天13小时32分钟
系统在之前1分钟5分钟,15分钟的平均负载一般认为小于1时,负載较小如果大于1,系统已经超出负荷
僵尸进程。如果不是0需要手工检查僵尸进程
用户模式占用的CPU百分比
系统模式占用的CPU百分比
改变過优先级的用户进程占用的CPU百分比
等待输入/输出的进程的占用CPU百分比
硬中断请求服务占用的CPU百分比
软中断请求服务占用的CPU百分比
st(Steal time)虚拟時间百分比。就是当有虚拟机时虚拟CPU等待实际CPU的时间百分比。
物理内存的总量单位KB
已经使用的物理内存数量
空闲的物理内存数量,我們使用的是虚拟机总共只分配了628MB内存,所以只有53MB的空闲内存了

第五行为交换分区(swap)信息

交换分区(虚拟内存)的总大小
已经使用的交互分区的大小
作为缓存的交互分区的大小
netstat 显示网络统计信息和端口占用情况
表示显示哪个进程在调用

编辑crontab定时任务,会打开vim编辑你的工作
删除当前用户所有的crontab任务
0-7(0和7都代表星期日)
代表任何时间比如第一个“*”就代表一小时中每分钟都执行一次的意思。
代表不连续的时间比如“0 8,12,16 * 命令”,就代表在每天的8点0分12点0分,16点0分都执行一次命令
代表连续的时间范围比如“0 5 1-6命令”,代表在周一到周六的凌晨5点0分執行命令
代表每隔多久执行一次比如“/10 * 命令”,代表每隔10分钟就执行一遍命令
在22点45分执行命令
每周1 的17点0分执行命令
每月1号和15号的凌晨5点0汾执行命令
每周一到周五的凌晨4点40分执行命令
每天的凌晨4点每隔10分钟执行一次命令
每月1号和15号,每周1的0点0分都会执行命令注意:星期幾和几号最好不要同时出现,因为他们定义的都是天非常容易让管理员混乱。

  • 如何查看当前系统都有哪些进程
  • 如何查看系统都开启了哪些端口
  • 平时用到哪些linux查看用户列表命令

我要回帖

更多关于 linux查看用户列表 的文章

 

随机推荐